修改MySql打开文件数限制参数
MySql的日志表采用了分区表,日志量越大分区数就越多,就有可能出现mysql错误号24,文件句柄限制报错:
(errcode: 24)"out of resources when opening file ./XXX.MYD"和(error: 24)"can`t creat file ./XX.frm"
导致日志表不能正常同步到mysql服务器,所以建议先修改下mysql配置,放大open_files_limit限制。
提示:不同版本的mysql修改配置可能不一样,可以在网上搜索open_files_limit具体的配置修改方法,修改结果根据show VARIABLES like "open_files_limit"进行进一步确认。
由于不同mysql版本修改参数方法不同,笔者介绍两种修改方法,仅供参考,如有其它方法欢迎分享:
方法一:编辑my.ini文件(linux下文件名是my.cnf ),在[mysqld]下添加open_files_limit 参数
[mysqld]
open_files_limit = 100000
重启数据库服务 service mysqld restart 。
查看服务器的打开文件数设定的值(用ulimit -n命令查看)
方法二:根据实际打开的文件数修改打开文件数的限制数
修改my.ini文件里的max_connections和table_open_cache的值,然后重起mysql 服务。可以通过命令行( show variables like '%open_files_limit%' )查看,
max_connections 和 table_open_cache 与 open_files_limit 的关系:
max_1 = 10 + max_connections + table_cache * 2;
max_2 = max_connections * 5;
max_3 = max_os_open_files;//操作系统单个进程最大允许打开文件句柄(文件描述符)。
open_files_limit = max( max_1, max_2 ) > max_3 ? max_3 : max ( max_1, max_2);
1)修改 max_connections = 8 ;table_open_cache = 1; 重起mysql 服务后,得出 open_files_limit = 40
2)使用命令行执行 select * from table_1, table_2, table_3, table_4, table_5,table_6, table_7, table_8, table_9, table_10,table_11, table_12, table_13, table_14, table_15,table_16, table_17, table_18, table_19, table_20, table_21; #每个table要足够大,使得这条语句可以执行一段时间。
这时在打开另外的命令行:show status like '%Open_files%';
就会显示 Open_files = 42
Open_files(42) 已经超过了open_files_limit(40)
3)运行一个应用程序(主要是准备表,插入数据操作),就会提示error:24的错误。
4)重新修改 max_connections = 100 ;table_open_cache = 512; 重起mysql 服务后得出 open_files_limit = 1134
5)重复第3步。不会出现error。
测试说明了通过修改这两个参数达到增加打开文件数的限制数。