近期由于服务器迁移,需要做数据库迁移的工作,服务器使用的数据库是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 服务,复制文件即可迁移(文件夹直接复制).迁移后再逆向执行语句,将表引擎改回即可.