MySQL数据库迁移的3种场景(含迁移方法,新手必看)
数据库迁移就是把数据从一个系统移动到另一个系统上。数据库迁移有以下原因:
本节将讲解数据库迁移的方法。
在讲解数据库备份和恢复时,已经知道最简单的方式是通过复制数据库文件目录,但是此种方法只适用于 MyISAM 引擎的表。而对于 InnoDB 表,不能用直接复制文件的方式备份数据库,因此最常用和最安全的方式是使用 mysqldump 命令导出数据,然后在目标数据库服务器上使用 MySQL 命令导入。
【实例 1】将 www.abc.com 主机上的 MySQL 数据库全部迁移到 www.bcd.com 主机上。在 www.abc.com 主机上执行的命令如下:
MySQL 服务器升级时,需要先停止服务,然后卸载旧版本,并安装新版的 MySQL,这种更新方法很简单,如果想保留旧版本中的用户访问控制信息,就需要备份 MySQL 中的 MySQL 数据库,在新版本 MySQL 安装完成之后,重新读入 MySQL 备份文件中的信息。
旧版本与新版本的 MySQL 可能使用不同的默认字符集,例如 MySQL 8.0 版本之前,默认字符集为 latin1,而 MySQL 8.0 版本默认字符集为 utf8mb4。数据库中有中文数据时,迁移过程中需要对默认字符集进行修改,否则可能无法正常显示相关数据。
新版本会对旧版本有一定兼容性。从旧版本的 MySQL 向新版本的 MySQL 迁移时:
从新版本向旧版本 MySQL 迁移数据时要特别小心,最好使用 mysqldump 命令导出,然后导入目标数据库中。
迁移之前,需要了解不同数据库的架构,比较它们之间的差异。不同数据库中定义相同类型的数据的关键字可能会不同。例如,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 也可以在不同数据库间进行数据迁移。
- 需要安装新的数据库服务器。
- MySQL 版本更新。
- 数据库管理系统的变更(如从 Microsoft SQL Server 迁移到 MySQL)。
本节将讲解数据库迁移的方法。
相同版本的MySQL数据库之间的迁移
相同版本的 MySQL 数据库之间的迁移,就是在主版本号相同的 MySQL 数据库之间进行数据库移动。迁移过程其实就是在源数据库备份和目标数据库恢复过程的组合。在讲解数据库备份和恢复时,已经知道最简单的方式是通过复制数据库文件目录,但是此种方法只适用于 MyISAM 引擎的表。而对于 InnoDB 表,不能用直接复制文件的方式备份数据库,因此最常用和最安全的方式是使用 mysqldump 命令导出数据,然后在目标数据库服务器上使用 MySQL 命令导入。
【实例 1】将 www.abc.com 主机上的 MySQL 数据库全部迁移到 www.bcd.com 主机上。在 www.abc.com 主机上执行的命令如下:
mysqldump –h www.bac.com –uroot –ppassword dbname | mysql –h www.bcd.com –uroot –ppasswordmysqldump 导入的数据直接通过管道符“|”传给 MySQL 命令,导入到主机 www.bcd.com 数据库中。dbname 为需要迁移的数据库名称,如果要迁移全部的数据库,可使用参数 --all-databases。
不同版本的MySQL数据库之间的迁移
因为数据库升级等原因,需要将较旧版本 MySQL 数据库中的数据迁移到较新版本的数据库中。MySQL 服务器升级时,需要先停止服务,然后卸载旧版本,并安装新版的 MySQL,这种更新方法很简单,如果想保留旧版本中的用户访问控制信息,就需要备份 MySQL 中的 MySQL 数据库,在新版本 MySQL 安装完成之后,重新读入 MySQL 备份文件中的信息。
旧版本与新版本的 MySQL 可能使用不同的默认字符集,例如 MySQL 8.0 版本之前,默认字符集为 latin1,而 MySQL 8.0 版本默认字符集为 utf8mb4。数据库中有中文数据时,迁移过程中需要对默认字符集进行修改,否则可能无法正常显示相关数据。
新版本会对旧版本有一定兼容性。从旧版本的 MySQL 向新版本的 MySQL 迁移时:
- 对于 MyISAM 引擎的表,可以直接复制数据库文件,也可以使用 mysqlhotcopy 工具、mysqldump 工具。
- 对于 InnoDB 引擎的表,一般只能使用 mysqldump 将数据导出。然后再使用 MySQL 命令导入到目标服务器上。
从新版本向旧版本 MySQL 迁移数据时要特别小心,最好使用 mysqldump 命令导出,然后导入目标数据库中。
不同数据库之间的迁移
不同类型的数据库之间的迁移,是指把 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 也可以在不同数据库间进行数据迁移。