在使用mysqdump导出的sql时,1G文件大约导入了20分钟,需要频繁测试,这个不能忍,查询后得到以下优化方法,基本在2分钟左右。
导出文件太慢
mysqldump -uxxxx -pxxxx -e --max_allowed_packet=1048576 --net_buffer_length=16384 > backup.sql
说明:
-e 生成insert语句时,使用多行插入的模式,这个对大数据性能影响非常大
max_allowed_packet和net_buffer_length是说同行缓存区的大小,这个值不能比服务器的大,服务器上这样查看
mysql> show variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.06 sec)
mysql> show variables like 'net_buffer_length';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| net_buffer_length | 16384 |
+-------------------+-------+
1 row in set (0.00 sec)
导出数据时出现can’t opne file ‘xx.frm’ (errno:24)错误
一开始以为是被锁了,后来发现lock列表是空的,重启服务后没有其他连接也不行,后来得知是一个叫open_files_limit的设置的问题。
open_files_limit的系统默认值为max_connections*5 或 max_connections + table_cache*2。
如果open_files_limit设置过小,造成打开的文件过多,就会出现错误’xxx.frm’无法打开。
解决方案:命令行修改global open_files_limit比要导出的表数量多即可,修改配置文件后重启也行。
导入mysql数据太慢
- 确保导入的SQL头部有如下设置
SET FOREIGN_KEY_CHECKS=0;
SET AUTO_COMMIT=0;
- mysql导入的参数设置max_allowed_packet大一些
mysql -uxxxx -pxxxx database --default-character-set=utf8 --max_allowed_packet=256M < backup.sql
网友评论