今天在使用數(shù)據(jù)庫自動備份的時候無法備份!
自動備份http://wdlinux.cn/bbs/thread-7809-1-1.html
運行數(shù)據(jù)庫導出命令出現(xiàn)如下錯誤(數(shù)據(jù)庫表數(shù)量不多的能備份,表多的出現(xiàn)如下錯誤!)
mysqldump: Got error: 1016: Can't open file: './sq_tlwx/ims_ mon_house.frm' (errno: 24) when using LOCK TABLES
下載 (3.48 KB)
2017-4-27 20:30
于是在網(wǎng)上找資料:
因為在默認情況下mysqdump是將 lock-tables設(shè)置為true,即默認時鎖定當前表(沒有加lock-all-tables參數(shù),lock-all-tables是全局讀鎖,鎖定庫下的所有表保證數(shù)據(jù)的一致性,加上這個參數(shù)為自動關(guān)閉single-transaction 和 lock-tables 選項)。雖然說這樣以來解決了問題,但用同樣的語句(mysqldump -uroot -pmypass test1 > d:\test1.sql)在master上備份成功了,所以針對那個”can’t open file“,感覺還應(yīng)該有其他的問題存在或是解決方法(可能是真正的解決方法),用show status like ‘%open%’;查看open_tables值,當前打開表的數(shù)量
+------------------------+-------+ | 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的值,操作系統(tǒng)允許 mysqld打開文件的數(shù)量 +-------------------+----------+ | Variable_name | Value | +-------------------+----------+ | have_openssl | DISABLED | | innodb_open_files | 300 | | open_files_limit | 622| +-------------------+----------+
open_files_limit的系統(tǒng)默認值為max_connections*5 或 max_connections + table_cache*2。
看來應(yīng)該是open_files_limit設(shè)置過小,造成打開的文件過多,導致’xxx.frm’無法打開,open_files_limit的值很明顯是默認值,并為手設(shè)置過。
打開my.ini文件(我的是windows系統(tǒng)。linux為my.cnf),在mysqld中添加:open_files_limit=4500,保存并重啟動mysql數(shù)據(jù)庫,然后再用同樣的mysqldump語句備份數(shù)據(jù)庫,成功執(zhí)行!
推薦使用方法:在my.cnf中的mysqld中添加:open_files_limit=4500,保存并重啟動mysql數(shù)據(jù)庫 |