MySQL数据库导入导出大数据量注意事项
MySQL导出导入小数据量时可以使用Navicate等客户端工具,但是当数据库量达到一定后,使用图形化的客户端工具会出现各种各样的问题,比如Navicate会出现进度百分比计算不对无法结束的问题。
导出
导出一个数据库的结构以及数据,通过Xshell远程连接Mysql服务器,在命令行窗口执行mysqldump
命令进行操作
语法
mysqldump dbname -uroot -p > dbname.sql
实例
mysqldump steal-treasure -uroot -p > steal-treasure.sql
待命令执行完成后,即可完成导出
导入
问题
通过source命令导入sql脚本出现如下错误
ERROR 1231 (42000): Variable 'time_zone' can't be set to the value of 'NULL'
ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'NULL'
ERROR 1231 (42000): Variable 'foreign_key_checks' can't be set to the value of 'NULL'
ERROR 1231 (42000): Variable 'unique_checks' can't be set to the value of 'NULL'
ERROR 1231 (42000): Variable 'character_set_client' can't be set to the value of 'NULL'
ERROR 1231 (42000): Variable 'collation_connection' can't be set to the value of 'NULL'
ERROR 1231 (42000): Variable 'sql_notes' can't be set to the value of 'NULL'
方案
方案一 全局配置
修改/etc/my.cnf
配置文件
[root@swk-store-208 ~]# vim /etc/my.cnf
调整配置节[mysqld]
,添加或调整配置max_allowed_packet
max_allowed_packet=16M
使得参数的值变大重启Mysql服务即可。
[root@swk-store-208 ~]# service mysqld restart
方案二 临时配置
检查目前数据库配置的导入文件大小
SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet';
根据当下需要导入文件的实际大小合理的调整上述参数
全局配置生效
SET GLOBAL max_allowed_packet=1024*1024*1024*10;
当前会话生效
set max_allowed_packet=1024*1024*1024*10;
此处是设置了10G大小的限制
Linux下面可以使用10241024102410,Windows下面使用计算好的值
10241024102410= 10737418240
检查是否生效
SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet';
实施
- 将脚本上传至服务器某个路径下,例如:/xxx/dbfile/init.sql
- 在服务器上通过命令进入MySQL,mysql -uroot -p,输入正确的密码敲回车进入MySQL
- 创建导入的dbname数据库,并通过
use
命令进入,例如:use dbname; - 通过source命令导入脚本,例如:source /iflytek/dbfile/init.sql
- 待命令执行完毕后,打开本地数据库客户端工具(navicat)连接数据库逐个查看核对本次导入是否成功
检查
执行完数据的导入后,通过Navicate等图形化客户端工具在查询Mysql对应的数据库时会发现查询和对应的操作会异常缓慢,此时重启Mysql服务也会出现无法正常重启的情况。此时不要慌张,等待半个小时到一个小时再操心数据库即可发现一切正常,天气晴朗,要给它一点时间缓一缓。