导出

增加参数–compress和–single-transaction

1
2
3
4
# 导出整个实例
mysqldump -h mysql-primary -P 3306 --all-databases --master-data -u root -p'ZAQ!2wsx' --compress --single-transaction > dbdump.db


导入

        在 MySQL 中,有一对大名鼎鼎的 “双一” 参数,即 innodb_flush_log_at_trx_commit 与 sync_binlog 。为了安全性这两个参数默认值为 1,为了快速导入脚本,我们可以临时修改下这两个参数,下面简单介绍下这两个参数:

innodb_flush_log_at_trx_commit:

innodb_flush_log_at_trx_commit 默认值为 1,可设置为 0、1、2

如果 innodb_flush_log_at_trx_commit 设置为 0,log buffer 将每秒一次地写入 log file 中,并且 log file 的 flush(刷到磁盘) 操作同时进行。该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。

如果 innodb_flush_log_at_trx_commit 设置为 1,每次事务提交时 MySQL 都会把 log buffer 的数据写入 log file,并且 flush(刷到磁盘) 中去.

如果 innodb_flush_log_at_trx_commit 设置为 2,每次事务提交时 MySQL 都会把 log buffer 的数据写入 log file. 但是 flush(刷到磁盘) 操作并不会同时进行。该模式下, MySQL 会每秒执行一次 flush(刷到磁盘) 操作。

sync_binlog:

sync_binlog 默认值为 1,可设置为 [0,N)

当 sync_binlog =0,像操作系统刷其他文件的机制一样,MySQL 不会同步到磁盘中去而是依赖操作系统来刷新 binary log。

当 sync_binlog =N (N>0) ,MySQL 在每写 N 次 二进制日志 binary log 时,会使用 fdatasync() 函数将它的写二进制日志 binary log 同步到磁盘中去。

这两个参数可以在线修改,若想快速导入,可以按照下面步骤来操作:

1
2
3
4
5
6
7
8
9
10
# 1.进入MySQL命令行 临时修改这两个参数
set global innodb_flush_log_at_trx_commit = 2;
set global sync_binlog = 2000;

# 2.执行SQL脚本导入
mysql -uroot -pxxxxxx testdb < testdb.sql

# 3.导入完成 再把参数改回来
set global innodb_flush_log_at_trx_commit = 1;
set global sync_binlog = 1;

搬运的该文章解决MySQL导入数据量大速度慢问题_数据库导入速度-CSDN博客