备份时添加 --extended-insert 将多个insert into 语句合并成一行,能提高效率3-4倍
使用--extended-insert=false导出的sql文件数据是这样的,每行一条insert语句,执行效率非常低下
使用–-extended-insert=true导出的表,是一个很长的insert语句,会进行批量插入。
使用mysqldump -uroot -pPWD –-extended-insert database >database.sql
如果你的数据库储存引擎是MYISAM参数的话,可以将此参数设置到512M或256M,MyISAM会使用一种特殊的树状缓存来做出更快的批量插入。
相关文档https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_bulk_insert_buffer_size
该值默认是8M = 8388608byte
查看插入缓冲区大小
`SHOW VARIABLES LIKE '%bulk%'
设置插入缓冲区大小(全局)
`SET GLOBAL bulk_insert_buffer_size =1024*1024*512;`
设置插入缓冲区大小(session)
`SET bulk_insert_buffer_size =1024*1024*256;`
如果需要设置Mysql重新启动时,依然保留该值,需要将这段配置添加了my.cnf
`[mysqld]``bulk_insert_buffer_size = 256M`
//关闭自动提交
SET autocommit=0;
//关闭唯一检查
set unique_checks = 0;
//关闭外键检查
SET foreign_key_checks=0;
//备份的时候开启
--extended-insert
参数
关于Innodb批量数据加载相关文档:MySQL :: MySQL 5.7 Reference Manual :: 8.5.5 Bulk Data Loading for InnoDB Tables
注意事项:对于大数据量恢复备份存在日志缓存问题,推测可能与关闭自动提交和一次插入大批量数据,没有分条插入有关
登录mysql 数据库
msyql -uroot -pPWD
> source /path/bak.sql
恢复数据完成后,获取所有表行数,和原来数据库对比数据差异
生成查询sql
select concat(
'select "',
TABLE_name,
'", count(*) from ',
TABLE_SCHEMA,
'.',
TABLE_name,
' union all'
) from information_schema.tables
where TABLE_SCHEMA='database';
复制所有生成的sql ,去掉最后一行结尾处的 union all ,执行查询,等待查询结果
select "call_me_cash_coupon", count(*) from xxx.call_me_cash_coupon union all
select "call_me_com_spe", count(*) from xxx.call_me_com_spe union all
select "call_me_delivery_clerk", count(*) from xxx.call_me_delivery_clerk union all
select "call_me_goods_spec_relation", count(*) from xxx.call_me_goods_spec_relation
执行效果:
-call_me_cash_coupon | count(*) |
---|---|
call_me_cash_coupon | 633 |
call_me_com_spe | 64 |
call_me_delivery_clerk | 4510 |
call_me_goods_spec_relation | 3067 |
转载:https://www.cnblogs.com/h-gallop/p/12216818.html
最后还是建议大家,有条件可以装一个可视化工具连接数据库进行备份及还原