今天在使用数据库自动备份的时候无法备份!
自动备份http://wdlinux.cn/bbs/thread-7809-1-1.html
运行数据库导出命令出现如下错误(数据库表数量不多的能备份,表多的出现如下错误!)
mysqldump: Got error: 1016: Can't open file: './sq_tlwx/ims_ mon_house.frm' (errno: 24) when using LOCK TABLES
于是在网上找资料:
因为在默认情况下mysqdump是将 lock-tables设置为true,即默认时锁定当前表(没有加lock-all-tables参数,lock-all-tables是全局读锁,锁定库下的所有表保证数据的一致性,加上这个参数为自动关闭single-transaction 和 lock-tables 选项)。虽然说这样以来解决了问题,但用同样的语句(mysqldump -uroot -pmypass test1 > d:\test1.sql)在master上备份成功了,所以针对那个”can’t open file“,感觉还应该有其他的问题存在或是解决方法(可能是真正的解决方法),用show status like ‘%open%’;查看open_tables值,当前打开表的数量
+------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | Com_ha_open | 0 | | Com_show_open_tables | 0 | | Open_files | 462 | |Open_streams | 0 | | Open_tables | 256 | | Opened_tables | 4 | |Slave_open_temp_tables | 0 | +------------------------+-------+
用show variables like ‘%open%’;查看open_files_limit的值,操作系统允许 mysqld打开文件的数量 +-------------------+----------+ | Variable_name | Value | +-------------------+----------+ | have_openssl | DISABLED | | innodb_open_files | 300 | | open_files_limit | 622| +-------------------+----------+
open_files_limit的系统默认值为max_connections*5 或 max_connections + table_cache*2。
看来应该是open_files_limit设置过小,造成打开的文件过多,导致’xxx.frm’无法打开,open_files_limit的值很明显是默认值,并为手设置过。
打开my.ini文件(我的是windows系统。linux为my.cnf),在mysqld中添加:open_files_limit=4500,保存并重启动mysql数据库,然后再用同样的mysqldump语句备份数据库,成功执行!
推荐使用方法:在my.cnf中的mysqld中添加:open_files_limit=4500,保存并重启动mysql数据库 |