本文介绍了如何通过mysqldump 工具导出DRDS实例数据,并生成一个包含所有数据以及表结构的 SQL 文件。本方案适用于需要将 DRDS 实例中的数据备份、迁移或导出到其他系统的场景。
使用场景
- 数据备份:将 DRDS 实例中的数据导出到 SQL 文件,用于长期保存或备份。
- 数据迁移:将 DRDS 数据导出为 SQL 文件后,迁移至其他数据库系统。
约束与限制
- 业务暂停:为确保导出数据的一致性,建议在业务低峰期执行导出操作,并在导出前暂停业务。
- 权限要求:进行数据导出时,确保使用的DRDS数据库用户对该schema拥有SELECT权限。
- 存储空间:确保目标存储有足够的空间保存导出的 SQL 文件,特别是在数据量较大的情况下。
- 为防止因会话超时问题导致mysqldump提前退出,导出不完整的数据文件,建议在系统后台执行导出命令:
nohup {mysqldump 命令行} &
数据导出步骤
步骤一:导出表结构
如果需要导出 DRDS 实例中的表结构,不包含数据,可以使用以下命令。该命令将生成一个包含所有指定表结构的 SQL 文件:
mysqldump -h {DBPROXY_IP} -P {DBPROXY_PORT} -u {DB_USER} -p --no-data --skip-lock-tables --set-gtid-purged=OFF --default-auth=mysql_native_password --skip-tz-utc --no-tablespaces {DB_NAME} {TABLE_NAME} > {drds_table_structure.sql}
MySQL客户端版本为8.0时请执行以下命令:
mysqldump -h {DBPROXY_IP} -P {DBPROXY_PORT} -u {DB_USER} -p --no-data --skip-lock-tables --set-gtid-purged=OFF --default-auth=mysql_native_password --column-statistics=0 --skip-tz-utc --no-tablespaces {DB_NAME} {TABLE_NAME} > {drds_table_structure.sql}
步骤二:导出数据库数据
如果需要导出 DRDS 实例中的数据,可以使用以下命令。该命令将生成一个包含所有指定数据的 SQL 文件,如果只需要导出指定表的数据,可以在命令中指定表名,如下所示:
mysqldump -h {DBPROXY_IP} -P {DBPROXY_PORT} -u {DB_USER} -p \
--skip-lock-tables --add-locks=false --hex-blob --complete-insert --set-gtid-purged=OFF --quick --no-tablespaces --no-create-info --skip-comments --skip-tz-utc --no-set-names --ignore-table={DB_NAME}._sys_global_sequence_
{DB_NAME} {TABLE_NAME} > {drds_table_data.sql}
参数说明
参数 | 参数说明 | 备注 |
---|---|---|
DBPROXY_IP | 待导出的DRDS的VIP。 | 必填。 |
DBPROXY_PORT | 待导出的DRDS的端口。 | 必填。 |
DPROXY_USER | 待导出的DRDS的用户名。 | 必填。 |
DB_NAME | 逻辑schema名称。 | 必填。 |
TABLE_NAME | 表名。 | 可选。如有必要,可以多个同类型的表,用空格隔开。建议只导出与业务相关的表。 |
drds_table_data.sql | 生成的表数据文件名。 | 必填。请确保每次导出的文件名不同,建议以“逻辑库名”+“”+“逻辑表名”+“ ”+“data”格式命名,以免数据被覆盖。建议后缀为.sql |
--complete-insert | 使用完整的insert语句(包含列名称)。 | 本场景保留。 |
--single-transaction | 该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。 | 本场景保留。 |
--skip-tz-utc | 跳过与时区相关的设置。 防止导出时处理时区信息,尤其是与 UTC 有关的设置。 | 本场景保留。 |
--no-tablespaces | 禁用与表空间相关的查询。避免查询 INFORMATION_SCHEMA.FILES 等表空间相关的表。 | 本场景保留。 |
--quick | 不缓冲查询,直接导出到标准输出。避免大数据情况内存爆涨。 | 本场景保留。 |
--hex-blob | 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。 | 本场景保留。 |
--no-create-info | 只导出数据,而不添加CREATE TABLE 语句。导出数据时使用。 | 可选。如不需要导出表结构,可添加此参数。 |
--no-data | 不导出数据。 | 可选。如不不需要导出数据,可添加此参数。 |
--skip-comments | 关闭附加注释信息。 | 本场景保留。 |
--skip-lock-tables | 在不锁表的情况下导出数据。某些参数会默认开启加锁声明,因此建议在数据导出语句末尾增加此参数。 | 本场景保留。 |
--add-locks=false | 导出的数据文件中不加锁表的声明。 | 本场景保留。 |
--skip-add-locks | 在导出数据时,控制加锁动作,以避免因耗能引起的性能问题。 | 本场景保留。 |
--set-gtid-purged=OFF | 若使用的MySQL版本为8.0或5.7,则需要配置该参数。若5.6及以下,不用该参数。 | 本场景保留。 |
--ignore-table={DB_NAME}.sys_global_sequence | 避免导出不需要的系统表,sys_global_sequence 是一个系统表,用于管理数据库内部的序列或状态数据,这些数据通常不需要备份或迁移。如不需要导出,可通过使用 --ignore-table 选项来避免导出这些表。 | 本场景保留。 |
--where | 只转储给定的WHERE条件选择的记录。 | 可选。 |