昨天公司想要将一个数据库的数据导出再导入到另外一个数据库里面,SQLYog已经具有了这个功能呢,所以本以为直接按两下键就可以搞定了。不过用这个导出的时候没有任何问题,但是在导入到另外一个数据库的时候老是出现问题,查看了一下Error Log 发现是因为不能创建某些表因为外键引用出现问题从而导致整个Dump失败,尝试了数次之后发现还是不行,之后就直接用Mysql提供的命令来搞,没有问题,命令如下:
- mysqldump -h somehost -u root -p --opt --databases some_db --single-transaction --flush-logs > d:/dumpfile.sql
mysqldump -h somehost -u root -p --opt --databases some_db --single-transaction --flush-logs > d:/dumpfile.sql
运行这个命令后,登陆Mysql,再用命令
- msyql>source d:/dumpfile.sql
msyql>source d:/dumpfile.sql
这时候如果用SQLYog导入数据也没有问题的,可能是它在导出的Sql文件当中,表的创建顺序产生了问题出现外键引用出错。
为什么用SQLYog导出数据的时候会出现问题,而用以上命令却没有。不知道各位有没有类似经验。
后来发现好像是因为数据文件太大了,超过了max_allowed_packet上限,导致导入失败。要想导入数据量大的文件,要将这个变量的上限改大一点,方法如下:
- set global max_allowed_packet=10000000;
- set global net_buffer_length=10000;
- 第一个变量的描述是:The maximum packet length to send to or receive from the server. (Default value is 16MB.)
- 第二个变量的是:The buffer size for TCP/IP and socket communication. (Default value is 16KB.)