errno: 24
1.版本1)操作系统 cat /etc/issuecat /etc/issueCentOS release 6.6 (Final)cat /proc/versionLinux version 2.6.32-504.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 201203
1.版本
1)操作系统
cat /etc/issue
cat /etc/issue
CentOS release 6.6 (Final)
cat /proc/version
Linux version 2.6.32-504.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014
2)mysql数据库版本
mysql --version
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
2.问题描述
2.1在mysqldump 导出数据的时候报如下错误
mysqldump -uroot -p -S /var/lib/data/mysql.sock --all-databases --events --routines>database_3307_20151218.sql
Enter password:
mysqldump: Got error: 23: Out of resources when opening file './helloworld/xxxxx_0479.MYD' (Errcode: 24) when using LOCK TABLES
2.2查看数据库的errorlog发现如下错误:
151217 19:35:48 [ERROR] /usr/libexec/mysqld: Can't open file: './helloworld/txxxxx_0479.frm' (errno: 24)
2.3使用perror 查看一下错误代码24是什么意思
perror 24
OS error code 24: Too many open files
##到这问题就很清楚了,是 同时打开的文件数目超过了open_files_limit的限制。我们看一下我2.1中的mysqldump语句,没有指定--single-transaction,也没有指定--lock-tables,所以 默认使用lock-all-tables参数进行备份(该参数在备份的时候会使用一个全局的read lock锁住当前实例上所有库的所有表),因为该实例上库比较多,而且还有很多分表,所以导出报Too many open files错误。
2.4查看数据库的open_files_limit限制
show variables like 'open_files%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 1024 |
+------------------+-------+
1 row in set (0.00 sec)
2.5 查看数据库打开表的数量
show global status like '%file%';
+-------------------+----------+
| Variable_name | Value |
+-------------------+----------+
| Com_show_profile | 0 |
| Com_show_profiles | 0 |
| Created_tmp_files | 349 |
| Open_files | 2 |
| Opened_files | 41578793 |
+-------------------+----------+
5 rows in set (0.00 sec)
##我们看到我查看这一刻 open_files为349(注意这不是报错时候查询的值)
3.问题解决
3.1 可以加大数据库的open_files_limit
可以调大该参数(该参数不能动态调整),然后再次尝试导出
3.2 mysqldump导出时使用 --single-transaction或者--lock-tables参数
导出正常
更多推荐
所有评论(0)