概述:
本文讲解:如何快速导入逻辑备份生成的SQL脚本。其他文件格式暂时不讲解。
在日常开发中大家肯定都遇到过这些需求:“数据迁移,数据恢复,新建从库”等任务,因为我们肯定知道做这些需求会涉及到大量数据的处理。
大量的数据有时候会导致我们的数据处理进度非常缓慢,所以我们总是要想一些办法去解决它,对吧?
其实有一些小技巧可以大大提高我们数据的处理速度,快来吧~~~
提示 - 解决方案 1
开始说明一下:在导出或者导入数据的时候,尽量使用MySQL自带的命令工具,不要用一些图形化工具(……),因为MySQL的命令行工具比图形化工具至少快2倍。
命令行模式:
代码语言:
复制
# 导出整个实例
mysqldump -u用户名 -p密码 --all-databases > all_database.sql
# 导出指定库
mysqldump -u用户名 -p密码 --databases testdb > testdb.sql
# 导出指定表
mysqldump -u用户名 -p密码 testdb test_tb > test_tb.sql
# 导入指定SQL文件 (指定导入testdb库中)
mysql -u用户名 -p密码 testdb < testdb.sql
提示 - 解决方案 2
修改参数:
在MySQL中,有一对有趣的参数:
代码语言:
复制
“ innodb_flush_log_at_trx_commit ”
与
“ sync_binlog ”
为了安全起见,该参数默认为1,为了快速导入SQL数据,可以临时修改默认参数值。
代码语言:
复制
参数一: innodb_flush_log_at_trx_commit默认值为1,可设置为0、1、2
如果设置为0,那么每秒会将日志写入日志文件一次,同时会进行日志文件的flush操作,该模式下,当事务提交时,不会主动触发写入磁盘的操作。
如果设置为 1,每次提交事务时,MySQL 都会将日志数据写入日志文件并将其刷新到磁盘。
如果设置为2,MySQL每次提交事务时都会将日志数据写入日志文件。但是不会同时执行flush操作。在此模式下,MySQL每秒执行一次flush操作。
代码语言:
复制
参数二: sync_binlog默认值为1,可设置为[0,N)
当=0时,和操作系统刷新其他文件的机制一样,MySQL不会同步到磁盘而是依靠操作系统来刷新日志。
当=N(N>0)时,MySQL每写入二进制日志N次就会使用()函数将其二进制日志同步到磁盘。
注:这两个参数可以在线修改,如果想快速导入,可以按照以下命令行
代码语言:
复制
# 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;
提示 - 选项 3
这个场景也很熟悉,就是创建新的从库,并且不产生日志。
解决办法很简单,在sql脚本开头添加:
代码语言:
复制
set sql_log_bin=0;
然后继续执行导入,这样也会加快进程。(如果没有启用MySQL,则不需要执行此语句)
就到此结束。首先恭喜你又读完了一篇文章。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。