MySQL 备份和恢复速度优化

Mysqldump 备份以及恢复导入数据库很慢的解决办法

  1. # 登录 MySQL
  2. mysql -u root -p'!Fzb_dahua2019'
  3. 参看数据库的参数值,使用如下命令;
  4. mysql> show variables like 'max_allowed_packet';
  5. mysql> show variables like 'net_buffer_length';
  6. mysql> show variables like 'max_allowed_packet';
  7. +--------------------+----------+
  8. | Variable_name | Value |
  9. +--------------------+----------+
  10. | max_allowed_packet | 67108864 |
  11. +--------------------+----------+
  12. 1 row in set (0.01 sec)
  13. mysql> show variables like 'net_buffer_length';
  14. +-------------------+-------+
  15. | Variable_name | Value |
  16. +-------------------+-------+
  17. | net_buffer_length | 16384 |
  18. +-------------------+-------+
  19. 1 row in set (0.01 sec)
  20. # mysqldump -uroot -p'数据库密码' 原数据库名 -e --max_allowed_packet=67108864 --net_buffer_length=16384 > file.sql
  21. # mysqldump -uroot -p'!Fzb_dahua2019' IFCSDB_NEW -e --max_allowed_packet=67108864 --net_buffer_length=16384 > dump20200520.sql

1.用mysqldump 命令进行备份:

  1. mysqldump -hlocalhost -uroot -proot databaseName > fileName.sql

-h主机名 -u 用户名 -p 密码
databaseName 要备份的数据库 fileName.sql 备份后的文件名
-h,-u的参数名和参数值之间空格可有可无
-p的不能有空格

2.用mysqldump 命令进行恢复:

  1. function importDB(){
  2. newBasePath=/ICC/dahua/fire
  3. DBName=IFCSDB_mysqldump
  4. DBPwd='!Fzb_dahua2019'
  5. bakSQLFile=$newBasePath/bak20200515DB
  6. mysqldump -uroot -p$DBPwd $DBName < $bakSQLFile.sql
  7. }

恢复时,要恢复的数据库必须存在

另外一种方法:

cat test.sql | mysql -u root -p’数据库密码’

mysqlpump与mysqldump及mydumper的备份速度测试

https://blog.csdn.net/zengxuewen2045/article/details/52453135

结论:
mysqlpump的备份效率是最快的,mydumper次之,mysqldump最差

  1. mysqlPWD='!Fzb_dahua2019'
  2. DBName=IFCSDB_NEW
  3. time mysqlpump -uroot -p${mysqlPWD} -h127.0.0.1 --single-transaction --default-character-set=utf8 --compress-output=LZ4 --default-parallelism=3 -B $DBName

关于mysql还原数据库特别慢的解决办法

原文链接:https://blog.csdn.net/wsfzj123/java/article/details/88909485 还原个8G的数据库还原了一晚上还没跑完,头疼。

  • 查看变量 innodb_flush_log_at_trx_commit的值
    1. SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit' ;
    查询结果如果是 1 的话,将其修改成 0
  1. SET GLOBAL innodb_flush_log_at_trx_commit =0;
  • 这时候再 source,会发现速度快了很多,在结束后记得把这个变量重新设置成 **1**
    1. SET GLOBAL innodb_flush_log_at_trx_commit =1;

用mysqldump备份出来的还原回去很慢解决办法

MySQL导出的SQL语句在导入时有可能会非常非常慢,在处理百万级数据的时候,可能导入要花几小时。在导出
时合理使用几个参数,可以大大加快导 入的速度。

首先确定目标数据库的参数值
mysql> show variables like 'max_allowed_packet';
mysql> show variables like 'net_buffer_length';
根据参数值书写 mysqldump 命令,如:

  1. DBPwd='!Fzb_dahua2019'
  2. DBName=IFCSDB_NEW
  3. bakSQLFile=bakSQL
  4. max_allowed_packet=
  5. net_buffer_length=
  6. -- mysqldump -uroot -p$DBPwd $DBName -e --max_allowed_packet=$max_allowed_packet --net_buffer_length=$net_buffer_length > $bakSQLFile.sql
  7. mysqldump -uroot -p$DBPwd $DBName -e --max_allowed_packet=67108864 --net_buffer_length=16384 > $bakSQLFile.sql

-e 使用包括几个VALUES列表的多行INSERT语法;
—max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小;
—net_buffer_length=XXX TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。

注意:max_allowed_packet 和 net_buffer_length 不能比目标数据库的设定数值大,否则可能出错。

Linux下修改Mysql数据库存放路径

MySQL 备份、恢复、迁移 - 图1

标签: linux mysql 存放路径 centos 分类: 数据库

原路径:/var/lib/mysql
目标路径:/home/data/mysql

1、home目录下建立data目录
cd /home
mkdir data

2、停止mysql进程
service mysqld stop

3、把 /var/lib/mysql 整个目录保持权限复制到 /home/data
cp -arp /var/lib/mysql /home/data/
4、找到my.cnf配置文件
如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/找到my-medium*.cnf文件,拷贝到/etc/并改名为my.cnf
命令如下:
[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

5、编辑/etc/my.cnf
为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改
socket=/var/lib/mysql/mysql.sock 为:
socket=/home/data/mysql/mysql.sock
操作如下:
vi   my.cnf  (用vi工具编辑my.cnf文件,找到下列数据修改之)
# The MySQL server[mysqld] 
port = 3306
#socket  = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行)
socket  = /home/data/mysql/mysql.sock (加上此行)

6、修改MySQL启动脚本/etc/init.d/mysql
搜索datadir将/var/lib/mysql修改成现在的实际存放路径:home/data/mysql
[root@test1 etc]# vi /etc/init.d/mysqlget_mysql_option mysqld datadir “/data/mysql”
最后做一个mysql.sock 链接:
ln -s /home/data/mysql/mysql.sock /var/lib/mysql/mysql.sock(需要从/home/data/mysql下复制一份过来)

7、重新启动MySQL服务
service mysqld restart

创建数据库,查看目标目录下是否已经存在