更新时间:2024-12-20 gmt 08:00

使用mysqldump迁移flexusrds for mysql数据-九游平台

迁移准备

flexusrds for mysql支持开启公网访问功能,通过弹性公网ip进行访问。您也可以通过flexus云服务器x实例的内网访问flexusrds for mysql

  1. 准备flexus云服务器x实例或可通过公网访问flexusrds for mysql实例的设备。

    通过公网地址连接flexusrds for mysql实例,需要对实例绑定弹性公网ip

  2. 在准备flexus云服务器x实例或可访问flexusrds for mysql的设备上,安装和flexusrds for mysql相同版本的mysql客户端。

    mysql客户端自带mysqldump和mysql工具。

    mysql系统库mysql和sys不支持导入到flexusrds for mysql

导出数据

要将源数据库迁移到flexusrds for mysql,需要先对其进行导出。

  • 相应导出工具需要与数据库引擎版本匹配。
  • 数据库迁移为离线迁移,您需要停止使用源数据库的应用程序。
  1. 登录源数据库。
  2. 使用mysqldump将表结构导出至sql文件。

    mysql数据库是flexusrds for mysql管理所必须的数据库,导出表结构时,禁止指定--all-database参数,否则会造成数据库故障。

    mysqldump--databases<db_name>--single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=off-u <db_user>-p -h<db_address>-p <db_port>|sed -e 's/definer[ ]*=[ ]*[^*]*\*/\*/' -e 's/definer[ ]*=.*function/function/' -e 's/definer[ ]*=.*procedure/procedure/' -e 's/definer[ ]*=.*trigger/trigger/' -e 's/definer[ ]*=.*event/event/' >

    • db_name为要迁移的数据库名称。
    • db_user为数据库用户。
    • db_address为数据库地址。
    • db_port为数据库端口。
    • backup_file为导出生成的文件名称

    根据命令提示输入数据库密码。

    示例如下:

    mysqldump --databases frdsdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=off -u root -p -h 192.168.151.18 -p 3306 |sed -e 's/definer[ ]*=[ ]*[^*]*\*/\*/' -e 's/definer[ ]*=.*function/function/' -e 's/definer[ ]*=.*procedure/procedure/' -e 's/definer[ ]*=.*trigger/trigger/' -e 's/definer[ ]*=.*event/event/' > dump-defs.sql

    enter password:

    命令执行完会生成“dump-defs.sql”文件,如下:

    [rds@localhost ~]$ ll dump-defs.sql 
    -rw-r-----. 1 rds rds 2714 sep 21 08:23 dump-defs.sql
  3. 使用mysqldump将数据导出至sql文件。

    mysql数据库是flexusrds for mysql管理所必须的数据库,导出数据时,禁止指定--all-database参数,否则会造成数据库故障。

    mysqldump --databases<db_name>--single-transaction --hex-blob --set-gtid-purged=off --no-create-info --skip-triggers-u<db_user>-p-h<db_address>-p<db_port>-r<backup_file>

    以上命令的参数说明如步骤2所示。

    根据命令提示输入数据库密码。

    示例如下:

    mysqldump --databases frdsdb --single-transaction --hex-blob --set-gtid-purged=off --no-create-info --skip-triggers -u root -p -h 192.168.151.18 -p 3306 -r dump-data.sql

    命令执行完会生成“dump-data.sql”文件,如下:

    [rds@localhost ~]$ ll dump-data.sql 
    -rw-r-----. 1 rds rds 2714 sep 21 08:23 dump-data.sql

导入数据

通过flexus云服务器x实例或可访问flexusrds for mysql的设备,用相应客户端连接flexusrds for mysql实例,将导出的sql文件导入到flexusrds for mysql

如果源数据库中包含触发器、存储过程、函数或事件调用,则需确保导入前设置目标数据库参数log_bin_trust_function_creators=on。

  1. 登录已准备的flexus云服务器x实例,或可访问flexusrds for mysql的设备。
  2. 客户端连接flexusrds for mysql实例。
  3. 导入表结构到flexusrds for mysql

    # mysql -f -h-p<db_port>-uroot-p < /dump-defs.sql

    • db_address为flexusrds for mysql实例的ip地址。
    • db_port为当前数据库实例的端口。
    • backup_dir为“dump-defs.sql”所在目录。

    示例如下:

    # mysql -f -h 172.16.66.198 -p 3306 -u root -p < dump-defs.sql

    enter password:

    如果是将单表导出的数据(即导出的sql是某一张表的sql语句,不包含数据库)再进行导入,建议指定待导入的数据库(mydb),否则可能会报错“no database selected”。示例:

    # mysql -f -h 172.16.66.198 -p 3306 -u root -p mydb < dump-defs.sql

    enter password:

  4. 导入数据到flexusrds for mysql

    # mysql -f -h-p<db_port>-uroot-p< /dump-data.sql

    • db_address为flexusrds for mysql实例的ip地址。
    • db_port为当前数据库实例的端口。
    • backup_dir为“dump-data.sql”所在目录。

    示例如下:

    # mysql -f -h 172.16.66.198 -p 3306 -u root -p < dump-data.sql

    enter password:

    如果是将单表导出的数据(即导出的sql是某一张表的sql语句,不包含数据库)再进行导入,建议指定待导入的数据库(mydb),否则可能会报错“no database selected”。示例:

    # mysql -f -h 172.16.66.198 -p 3306 -u root -p mydb < dump-defs.sql

    enter password:

  5. 查看迁移结果。

    mysql> show databases;

    示例中,名为frdsdb的数据库已经被导入了:

    mysql> show databases; 
     --------------------  
    | database           | 
     --------------------  
    | information_schema | 
    | frdsdb              | 
    | mysql              | 
    | performance_schema | 
     --------------------  
    4 rows in set (0.00 sec)

相关文档

网站地图