mysql 大sql文件使用mysqldump备份提速方案

mysqldump备份

备份时添加 --extended-insert 将多个insert into 语句合并成一行,能提高效率3-4倍

使用--extended-insert=false导出的sql文件数据是这样的,每行一条insert语句,执行效率非常低下

使用–-extended-insert=true导出的表,是一个很长的insert语句,会进行批量插入。

使用mysqldump -uroot -pPWD –-extended-insert database >database.sql

调整MYSQL快速插入参数

如果你的数据库储存引擎是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`

对于Innodb引擎中,我们可以关闭一些系统检查项来实现更快的插入的方案.

//关闭自动提交
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

最后还是建议大家,有条件可以装一个可视化工具连接数据库进行备份及还原 

你可能感兴趣的:(Java基础,mysql,sql,数据库)