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

2022-09-06 17:12:14 字數 2159 閱讀 6631

官方給出的解決方案:

這一節描述在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檔案了,它們在相應資料庫的資料夾下面。

**

Mysql InnoDB 共享表空間和獨立表空間

前言 學習mysql的時候總是習慣性的和oracle資料庫進行比較。在學習mysql innodb的儲存結構的時候也免不了跟oracle進行比較。oracle的資料儲存有表空間 段 區 塊 資料檔案 mysql innodb的儲存管理也類似,但是mysql增加了乙個共享表空間和獨立表空間的概念 一 ...

mysql innodb單錶分割槽實戰

目的 為了了解mysql單錶分割槽方法,特此作為學習筆記記錄一下。一。準備表,建立乙個學生表,包含主鍵sid和名稱sname欄位 create table students sid int 5 primary key,sname varchar 24 二。準備資料 insert into stude...

MYSQL INNODB 鎖錶小研究

表結構如下 delimiter create table wrox shop order o id int 11 not null auto increment,order date datetime default null,order status varchar 45 default crea...