您可以通过mysqldump工具将自建MariaDB数据库迁移到RDS MariaDB,本文将介绍详细的操作步骤。
背景信息
由于RDS提供的关系型数据库服务与原生的数据库服务完全兼容,所以对用户来说,将原有数据库迁移到RDS实例的过程,与从一个MariaDB服务器迁移到另外一台MariaDB服务器的过程基本类似。
本文以本地Linux7和MariaDB 10.2.4版本为例,演示如何从本地迁移到RDS MariaDB。
注意事项
迁移后的表不区分大小写,统一变为小写。
前提条件
操作步骤
使用远程工具登录RDS MariaDB实例,创建空数据库(例如test001)。
登录本地Linux服务器,使用自带的mysqldump工具将本地数据库数据导出为数据文件。
mysqldump -h localhost -u <本地数据库用户名> -p --opt --default-character-set=utf8 --hex-blob <想要迁移的数据库名> --skip-triggers > /tmp/<想要迁移的数据库名>.sql
示例
说明下文中的user用户需要具备相关权限,权限设置的详细操作,请参见权限设置。
mysqldump -h localhost -u user -p --opt --default-character-set=utf8 --hex-blob testdb --skip-triggers > /tmp/testdb.sql
重要导出期间请勿进行数据更新。本步骤仅仅导出数据,不包括存储过程、触发器及函数。
使用 mysqldump 导出存储过程、触发器和函数。
mysqldump -h localhost -u <本地数据库用户名> -p --opt --default-character-set=utf8 --hex-blob <想要迁移的数据库名> -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/<想要迁移的数据库名>_trigger.sql
示例
mysqldump -h localhost -u user -p --opt --default-character-set=utf8 --hex-blob testdb -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/testdb_trigger.sql
说明若数据库中没有使用存储过程、触发器和函数,可跳过此步骤。在导出存储过程、触发器和函数时,需要将definer去掉,以兼容RDS。
通过如下命令将数据文件和存储过程文件导入到目标 RDS 中。
mysql -h <RDS实例外网地址> -P <RDS实例外网端口> -u <RDS实例高权限账号> -p <RDS上数据库名> < /tmp/<想要迁移的数据库名>.sql mysql -h <RDS实例外网地址> -P <RDS实例外网端口> -u <RDS实例高权限账号> -p <RDS上数据库名> < /tmp/<想要迁移的数据库名>trigger.sql
示例
mysql -h rm-bpxxxxx.mariadb.rds.aliyuncs.com -P 3306 -u testuser -p test001 < /tmp/testdb.sql mysql -h rm-bpxxxxx.mariadb.rds.aliyuncs.com -P 3306 -u testuser -p test001 < /tmp/testdb_trigger.sql
刷新远程工具后查看表,已经有了数据,说明已经迁移成功。