利用备份文件恢复实例

最近更新时间:2019-09-30 15:58:23

MariaDB 可以通过回档功能来查看历史数据,如果您需要在本地恢复您的数据库实例,可以按照本文档的步骤进行操作恢复历史数据。

前提条件

准备服务器

如果您需要在本地恢复您的数据库实例,请确保服务器基本配置如下:

  • CPU:2核或以上;
  • 内存:4G或以上;
  • 磁盘空间:必须超过数据库已用空间并留足系统所需的临时空间;
  • 操作系统:centos。

准备数据库

下面以安装 Mariadb 10.0.10为例:

  • 添加 yum 源。
    vi /etc/yum.repos.d/mariadb-10.0.10.repo):
    # MariaDB 10.0 CentOS repository list - created 2016-05-30 02:16 UTC
    # http://downloads.mariadb.org/mariadb/repositories/
    [mariadb]
    name = MariaDB
    # baseurl = http://yum.mariadb.org/10.0/centos7-amd64
    baseurl = http://archive.mariadb.org/mariadb-10.0.10/yum/centos6-amd64/
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=0
  • 检查配置 yum 源对应的 mariadb 版本是否为 10.0.10。
    yum makecache
    yum info MariaDB-server
  • 安装 MariaDB-server。
    yum install MariaDB-server
说明:

提示与旧版本冲突时,您需要先移除之前的安装包,例如yum remove mariadb-libs

安装辅助工具

  • 安装 mariadb 客户端。
    yum install MariaDB-client
  • 安装 lz4 解压软件,详情请参考 如何解压备份文件和日志文件lz4 默认安装在mysqlagent/bin目录下,也可以将其放置在/usr/bin目录下,当环境变量引用。
    yum install -y lz4
    percona-xtrabackup
    yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
    yum install percona-xtrabackup

下载备份

在【腾讯云管理中心】>【云数据库Mariadb】>【实例管理】>【备份与恢复】中获取备份下载地址。

下载命令示例:

wget  --content-disposition 'http://169.254.0.27:8083/2/noshard1/set_1464144850_587/1464552298xxxxxxxx'

利用备份文件恢复数据库(未加密)

1. 进入备份文件下载目录,通过 lz4 解压冷备文件

lz4 -d set_1464144850_587.1464552298.xtrabackup.lz4

2. 使用 xbstream 工具解压到临时目录 xtrabackuptmp 中

mkdir xtrabackuptmp/
mv set_1464144850_587.1464552298.xtrabackup xtrabackuptmp/
xbstream -x < set_1464144850_587.1464552298.xtrabackup

解压完后,目录和文件内容如下:

3. 使用 innobackupex 应用日志

mkdir /root/dblogs_tmp
innobackupex --apply-log  --use-memory=1G --tmpdir='/root/dblogs_tmp/' /root/xtrabackuptmp/

操作成功后,会显示completed OK!,如下所示:

4. 停止数据库,清空数据文件

service mysql stop

清空数据文件(数据目录、表空间目录、日志目录):

