AWS RDS-MySql数据手动迁移(涉及,视图触发器,存储过程,函数等数据)

用户需求

  • 数据库迁移
  • DMS无法支持存储过程等数据迁移

导入错误处理

  • 描述

    • 当数据库已启用二进制日志并且 mysqldump 文件包含对象(触发器、视图、函数或事件)时,会出现此错误。有关更多信息,请参阅 MySQL 文档中的二进制日志

    • 如果任何 create 语句都不包含“NO SQL”、“READS SQL DATA”或“DETERMINISTIC”关键字,则 MySQL 无法创建这些对象,然后导入将失败,并出现错误 1227

    • 注意:由于您无法更改默认参数组中的值,如果默认参数组目前与 RDS 数据库实例关联,则您必须将一个自定义参数组与您的 RDS 数据库实例关联。将新参数组与 RDS 数据库实例关联后,您必须重启 RDS 数据库实例

  • 错误信息

Error: 1227 SQLSTATE: 42000 (ER_SPECIFIC_ACCESS_DENIED_ERROR) Access denied; you need (at least one of) the %s privilege(s) for this operation
  • 解决方法

需要放宽此条件并允许导入所有对象,解决错误 1227,请将 log_bin_trust_function_creators 的参数组值更改为 1

1.创建临时EC2

  • 在目标数据库Region创建临时EC2用于导出数据

2.安装mysqldump

  • yum -y install mysql

3.导出数据

  • mysqldump导出语句参考
mysqldump -h rds地址 \
    -u 用户名 \
    -p \
    --single-transaction \
    --routines \
    --triggers \
    --databases  导出数据库名称 \
    --add-drop-database \
    --compress  \
    --port 3306 > a.sql
参数 说明
--single-transaction 从服务器转储数据之前发出BEGIN SQL语句,保持数据一致性
--routines 导出存储过程和函数
--triggers 导出表的触发器
--add-drop-database 在每个CREATE DATABASE语句之前添加DROP DATABASE语句
--compress 压缩客户端和服务器之间发送的所有信息

4.导入数据

  • RDS导入前提
    • 目标数据库用户名必须与源数据库用户名保持一致
    • 解决方法
      • 使用sed命令将sql文件中的源数据库用户名替换成目标数据库的用户名
      • sed -i 's#源数据库用户#目标数据库用户#g' a.sql
mysql -h 数据库地址 -u 用户名 -p 密码 < a.sql

参考文档:

posted @ 2020-06-25 22:27  爱尔兰时空  阅读(594)  评论(0编辑  收藏  举报