mysql數據庫引擎更換

近期在作mysql主從因須要不得不進行數據庫引擎更改,而後整理出了一些方法與你們分享若是你有更好的想法能夠在評論交流。html


1。查看mysql如今提供引擎。mysql

在mysql命令行下輸入sql

show engines;

查看當前默認儲存引擎。數據庫

mysql> show variables like '%storage_engine%';

查看單個表的引擎。vim

mysql> show create table 表名;

2.修改缺省引擎。
bash

在my.cnf加入而後重啓服務服務器

skip-innodb
default-storage-engine=MYISAM
default-tmp-storage-engine=MYISAM

3.跟換單個數據庫引擎
ide

【1】ALTER TABLE

mysql > ALTER TABLE mytable ENGINE=Falcon;

這種語法適合全部引擎,可是轉換過程會耗費大量時間。mysql爲此要執行一箇舊表到新表的逐行復制。在這期間,轉換操做可能會佔用服務器的全部I/O處理能力,而且在轉換時,源表要被讀加鎖。所以,在一個繁忙的表上作此操做,要加以注意。
若是從一種引擎到另外一種引擎作錶轉換,全部屬於原始引擎的專用特性都會丟失。例如,將一個InnoDB錶轉換成MyISAM表,再轉換回來,最初定義在原InnoDB表上的全部外鍵都會丟失。

【2】轉儲(Dump)和導入(Import)

若是想對錶轉換的過程作更多控制,能夠選擇使用mysqldump工具,將表先轉儲成一個文本文件,而後再編輯轉儲文件,修改其中的CREATE TABLE語句。必定要注意修改表名和引擎類型,由於即便引擎類型有所不一樣,同一數據庫也不容許存在相同表名的兩張表。另外,mysqldump在CREATE TABLE語句以前,會默默地加上DROP TABLE命令,若是不注意,極可能丟失原有數據。工具

mysqldump -uroot -S /tmp/mysql2.sock mysql > *.sql ;
mysql -uroot -S /tmp/mysql2.sock db1 < *.sql

在導入以前先修改sql文件spa

vim *.sql 

:1,$s/InnoDB/MyISAM/G


此方法在前兩種方法之間作了一個平衡,它不轉儲整張表,或者一次性轉換全部數據,而是建立一個新表,使用mysql的INSERT ... SELECT語法來轉移數據。
以下:
mysql > CREATE TABLE innodb_table like myisam_table;
mysql > ALTER TABLE innodb_table ENGINE=InnoDB;
mysql > INSERT INTO innodb_table SELECT * FROM myisam_table;

若是數據量不大,這種辦法效果不錯,可是更高效的辦法是增量地填充表,在填充每一個增量數據塊的時候都提交事務,這樣就不會致使撤銷日誌變得過於龐大。假定id是主鍵,能夠重複運行下列查詢(每次逐次增大x和y的值),直至全部的數據都複製到新表。
mysql > START TRANSACTION;
mysql > INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql > COMMIT;

轉移操做完成後,源表扔會保留,能夠在操做完成後刪除,而此時,新表已被填充完畢。注意:若是有必要,請在轉換時加鎖源表,避免複製時數據不一致。

出自http://www.cnblogs.com/loveLearning/archive/2013/04/17/3025502.html

相關文章
相關標籤/搜索