mkdir /var/lib/mysql-backup
mv /var/lib/mysql/* /var/lib/mysql-backup

5. 修改数据库参数文件

修改数据库参数文件(/etc/my.cnf.d/server.cnf),具体参数数值请参考解压文件中backup-my.cnf的参数。不能直接用 backup-my.cnf 替换参数文件。

[mysqld]
skip-name-resolve
datadir=/var/lib/mysql
innodb_checksum_algorithm=innodb
innodb_log_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:2G:autoextend
innodb_log_files_in_group=4
innodb_log_file_size=1073741824
innodb_page_size=4096
innodb_log_block_size=512
innodb_undo_tablespaces=0

6. 使用 innobackupex 加载镜像

innobackupex --defaults-file=/etc/my.cnf --move-back /root/xtrabackuptmp/

成功后,显示Complete OK!,如下所示:

7. 启动数据库

chmod 777 -R /var/lib/mysql
service start mysql

如果遇到启动失败,则需要检查错误信息,修复后再重新启动。

8. 连接数据库查看数据

数据库启动后,您可能需要通过原来的账号密码来连接数据库查看数据。

利用备份文件恢复数据库(已加密)

数据透明加密(TDE)当前仅支持 Percona 5.7 版本,您可以通过云数据库 MariaDB 入口访问。请先下载并安装本次恢复需要的关键工具。整个加密流程如下:

1. 将备份文件解压到临时目录

详情请参考 进入备份文件下载目录,通过 lz4 解压冷备文件使用 xbstream 工具解压到临时目录 xtrabackuptmp 中

本章节示例中,我们将备份解压到临时目录./backup_dir 中。lz4 默认安装在mysqlagent/bin目录下,也可以将其放置在/usr/bin目录下,当环境变量引用。

2. 获取数据密钥明文

您可以利用密钥管理 KMS 的 API 接口。

innobackupex --apply-log --rebuild-indexes  --use-memory=1G  --tmpdir=/tmp ./backup_dir/

3. 数据恢复前的准备工作

详情请参考 停止数据库,清空数据文件

4. 获取数据密钥明文

在解密数据之前,您需要在【腾讯云管理中心】>【云数据库Mariadb】>【实例管理】>【数据安全性】>【数据加密】中查询数据密钥密文。然后,您可以通过两种方案(任选其一)解密“数据密钥密文”,得到数据密钥明文

  • 您可以通过密钥管理服务 KMS 的 API,自己实现获取数据密钥明文,详见 密钥管理服务 KMS 的 API 文档
  • 您可以使用腾讯云提供的 Python 脚本./kms_tool.py,获取数据密钥明文。
    • 参数解释:
    • 使用 demo 案例:
      python ./kms_tool.py --role="qcs::cam::uin/xxxxxxxxx:roleName/kmsTDSQLRole" 
      --secret_id="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --secret_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      --region="ap-hongkong" --ciphertext="CtFlCTPsA0+LilyvZ5V4nsEi6qSIA/KEhVeE8zQFIGfBwzXiMShQZIYYUt9KBWAUsHcfLQ0Z5feADH2D49/nOw==-k-fKVP3WIlGpg8m9LMW4jEkQ==-k-zudP3Tz4jxrvjs7zKkuKU+0V/gVVaNRRIIaRl/+83qCinaBgsLQbU5e1MpW4q/IJKpNXnb9N9/rO
      5Es03fh7PU9n8Sjex6mnl+YKV1SMQog+RJ1E8bNmwx/22hhHb/1B5LGpwB8tbXKD3gL0tZwSJvV2QxSaUnONh5+6ssb2cQZI8MhcBBhGj9oXtbL6OC74PuDO1D/AsQ6qBLIqC2bTSA68s8Q="

5. 重新生成数据密钥文件

拿到数据密钥明文以后,您可以通过两种方案(任选其一)生成数据密钥文件。

  • 利用兼容 Percona 的 TDE 开源工具。
  • 利用腾讯云提供的工具./keyring_tool生成数据密钥文件。./keyring_tool的基本命令格式为 ./keyring_tool "[ciphertext]" [File Path]
    • 数据密钥串 ciphertext 文本需要加上双引号。
    • keyring_tool依赖libboost_program_options.so.1.53.0,若系统没有该 lib 库,需要先执行:export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH,再运行keyring_tool

6. 利用工具./innobackupex对备份文件进行 apply

下图为利用工具./innobackupex对备份文件进行 apply,直到 apply 正常结束。apply 时需要通过--keyring-file-data=key_file来指定密钥,同时该参数指定的路径要填绝对路径。

这里及后文中用到的 xtrabakcup 为腾讯云专有云数据库 TDSQL 自带的 xtrabakcup,默认放置在专有云安装包目录下的 xtrabackup 目录。

工具使用 demo 如下:

./innobackupex --apply-log  --use-memory=1G  --tmpdir=/tmp  --keyring-file-data=/data/home/test/key_file   ./backup/ 

7. 利用工具./innobackupex将备份拷贝到数据目录

下图为利用工具./innobackupex对备份文件进行移动。建议使用 MySQL 启动用户权限。工具使用 demo 如下:

./innobackupex --defaults-file='/data/home/seven/tdsqlinstall/percona-5.7.17/etc/my_8003.cnf' --move-back ./backup_dir/

8. 利用工具keyring_file将生成的密钥问配置到 MySQL

下图为利用工具keyring_file将生成的密钥问配置到 MySQL,注意红框中的配置。建议使用 MySQL 启动用户权限运行keyring_file

9. 重新启动 mysqld

下图为腾讯云专有云数据库 TDSQL 自带的启动脚本,您也可以使用其他方案启动 Mysqld。

10. 正常访问加密表

成功恢复加密备份后,您可以直接访问已加密表。如果缺少密钥也能恢复,但访问加密表时,会出现错误提示:can't find master key from keying,please check keyring plugin is loaded(开源版 MySQL 或 Percona 会提示 Error 错误)。