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