云数据库RDS MySQL支持将云盘实例的备份数据转换成CSV文件导出,您可以通过该CSV文件将数据恢复到MySQL自建数据库。

前提条件

  • 自建库中必须已开启local_infile参数。
    说明 SQL命令如下:
    • 查看当前local_infile参数是否开启:SHOW GLOBAL VARIABLES LIKE 'local_infile';
    • 开启local_infile参数:SET GLOBAL local_infile=1;
  • RDS实例未开启TDE加密。实例中若存在加密过的表,会导致恢复过程出错,请先对已加密的表执行解密操作

功能限制

从下载的备份集恢复到本地MySQL数据库时,存在以下限制:

  • 不支持以下二进制字段类型:BITBINARYVARBINARYTINYBLOBBLOBMEDIUMBLOBLONGBLOB
    说明 如果下载的备份集包含二进制类型字段,此字段将会使用十六进制进行存储。在导入时,MySQL会将十六进制表示的字段当作字符串处理。此种情形需要您手动在load data local infile命令中使用UNHEX函数转换为原始二进制串。
  • 不支持以下空间字段类型:GEOMETRYPOINTLINESTRINGPOLYGONMULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION
  • 建议将数据恢复到相同版本的数据库,不同的数据库版本可能存在不相互兼容的特性,最终导致恢复失败。

操作步骤

本示例以Ubuntu 20.04 LTS版本为例进行演示,其他系统请使用对应命令。

  1. 通过高级下载功能将备份文件转换成CSV文件下载到本地。
  2. 解压下载的文件。
    解压缩命令格式为tar -izxvf <压缩包文件名>.tar.gz -C <解压缩后的文件位置>

    示例:

    tar -izxvf test1.tar.gz -C /home/mysql/data
  3. 下载Python脚本文件
  4. 执行如下命令对Python脚本文件restore_from_downloads.py进行授权。
    chmod +x ./restore_from_downloads.py
  5. 将CSV文件恢复至目标数据库。
    命令格式为python ./restore_from_downloads.py <CSV文件路径> <数据库主机> <数据库端口> <数据库账号> <数据库密码>

    示例:

    python ./restore_from_downloads.py /home/mysql/data/ 127.0.0.1 3306 zhtxxxxx "#txxxxx"
    说明
    • 如果出现类似Command 'python' not found的报错,请确认您系统中安装的Python版本以及执行Python的命令。例如,您的命令可能是python3 ./restore_from_downloads.py ~/mysql/data/ 127.0.0.1 3306 zhtxxxxx "#txxxxx"
    • 请确保本地数据库中没有和待导入的数据库同名的库,否则将导入失败。
    • 如果您的数据库账号名或密码包含特殊字符(例如:#、空格等等),命令行传入参数时请使用英文双引号("")。例如:数据库密码是:#1234,那执行脚本处应传入"#1234"
    1