innodb_file_per_table - 轉換為InnoDB


共享InnoDB / var / lib / mysql / ibdata1存儲的問題
InnoDB表當前將數據和索引存儲到共享表空間(/ var / lib / mysql / ibdata1)。由於共享表空間,一個InnoDB表的數據損壞可能導致MySQL無法在整個計算機上啟動。修復InnoDB損壞可能非常難以執行,並且可能導致在修復過程中最初未損壞的表的數據丟失。

由於MySQL 5.5將使用InnoDB作為默認存儲引擎,因此考慮繼續利用/ var / lib / mysql / ibdata1中的共享表空間的后果非常重要。

使用innodb_file_per_table更改為每表表空間

作為解決問題的選項,MySQL有一個名為innodb_file per_table的配置變量。要使用此變量,可以將以下內容放入/etc/my.cnf,以將InnoDB轉換為每個InnoDB引擎表的每個表文件:

碼:
innodb_file_per_table = 1

添加該行后,需要在機器上重新啟動MySQL。

在/etc/my.cnf中使用該行的結果將導致在添加行之后的任何數據庫在/ var / lib / mysql / database / location中創建.idb文件。請注意,共享表空間仍將保留內部數據字典和撤消日志。

轉換舊的InnoDB表

任何設置為先前在ibdata1中共享表空間的InnoDB表的舊數據庫仍將使用該文件,因此需要將這些舊數據庫切換到新系統。MySQL CLI中的以下命令將創建InnoDB引擎表的列表以及為每個引擎運行的命令,以將它們轉換為新的innodb_file_per_table系統:

代碼:
select concat('alter table ',TABLE_SCHEMA ,'.',table_name,' ENGINE=InnoDB;') FROM INFORMATION_SCHEMA.tables where table_type='BASE TABLE' and engine = 'InnoDB';

我的測試計算機上的Roundcube示例在運行previous命令時顯示以下返回值:

碼:
alter table roundcube.cache ENGINE = InnoDB; alter table roundcube.contacts ENGINE = InnoDB; alter table roundcube.identities ENGINE = InnoDB; alter table roundcube.messages ENGINE = InnoDB; alter table roundcube.session ENGINE = InnoDB; alter table roundcube.users ENGINE = InnoDB;

然后,您只需發出MySQL CLI指出的命令,然后將每個表轉換為新的innodb_file_per_table格式。

請注意,這些命令只需要在MySQL命令行中進行轉換,可以通過在bash提示符下輸入mysql在root SSH中訪問。

轉換舊InnoDB表的可能問題

1.轉換期間可能發生系統負載
2.驅動器空間填滿轉換的可能問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM