程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql ibdata1文件的縮小操作

mysql ibdata1文件的縮小操作

編輯:MySQL綜合教程

mysql ibdata1文件的縮小操作   最近發現MYSQL 的碎片狂大,在一張有上千萬的表空間裡面碎片占用十分厲害,但是單獨的用alert table table_name engine=innodb 基本無法執行,因為表實在是過大,ALERT方法適合一些中小型的數據庫。所以最後的辦法就是導入導出的步驟    www.2cto.com   mysql ibdata1存放數據,索引等,是MYSQL的最主要的數據。    如果不把數據分開存放的話,這個文件的大小很容易就上了G,甚至10+G。對於某些應用來說,並不是太合適。因此要把此文件縮小。    方法:數據文件單獨存放。    步驟:    1,備份數據庫   www.2cto.com     從命令行進入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文件了,它們在相應數據庫的文件夾下面。    www.2cto.com   關於innodb_file_per_table    使用過MySQL的同學,剛開始接觸最多的莫過於MyISAM表引擎了,這種引擎的數據庫會分別創建三個文件:表結構、表索引、表數據空間。我們可以將某個數據庫目錄直接遷移到其他數據庫也可以正常工作。然而當你使用InnoDB的時候,一切都變了。    InnoDB 默認會將所有的數據庫InnoDB引擎的表數據存儲在一個共享空間中:ibdata1,這樣就感覺不爽,增刪數據庫的時候,ibdata1文件不會自動收縮,單個數據庫的備份也將成為問題。通常只能將數據使用mysqldump 導出,然後再導入解決這個問題。    在MySQL的配置文件[mysqld]部分,增加innodb_file_per_table參數。    可以修改InnoDB為獨立表空間模式,每個數據庫的每個表都會生成一個數據空間。    獨立表空間:    優點:    1.  每個表都有自已獨立的表空間。  2.  每個表的數據和索引都會存在自已的表空間中。  3.  可以實現單表在不同的數據庫中移動。  4.  空間可以回收(除drop table操作處,表空不能自已回收)    a)         Drop table操作自動回收表空間,如果對於統計分析或是日值表,刪除大量數據後可以通過:alter table TableName engine=innodb;回縮不用的空間。    b)         對於使innodb-plugin的Innodb使用turncate table也會使空間收縮。    c)         對於使用獨立表空間的表,不管怎麼刪除,表空間的碎片不會太嚴重的影響性能,而且還有機會處理。    缺點:    www.2cto.com   單表增加過大,如超過100個G。    結論:    共享表空間在Insert操作上少有優勢。其它都沒獨立表空間表現好。當啟用獨立表空間時,請合理調整一 下:innodb_open_files 。    InnoDB Hot Backup(冷備)的表空間cp不會面對很多無用的copy了。而且利用innodb hot backup及表空間的管理命令可以實現單現移動。    1.innodb_file_per_table設置.開啟方法:  在my.cnf中[mysqld]下設置  innodb_file_per_table=1    2.查看是否開啟:  mysql> show variables like ‘%per_table%’;    3.關閉獨享表空間  innodb_file_per_table=0關閉獨立的表空間  mysql> show variables like ‘%per_table%’;  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved