mysql的innodb擴容
為了添加一個數據文件到表空間中,首先要關閉 MySQL 數據庫,編輯 my.cnf 文件,確認innodb ibdata文件的實際情況和my.cnf的配置是否一致,這里有兩種情況:
1.my.cnf的配置
| innodb_data_file_path=ibdata1:10G;ibdata2:10G:autoextend |
如果當前數據庫正在使用ibdata1,或者使用ibdata2,但ibdata2沒有超過10G,則對my.cnf配置直接改成:
| innodb_data_file_path=ibdata1:10G;ibdata2:10G;ibdata3:10G:autoextend |
2.如果設置了最后一個ibdata自動擴展時,有可能最后一個ibdata的占用空間大于my.cnf的配置空間。例如:
| mysql@test:/data1/mysqldata/innodb/data> ls -lh |
| -rw-rw---- 1 mysql mysql 10737418240 2010-01-26 16:34 ibdata1 -rw-rw---- 1 mysql mysql 16106127360 2010-01-26 16:34 ibdata2 |
這時,需要精確的計算ibdata2的大小 15360M,修改:
| innodb_data_file_path=ibdata1:10G;ibdata2:15360M;ibdata3:10G:autoextend |
重啟mysql。
注意:
1、擴容前注意磁盤空間是否足夠。
2、restart后關注是否生成了新的ibdata。
更多說明:
如果,最后一個文件以關鍵字 autoextend 來描述,那么編輯 my.cnf 的過程中,必須檢查最后一個文件的尺寸,并使它向下接近于 1024 * 1024 bytes (= 1 MB) 的倍數(比方說現在autoextend 的/ibdata/ibdata1為18.5M,而在舊的my.ini中為10M,則需要修改為innodb_data_file_path = /ibdata/ibdata1:19M; 且必須是19M,如果指定20M,就會報錯。),并在 innodb_data_file_path 中明確指定它的尺寸。然后你可以添加另一個數據文件。記住只有 innodb_data_file_path 中的最后一個文件可以被指定為 auto-extending。
一個例子:假設起先僅僅只有一個 auto-extending 數據文件 ibdata1 ,這個文件接近于 988 MB。下面是添加了另一個 auto-extending 數據文件后的可能示例 。
| innodb_data_home_dir = innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend |
ibdata1 瘦身
0. ibdata1里存了什么
當你啟用了 innodb_file_per_table,表被存儲在他們自己的表空間里,但是共享表空間仍然在存儲其它的 InnoDB 內部數據:
(1)數據字典,也就是 InnoDB 表的元數據
(2)變更緩沖區
(3)雙寫緩沖區
(4)撤銷日志
其中的一些在 Percona 服務器上可以被配置來避免增長過大的。例如你可以通過 innodb_ibuf_max_size 設置最大變更緩沖區,或設置 innodb_doublewrite_file 來將雙寫緩沖區存儲到一個分離的文件。
MySQL 5.6 版中你也可以創建外部的撤銷表空間,所以它們可以放到自己的文件來替代存儲到 ibdata1。
新聞熱點
疑難解答