RDS MySQL 物理备份文件恢复到自建数据库

记录一次误操作恢复线上数据的过程

操作不规范误删除了基础数据表🤦‍
由于服务器上没有每日的定时任务,无法恢复就先用测试数据弥补
随后找运维同学要了RDS昨天物理备份的连接开始恢复

参考文档

阿里云恢复官方文档 https://help.aliyun.com/knowledge_detail/41817.html.
其他博客参考文档:https://www.cnblogs.com/zoulixiang/p/9395382.html.

1.准备一台服务器,安装mysql,并检查剩余空间。

  • 1.1 这里建议恢复的mysql版本和RDS保持一致

    线上RDS版本
    查看RDS数据库版本为5.7.26

  • 1.2 安装对应RDS版本的mysql: https://cloud.tencent.com/developer/article/1451186.
    安装成功启动无问题后停用mysq服务清空数据目录下的文件(/etc/my.conf中的datadir值)

  • 1.3 数据恢复之前需要查看服务器磁盘空间,空间不一定够,在阿里云上扩展一块磁盘挂载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.下载数据备份文件。

	wget -c '<数据备份文件外网下载地址>' -O <自定义文件名>.tar.gz

3.解压已下载的数据备份文件。

	tar -izxvf <数据备份文件名>.tar.gz -C /home/mysql/data
	
	或者使用官方脚本(这里我使用的是脚本解压)
	
	wget  http://oss.aliyuncs.com/aliyunecs/rds_backup_extract.sh
	chmod 777 rds_backup_extract.sh 
	./rds_backup.sh -f <数据备份文件名>.tar.gz -C /data/mysql

4.恢复解压好的备份文件。

官方文档指出

在这里插入图片描述
上面查询到的RDS版本为5.7.26
官方安装文档: https://www.percona.com/doc/percona-xtrabackup/2.4/installation/yum_repo.html#standalone-rpm.

安装成功,查看版本;执行命令

在这里插入图片描述

	innobackupex --defaults-file=/data/mysql/backup-my.cnf --apply-log /data/mysql
执行结果

在这里插入图片描述

5.为避免版本问题,需修改backup-my.cnf参数。

	vi /data/mysql/backup-my.cnf
自建数据库不支持如下参数,需要注释掉。
#innodb_log_checksum_algorithm
#innodb_fast_checksum
#innodb_log_block_size
#innodb_doublewrite_file
#rds_encrypt_data
#innodb_encrypt_algorithm
#redo_log_version
#master_key_id

保存退出

6.执行如下命令,修改文件属主,并确定文件所属为MySQL用户。

	chown -R mysql:mysql /home/mysql/data

7.执行如下命令,启动MySQL进程。

	mysqld_safe --defaults-file=/data/mysql/backup-my.cnf --user=mysql --datadir=/data/mysql &
这里官方文档给出的命令无法启动mysql

在这里插入图片描述
本地环境使用service启动mysql

	service mysql start

在这里插入图片描述

8.成功演示。

数据恢复成功
在这里插入图片描述
硬盘占用空间展示
在这里插入图片描述

9.总结。

至此线上数据恢复就完成了。

  • 9.1 中间Percona XtraBackup工具安装踩坑,工具版本需要和RDS版本对应;除此以外可能会有工具包依赖问题
  • 9.2 建议本地恢复mysql版本和RDS保持一致
  • 9.3 恢复过程需要熟悉linux上的mysql文件结构、配置文件、mysql命令
  • 9.4 数据恢复成功后mysql启动也可能会有其他错误,具体问题具体处理
  • 9.5 建议给线上数据库加上逻辑备份
		#!/bin/bash
		date_str=`date +%Y%m%d_%H%M`
		mysqldump -u 账户 -p '密码' -h '数据库连接' 数据库名> /备份目录/备份数据库前缀_$date_str.sql
		find /备份目录/ -mtime +7 -exec rm -f {} \;

10.扩展。

  • 了解Percona XtraBackup工具
  • 熟悉mysql文件结构和命令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于MySQL数据库备份文件的下载,可以使用Python的boto3库来实现从RDS上下载备份文件。 首先,需要安装boto3库,可以使用pip安装: ``` pip install boto3 ``` 然后,需要在AWS控制台上创一个IAM用户,并生成该用户的Access Key和Secret Access Key,并将该用户加入RDS的访问策略组中。 接着,可以使用以下Python代码来下载MySQL备份文件: ``` python import boto3 # 配置AWS访问密钥 aws_access_key_id = 'your_access_key_id' aws_secret_access_key = 'your_secret_access_key' # 创rds client对象 client = boto3.client('rds', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, region_name='your_rds_region') # 获取最近的mysql备份文件 response = client.describe_db_log_files( DBInstanceIdentifier='your_db_instance_id', FilenameContains='mysql', FileLastWritten=0 ) # 下载mysql备份文件 if len(response['DescribeDBLogFiles']) > 0: file = response['DescribeDBLogFiles'][0] filename = file['LogFileName'] download_response = client.download_db_log_file_portion( DBInstanceIdentifier='your_db_instance_id', LogFileName=filename ) with open('mysql_backup.sql', 'wb') as f: f.write(download_response['LogFileData']) ``` 需要将上面代码中的 `your_access_key_id`,`your_secret_access_key`,`your_rds_region`,`your_db_instance_id` 替换成自己的AWS访问密钥、RDS所在区域和实例ID。 这样,就可以通过Python从RDS上下载MySQL备份文件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值