从备份文件恢复到自建MySQL数据库

您可以使用PolarDB的备份文件下载功能,将云盘实例的快照备份数据转换成CSV文件或SQL文件导出,然后通过该文件将数据恢复到自建MySQL数据库中。

前提条件

PolarDB MySQL版集群要求

  • 集群版本要求:

    • 当前仅PolarDB MySQL版企业版的集群版支持备份下载功能。

    • PolarDB MySQL版集群的引擎版本支持5.6、5.7、8.0.1、8.0.2。

  • 集群地域要求:

    西南1(成都)、华南3(广州)、华北1(青岛)、华北2(北京)、华东2(上海)、华北3(张家口)、华东1(杭州)、华南1(深圳)、中国香港、马来西亚(吉隆坡)、印度尼西亚(雅加达)、日本(东京)、新加坡、美国(硅谷)、美国(弗吉尼亚)。

    说明

    其余地域将陆续上线。

  • 备份数据未加密。加密的PolarDB集群不支持下载备份。

自建MySQL数据库要求

请确保自建MySQL数据库已开启local_infile参数。

说明
  • 查看local_infile参数状态(ON表示已开启):SHOW GLOBAL VARIABLES LIKE 'local_infile';

  • 开启local_infile参数:SET GLOBAL local_infile=1;

功能限制

从下载的备份集恢复到本地MySQL数据库时,需要注意以下限制:

  • 不支持以下二进制字段类型:BITBINARYVARBINARYTINYBLOBBLOBMEDIUMBLOBLONGBLOB

    说明

    如果备份集中包含这些字段类型,它们将会以十六进制格式进行存储。在导入时,MySQL会将二进制字段当作字符串进行处理。此种情况下,需要手动在load data local infile命令中使用UNHEX函数将十六进制格式转换为原始的二进制串。

  • 不支持以下空间字段类型:GEOMETRYPOINTLINESTRINGPOLYGONMULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION

注意事项

  • 建议PolarDB MySQL版数据库和自建MySQL数据库版本保持一致。不同版本的数据库间可能存在不兼容的特性,导致恢复失败。

  • 在执行恢复命令前,请确保目标数据库中不存在与备份数据中同名的数据库和表,以防止数据冲突或数据丢失。请仔细检查并删除可能会产生冲突的同名数据库和表。

  • 在进行恢复任务时,如果您因为某些原因中断了恢复任务,可能会导致恢复数据不完整或恢复失败,请谨慎操作。

操作步骤

本示例以PolarDB MySQL版集群的SQL文件恢复至ECS实例(CentOS 7.8 64位)的自建MySQL数据库为例,其他环境请使用对应命令。

  1. 登录PolarDB控制台,使用下载备份文件功能将集群的备份文件转换成CSV文件或SQL文件,并下载到本地或ECS实例中。

  2. 在本地或ECS实例中解压下载的备份文件,命令如下:

    tar -izxvf <压缩包文件名>.tar.gz -C <解压缩后的文件位置>

    本示例将名为backup.tar.gz的压缩文件解压缩到指定目录/home/mysql/data中,具体请以实际文件名和目录为准。

    tar -izxvf backup.tar.gz -C /home/mysql/data
  3. (可选)查看备份文件是否已解压到指定位置(/home/mysql/data)。

    ls -al /home/mysql/data
  4. Python脚本文件.py下载至本地或ECS实例中。

  5. 对Python脚本文件restore_from_downloads.py进行授权,命令如下:

    chmod +x ./restore_from_downloads.py
  6. 将CSV文件或SQL文件恢复至自建数据库,恢复命令如下:

    python ./restore_from_downloads.py <CSV文件或SQL文件目录路径> <数据库主机> <数据库端口> <数据库账号> <数据库密码>

    示例如下:

    python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********"

    执行结果:

    image.png

    重要
    • 请确保自建数据库中没有和备份数据中同名的数据库,否则会导致恢复失败。

    • 如果数据库账号名或密码中包含了特殊字符(例如:#、空格等),在命令行传入参数时需要使用英文双引号("")将密码括起来。例如,如果数据库密码是#1234,则需要在命令行中传入"#1234"

    • 如果出现类似Command 'python' not found的报错,说明系统中没有安装Python或者Python命令不在系统的搜索路径中。此时请确认您系统中安装的Python版本以及执行Python的命令是否正确。例如,如果系统中安装了Python3,可以使用python3 ./restore_from_downloads.py /home/mysql/data/test1.sql 127.0.0.1 3306 zhtxxxxx "#txxxxx"