Mysql 导入导出文件优化、(errno:24)错误

在使用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数据太慢

  1. 确保导入的SQL头部有如下设置
SET FOREIGN_KEY_CHECKS=0;
SET AUTO_COMMIT=0;
  1. mysql导入的参数设置max_allowed_packet大一些
mysql -uxxxx -pxxxx database --default-character-set=utf8 --max_allowed_packet=256M < backup.sql

你可能感兴趣的:(Mysql 导入导出文件优化、(errno:24)错误)