问题背景
在一次业务操作中,由于公司DBA刚刚离职,而我又需要将测试环境的一个MySQL数据库(schema)复制到生产环境。没办法,只能自己来了。由于生产和测试环境不属性同一个网络环境,只能先从源数据库(测试库)中导出数据,然后再上传到生产环境,导入目标数据库。
于是网上搜索了一翻,常规的操作基本都是先使用mysqldume命令导出数据库文件(.sql),使用再使用mysql命令导入目标数据库。
导出的步骤很顺序,但在导入目标库的时候,报了一个错误,如下:
ERROR 2013 (HY000) at line 2773: Lost connection to MySQL server during query
经过网上搜索类似的问题答案与不断进行验证,终于成功完成数据库的复制。
操作步骤
导出源数据库SQL文件
mysqldump -uroot -p123456 sourcedb > sourcedb.sql
将SQL文件上传至目标服务器上
因为本地测试环境数据库在Linux上,而与数据库不在一个网络,固操作时用Xftp先将导入文件下载到本地,再从本地上传到目标服务器上。
执行导入
mysql -uroot -p123456 targetdb < sourcedb.sql
至此,本以为一切都很顺利,但过了十几份钟后,还是报了一个错误,如下:
先说一下,我这个导出的surcedb.sql文件,导出来有9G大小,所以一直怀疑是不是文件太小了,网了找了一篇类似文件的解决办法,http://www.downun.com/article...,说是要调高这个值:max_allowed_packet,也就是允许客户端每次向服务端发送包的大小。
所以我查了一下目标服务器上mysql的配置:
打开/etc/my.cnf文件,修改参数为1024M:
然后重启mysql:service mysqld restart
再查看参数,如下:
最后,再执行前面的导入命令mysql -uroot -p123456 targetdb < sourcedb.sql
但遗憾,最后还是报了上面的错误,失败....
最后解决方案
也许是对数据库操作不够专业,功力不够。对于使用mysqldump命令还是没能成功的复制文件。想其原因,可能是测试环境数据库版本与线上版本不一致、也可能是因为连接超时、也可能是文件太大了。
最后,还是使用了Navicat Premium的数据传输功能解决了问题。
- 用Navicat连接源和目标数据库,(由于目标数据库是生产库,特意还去设置了外网的访问权限)
- 使用Navicat的数据传输功能复制表结构与数据。
开始时,我是所有表一次性传输,但执行了几分钟后,还是报错了。最终,我是一张表一张表的传输,最终,完成了数据库的复制。
Navicat数据传输
- 选择数据传输
- 选择源与目标数据库
- 此处选择单表传输,因为我选择所有表一次性传输的时候,可能是数据量太大,没成功...
- 数据传输中...
- 数据传输完成
- 依据以上步骤,依次传输所有表就可以了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。