如果你有使用InnoDB來存儲(chǔ)你的Mysql表,使用默認(rèn)設(shè)置應(yīng)該會(huì)碰到個(gè)非常頭疼的問題,在Mysql的數(shù)據(jù)目錄里有個(gè)默認(rèn)只有10MB叫ibdata1的文件沒日沒夜的增長(zhǎng)讓你煩透了吧?里面包含了InnoDB引擎存儲(chǔ)的所有索引和數(shù)據(jù)信息,很可惜Mysql在設(shè)計(jì)的時(shí)候就沒有收縮InnoDB表的功能,這就是為什么你在delete,truncate,drop這些表的時(shí)候這個(gè)文件大小沒有絲毫要減少的原因,而且你還沒辦法直觀的看到哪個(gè)
數(shù)據(jù)庫
占用了大量的ibdata1,這個(gè)坑爹的問題在新版的Mysql中已經(jīng)通過innodb_file_per_table這個(gè)選項(xiàng)來解決了,開啟該選項(xiàng)后,每個(gè)InnoDB表的索引和數(shù)據(jù)都會(huì)按*.ibd命名存儲(chǔ)到各個(gè)
數(shù)據(jù)庫
中,但是這個(gè)選項(xiàng)默認(rèn)是不開啟的。
如上所說,你沒法去收縮InnoDB數(shù)據(jù)文件,你也沒辦法在一臺(tái)沒有打開innodb_file_per_table選項(xiàng)的機(jī)器上直接加上該選項(xiàng)讓他工作,你必須在安裝完Mysql就加上這個(gè)選項(xiàng),或者按照本文介紹的三種方式來操作,無論你做任何操作,請(qǐng)確保你已經(jīng)備份了整個(gè)數(shù)據(jù)庫目錄,也別忘了停掉Mysql相關(guān)的一些服務(wù)。
前兩個(gè)方法需要獲取到Mysql數(shù)據(jù)庫實(shí)例中所有InnoDB的清單,如果你使用的是5.0以上的版本,這一切都很容易:SELECT TABLE_SCHEMA,TABLE_NAME FROM TABLES WHERE ENGINE = ‘InnoDB’;
修改表引擎
1.對(duì)每個(gè)InnoDB表執(zhí)行 ALTER TABLE table_name ENGINE=MyISAM;
2.停止Mysql服務(wù);
3.移除InnoDB相關(guān)文件ibdata1等;
4.修改my.cnf中的參數(shù),添加innodb_file_per_table;
5.啟動(dòng)Mysql服務(wù);
6.將剛才修改后的那些表改回InnoDB:ALTER TABLE table_name ENGINE=InnoDB;
導(dǎo)出InnoDB表
1.使用
mysqldump
命令導(dǎo)出所有的InnoDB表,例如: mysqldump –add-drop-table –extended-insert –disable-keys –quick ‘db_name’ –tables ‘tbl_name’ > ‘db_name.tbl_name.sql’
2.刪掉這些表:?
?SET FOREIGN_KEY_CHECKS=0;
?DROP TABLE db_name.tbl_name;
?DROP TABLE db_name1.tbl_name1;
?–– DROP other tables here…
?SET FOREIGN_KEY_CHECKS=1;
3.停止Mysql服務(wù);
4.移除InnoDB相關(guān)文件ibdata1等;
5.修改my.cnf中的參數(shù),添加innodb_file_per_table;
6.啟動(dòng)Mysql服務(wù);
7.在Mysql Console下導(dǎo)入表:?
?SET FOREIGN_KEY_CHECKS=0;
?SOURCE db_name.tbl_name.sql;
?SOURCE db_name1.tbl_name1.sql;
?–– SOURCE other files here…
?SET FOREIGN_KEY_CHECKS=1;
導(dǎo)出整個(gè)數(shù)據(jù)庫
這個(gè)是我常用的,雖然他和耗磁盤和時(shí)間,但是確實(shí)是最簡(jiǎn)便的:
1.導(dǎo)出所有的數(shù)據(jù): /usr/bin/mysqldump ––extended-insert ––all-databases ––add-drop-database ––disable-keys ––flush-privileges ––quick ––routines ––triggers > all-databases.sql
2.停止Mysql服務(wù);
3.重命名mysql數(shù)據(jù)文件夾;
4.修改my.cnf中的參數(shù),添加innodb_file_per_table;
5.mysql_install_db重新初始化mysqld;
6.開啟Mysql服務(wù);
7.進(jìn)入Mysql Console執(zhí)行:?
?SET FOREIGN_KEY_CHECKS=0;
?SOURCE all-databases.sql;
?SET FOREIGN_KEY_CHECKS=1;
8.重啟數(shù)據(jù)庫測(cè)試OK就領(lǐng)賞去吧。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
