在查看MySQL的數據庫文件的時候會發現,MyISAM存儲引擎類型的表會有三個文件,*.frm,*.MYD,*.MYI,但是InnoDB存儲引擎的文件只有一個*.frm,原來是因為InnoDB沒有開啟獨立表空間,執行如下命令可以看到:mysql> show variables like '%per%';+-----------------------+-------+| Variable_name | Value |+-----------------------+-------+| innodb_file_per_table | OFF|+-----------------------+-------+1 row in set (0.00 sec)
導致InnoDB的所有表的數據都存儲在sys/var/lib/mysql/ibdata1文件中,我這個文件已經有10G了,這樣在對InnoDB的單個表做冷備份的時候就會備份很多無用的數據,所以需要開啟獨立表空間。
于是我這樣做mysql> set global innodb_file_per_table='ON';ERROR 1238 (HY000): Variable 'innodb_file_per_table' is a read only variable
原因應該是這個參數的含義是針對InnoDB存儲引擎的,不能在一個會話中進行設置,于是查閱資料后
修改my.cnf,在[mysqld]模塊下添加參數,這里注意值是1而不是ON,我一開始設成了ON,結果就是沒成功innodb_file_per_table=1
重啟MySQL,再看一下這個變量的值mysql> show variables like '%per%';+-----------------------+-------+| Variable_name | Value |+-----------------------+-------+| innodb_file_per_table | ON|+-----------------------+-------+1 row in set (0.00 sec)
可以看到這個變量已經被設置成功了
在這里我開始往表里面插入數據,想看一下怎么獨立存儲的,可是在mysql目錄下執行命令ll -rt
發現-rwxrwx--- 1 mysql mysql 102110330884月 27 16:01 ibdata1-rwxrwx--- 1 mysql mysql 52428804月 27 16:01 ib_logfile0-rwxrwx--- 1 mysql mysql 52428804月 27 16:01 ib_logfile1
這三個文件是隨著插入語句的執行而實時更新時間的,但是大小卻沒變。為什么?難道說是因為數據在緩存里,這樣的話修改時間就不會不變,想到之前看的《MySQL技術內幕》中說的,應該是重復利用之前的頁來存儲了,回去翻書確認一下。MARK
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!