MySQL命令行source导入SQL文件过大或连接超时的解决办法

MYSQL导入数据两种方式mysql和source命令

本次对线上数据做了次备份,想在本机搭建下测试环境,由于个别表数据比较大,SQL文件大概3个G,首先使用了source命令进行导入过程如下:

1、source 命令导入:

source命令需要首先进入MySQL命令行:

  mysql -uroot -p"yourpassword"

切换到需要导入的数据库,然后用source命令执行该文件:

mysql > use mydatabase;
mysql > source /home/data/my.sql

不过可能是文件比较大,导入进行到一半是总是提醒“can’t connect server”,在网上查了些文章说是调整全局参数。设置后无果。只能转而使用mysql 命令导入,导入步骤如下:

2、mysql命令导入:

mysql -uroot -p"yourpassword" mydatabase < /home/data/my.sql

执行结果虽然也比较慢,但是最终还是执行成功了。

另外查看解决办法的时候,也看到一些总结写的不错,记录下来方便以后使用:

对于大于百M的SQL文件,如果光这样导入,速度是极其缓慢的,
根据MySQL官方建议,我们有几个措施可以极大提高导入的速度,如下:

  1. 对于MyISAM,调整系统参数:bulk_insert_buffer_size(至少单个文件大小的2倍以上)
  2. 对于InnoDB,调整系统参数:innodb_log_buffer_size(至少单个文件大小的2倍以上,导入完成后可以改回默认的8M,注意不是innodb_buffer_pool_size。)
  3. 除主键外,删除其他索引,导入完成后重建索引。
  4. 关闭自动提交:autocommit=0。(请勿用set global autocommit=1;命令来关闭,否则整个MySQL系统都会停止自动commit,innodb log buffer很快就会爆满,5和6项也请仅在会话中有效,正确做法请往下看)
  5. 关闭唯一索引检查:unique_checks=0。(关闭了这一项会影响on duplicate key update的效果)
  6. 关闭外键检查:foreign_key_checks=0。
  7. insert值写在一条语句内,如:INSERT INTO yourtable VALUES (1,2), (2,3), …;
  8. 有自增列的,设置:innodb_autoinc_lock_mode的值为 2。
发布了5 篇原创文章 · 获赞 1 · 访问量 2190

猜你喜欢

转载自blog.csdn.net/liuhuyydy/article/details/103769439