17.3 数据库迁移
数据库迁移就是把数据从一个系统移动到另一个系统上。数据迁移有以下原因:
(1)需要安装新的数据库服务器。
(2)MySQL版本更新。
(3)数据库管理系统的变更(如从Microsoft SQL Server迁移到MySQL)。
本节将讲解数据库迁移的方法。
17.3.1 相同版本的MySQL数据库之间的迁移
相同版本的MySQL数据库之间的迁移就是在主版本号相同的MySQL数据库之间进行数据库的移动。迁移过程其实就是在源数据库备份和目标数据库还原过程的组合。
在讲解数据库备份还原时,已经知道最简单的方式是通过复制数据库文件目录,但是此种方法只适用于MyISAM引擎的表。而对于InnoDB表,不能用直接拷贝文件的方式备份数据库,因此最常用和最安全的方式是使用mysqldump命令导出数据,然后在目标数据库服务器使用mysql命令导入。
【例17.9】将www.abc.com主机上的MySQL数据库全部迁移到www.bcd.com主机上。在www.abc.com主机上执行的命令如下:
mysqldump –h www.bac.com –uroot –ppassword dbname | mysql –hwww.bcd.com –uroot –ppassword
mysqldump导入的数据直接通过管道符“|”传给mysql命令导入到主机www.bcd.com数据库中,dbname为需要迁移的数据库名称,如果要迁移全部的数据库,可使用参数--all-databases。
17.3.2 不同版本的MySQL数据库之间的迁移
因为数据库升级等,需要将较旧版本MySQL数据库中的数据迁移到的较新版本的数据库中。MySQL服务器升级时,需要先停止服务,然后卸载旧版本,并安装新版的MySQL。这种更新方法很简单,如果想保留旧版本中用户访问控制信息,则需要备份MySQL中的mysql数据库,在新版本MySQL安装完成之后,重新读入mysql备份文件中的信息。
旧版本与新版本的MySQL可能使用不同的默认字符集,例如MySQL 4.x中大多使用latin1作为默认字符集,而MySQL 5.x的默认字符集为utf8。如果数据库中有中文数据的,迁移过程中需要对默认字符集进行修改,不然可能会无法正常显示结果。
新版本会对旧版本有一定兼容性。从旧版本的MySQL向新版本的MySQL迁移时,对于MyISAM引擎的表,可以直接复制数据库文件,也可以使用mysqlhotcopy工具和mysqldump工具。对于InnoDB引擎的表,一般只能使用mysqldump将数据导出。然后使用mysql命令导入到目标服务器上。从新版本向旧版本MySQL迁移数据时要特别小心,最好使用mysqldump命令导出,然后导入目标数据库中。
17.3.3 不同类型的数据库之间的迁移
不同类型的数据库之间的迁移,是指把MySQL的数据库转移到其他类型的数据库,例如从MySQL迁移到Oracle,从Oracle迁移到MySQL,从MySQL迁移到SQL Server等。
迁移之前,需要了解不同数据库的架构,比较它们之间的差异。不同数据库中表示定义相同类型的数据的关键字可能会不同。例如,MySQL中日期字段分为DATE和TIME两种,而Oracle日期字段只有DATE。另外数据库厂商并没有完全按照SQL标准来设计数据库系统,导致不同的数据库系统的SQL语句有差别。例如,MySQL几乎完全支持标准SQL语言,而Microsoft SQL Server使用的是T-SQL语言,T-SQL中有些非标准的SQL语句,因此在迁移时必须对这些语句进行语句映射处理。
数据库迁移可以使用一些工具,例如Windows系统下,可以使用MyODBC实现MySQL和SQL Server之间的迁移。MySQL官方提供的工具MySQL Migration Toolkit也可以在不同数据库间进行数据迁移。