近期由于服務器遷移,需要做數據庫遷移的工作,服務器使用的數據庫是MySQL ,首先想到的自然是mysqldump ,導出數據庫到sql文件轉儲.在導出導入的過程中遇到了一些問題,因為數據庫中某些表中的字段使用mediablob類型存儲了部分媒體信息,導致在sql文件在另一臺服務器上導入的時候無法完成,所以采取了比較另類的方式來進行數據庫的遷移.
MySQL 數據庫是使用文件存儲的,每個數據庫會單獨創建一個文件夾,數據庫的所有信息都會存儲在同一個文件夾下,包括所有數據庫的結構模型和數據.于是想到是否可以通過復制文件的方式將數據庫遷移.我們創建的表使用的引擎是InnoDB,不支持直接的文件復制方式遷移,于是采取了先將所有表的引擎改為MyIsam引擎,然后復制文件,遷移至另一臺服務器上之后再將表的引擎改為InnoDb.
批量修改數據表引擎的實現方式:
SET @DATABASE_NAME = 'your_dbname';
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE=MyISAM;') AS sql_statements
FROM information_schema.tables AS tb
WHERE table_schema = @DATABASE_NAME
AND `ENGINE` = 'InnoDB'
AND `TABLE_TYPE` = 'BASE TABLE'
ORDER BY table_name DESC;
查詢得到的結果就是批量修改引擎的sql語句,執行即可.
然后停止MySQL 服務,復制文件即可遷移(文件夾直接復制).遷移后再逆向執行語句,將表引擎改回即可.