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