MySQL Innodb表空間不足的處理方法


官方給出的解決方案:

添加和刪除 InnoDB 數據和日志文件

這一節描述在InnoDB表空間耗盡空間之時,或者你想要改變日志文件大小之時,你可以做的一些事情。

最簡單的,增加InnoDB表空間大小的方法是從開始配置它為自動擴展的。為表空間定義里的最后一個數據文件指定autoextend屬性。然后在文件耗盡空間之時,InnoDB以8MB為 增量自動增加該文件的大小。增加的大小可以通過設置innodb_autoextend_increment值來配置,這個值以MB為單位,默認的是8。

作為替代,你可以通過添加另一個數據文件來增加表空間的尺寸。要這么做的話,你必須停止MySQL服務器,編輯my.cnf文件 ,添加一個新數據文件到innodb_data_file_path的末尾,然后再次啟動服務器。

如果最后一個數據文件是用關鍵字autoextend定義的,編輯my.cnf文件的步驟必須考慮最后一個數據文件已經增長到多大。獲取數據文件的尺寸,把它四舍五入到最接近乘積1024 × 1024bytes (= 1MB),然后在innodb_data_file_path中明確指定大致的尺寸。然后你可以添加另一個數據文件。記得只有innodb_data_file_path里最后一個數據可以被指定為自動擴展。

作為一個例子。假設表空間正好有一個自動擴展文件ibdata1:

innodb_data_home_dir =

innodb_data_file_path = /ibdata/ibdata1:10M:autoextend

假設這個數據文件過一段時間已經長到988MB。下面是添加另一個總擴展數據文件之后的配置行:

innodb_data_home_dir =

innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

當你添加一個新文件到表空間的之后,請確信它並不存在。當你重啟服務器之時,InnoDB創建並初始化這個文件。

當前,你不能從表空間刪除一個數據文件。要增加表空間的大小,使用如下步驟:

1.    使用mysqldump 轉儲所有InnoDB表。

2.    停止服務器。

3.    刪除所有已存在的表空間文件。

4.    配置新表空間。

5.    重啟服務器。

6.    導入轉儲文件。

如果你想要改變你的InnoDB日志文件的數量和大小,你必須要停止MySQL服務器,並確信它被無錯誤地關閉。隨后復制舊日志文件到 一個安全的地方以防萬一某樣東西在關閉時出錯而你需要用它們來恢復表空間。從日志文件目錄刪除所有舊日志文件,編輯my.cnf來改變日志文件配置,並再 次啟動MySQL服務器。mysqld 在啟動之時發現沒有日志文件,然后告訴你它正在創建一個新的日志文件。

 

實際中的簡化版:

mysql ibdata1存放數據,索引等,是MYSQL的最主要的數據。

如果不把數據分開存放的話,這個文件的大小很容易就上了G,甚至10+G。對於某些應用來說,並不是太合適。因此要把此文件縮小。

方法:數據文件單獨存放。

步驟:

1,備份數據庫

從命令行進入MySQL Server 5.0\bin
備份全部數據庫,執行命令mysqldump -q -uusername -pyourpassword --add-drop-table -all-databases > /all.sql

做完此步后,停止數據庫服務。

2,修改mysql配置文件

修改my.ini文件,增加下面配置

innodb_file_per_table

對每張表使用單獨的innoDB文件, 修改/etc/my.cnf文件

3,刪除原數據文件

刪除原來的ibdata1文件及日志文件ib_logfile*,刪除data目錄下的應用數據庫文件夾(mysql文件夾不要刪)

4,還原數據庫

啟動數據庫服務

從命令行進入MySQL Server 5.0\bin
還原全部數據庫,執行命令mysql -uusername -pyourpassword < /all.sql

經過以上幾步后,可以看到新的ibdata1文件就只有幾十M了,數據及索引都變成了針對單個表的小ibd文件了,它們在相應數據庫的文件夾下面。

 

轉載 http://robinson.iteye.com/blog/758796


免責聲明!

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



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