如果你使用InnoDB存儲引擎,那么InnoDB數(shù)據(jù)文件管理將是你要面臨的一個問題,下面介紹如何正確的添加、刪除數(shù)據(jù)文件以及添加數(shù)據(jù)文件時常見問題解決。
1、添加InnoDB數(shù)據(jù)文件
了解了InnoDB表空間的配置方法后,我們來嘗試增加表空間的數(shù)據(jù)文件,在通常情況下,我們會遇到一個問題就是一個表空間的某個數(shù)據(jù)文件所在的磁盤空間磁盤緊張,這時需要為表空間增加一個新位置的新數(shù)據(jù)文件,同時關(guān)閉原來數(shù)據(jù)文件的自動擴展,這樣才能保證不會因為磁盤滿導(dǎo)致MySQL出現(xiàn)問題。
舉例:
innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:10M:autoextend
假設(shè)/ibdata/下可用空間為1G ,這個數(shù)據(jù)文件過一段時間已經(jīng)長到988MB。這必須添加一個新位置的新數(shù)據(jù)文件,來保證充裕的表空間,下面是添加一個可擴展數(shù)據(jù)文件之后的配置行:
innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend
添加完成后,重啟MySQL服務(wù),這時會停止對/ibdata/ibdata1數(shù)據(jù)文件的擴展,并創(chuàng)建新的數(shù)據(jù)文件/disk2/ibdata2。
MySQL重啟時會看到如下日志:
--日志內(nèi)容--
080909 19:09:26 InnoDB: Data file /disk2/ibdata2 did not exist: new to be created
080909 19:09:26 InnoDB: Setting file /disk2/ibdata2 size to 50 MB
InnoDB: Database physically writes the file full: wait...
另外,很多網(wǎng)友在增加表空間的數(shù)據(jù)文件時通常會遇到下面的問題,導(dǎo)致MySQL無法啟動或啟動后無法正常工作。
現(xiàn)象: 在MySQL日志中出現(xiàn)如下提示
080909 19:07:12 mysqld started
InnoDB: Error: data file /ibdata/ibdata1 is of a different size
InnoDB: 63872 pages (rounded down to MB)
InnoDB: than specified in the .cnf file 63872 pages!
InnoDB: Could not open or create data files.
出現(xiàn)上述問題的主要原因是“innodb_data_file_path = /ibdata/ibdata1:900M”中數(shù)據(jù)文件大小指定不正確,這里給出了一個計算公式可以解決網(wǎng)友的這個問題
計算公式:
64pages相當于1M
所以,設(shè)置為 innodb_data_file_path = /ibdata/ibdata1: 988M 就可以避免上述錯誤出現(xiàn)。
2、 刪除InnoDB數(shù)據(jù)文件
操作步驟如下:
1.
2.
3.
4.
5.
6.
3、InnoDB的數(shù)據(jù)備份 InnoDB和MyISAM一樣,也可以分為物理備份和邏輯備份,邏輯備份也是使用mysqldump工具,本節(jié)不再詳述。下面我們這點介紹一下InnoDB的物理備份方法。MySQL本身并沒有提供InnoDB存儲的備份工具,因為InnoDB并不是MySQL公司所開發(fā)和擁有,而是屬于一個第三方公司(www.innodb.com)。InnoDB目前也只有通過該公司的備份工具ibbackup來進行物理熱備份。此工具是收費的,不能免費使用。下面我們介紹一下此工具的使用方法: 3.1 編輯用于啟動的配置文件my.cnf和用于備份的配置文件my2.cnf my.cnf的例子如下: [mysqld] datadir = /home/mysql/data innodb_data_home_dir = /home/mysql/data innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /home/mysql/data set-variable = innodb_log_files_in_group=2 set-variable = innodb_log_file_size=20M 如果想備份到/home/mysql/backup,則my2.cnf的例子如下: [mysqld] datadir = /home/mysql/backup innodb_data_home_dir = /home/mysql/backup innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /home/mysql/backup set-variable = innodb_log_files_in_group=2 set-variable = innodb_log_file_size=20M 3.2 開始執(zhí)行備份: ibbackup my.cnf my2.cnf