Mysql数据导出与导入
在做mysql的大数据量导出时,使用 mysqldump 工具导一会就结束了,查看sql文件最下面提示:
Lost connection to MySQL server during query when dumping table `table_name` at row: 2002359
根据提示应该是导出时耗时比较久,数据库连接断了。根据网上的提示:https://stackoverflow.com/questions/53091734/getting-lost-connection-to-mysql-when-using-mysqldump-even-with-max-allowed-pack
设置了下面4个全局变量:
SET GLOBAL wait_timeout=86400;
SET GLOBAL interactive_timeout=86400;
SET GLOBAL net_read_timeout=3600;
SET GLOBAL net_write_timeout=3600;
并在命令行中增加了三个参数:
--quick --max_allowed_packet=512M --compress
之后就可以正常导出了。但导出的sql文件中还包含一些无用的语句,比如:DISABLE KEYS 和 ENABLE KEYS 等,根据建议,有增加了一些参数,最后语句为:
mysqldump -u root -pYourPassWord --quic --max_allowed_packet=512M --compress --single-transaction --skip-disable-keys --skip-add-locks --set-gtid-purged=OFF YourDbName > xxx.sql
在导出的sql文件中发现一些不完整的语句,导入时报错,疑似是因为 max_allowed_packet 设置不够大导致,将其设置为1024M试试。
由于在命令行中写入了密码,在导出的文件中第一行会出现一句提示。该提示是非法的sql语句,在导入时会报错。
如果导出的sql文件特别大,直接使用vim打开会崩溃,根据网上提示:https://stackoverflow.com/questions/339483/how-can-i-remove-the-first-line-of-a-text-file-using-bash-sed-script
可以使用tail来跳过第一行,导入命令如下:
tail -n +2 xxx.sql | mysql -u rot -pYourPassWord YourDbName
也可以用 sed -i ‘1d’ filename 命令来修改文件,但如果文件很大,修改也需要一段时间。