RDS 5.7的物理备份恢复到本地的方法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 需要本地安装的软件: - mysql 5.7.24 版本 - Percona Xtrabackup 2.4.12 注意事项: - 本地必须是linux系统. - 不能有占用3306端口的其它程序执行.

需要本地安装的软件:

- mysql 5.7.24 版本
- Percona Xtrabackup 2.4.12

注意事项:

- 本地必须是linux系统.
- 不能有占用3306端口的其它程序执行.
- 本次在 centos7.2 64 位系统下测试通过

恢复的详细步骤如下:

  1. 登录到RDS 控制台, 找到对应地域,在实例管理中,选择备份恢复,数据备份,点"下载".如图:
    image
  2. 在弹出的窗口中,选择复制外网地址,如图:
    image
  3. ssh登录到ecs, 执行下载命令,格式为:
wget -c '<数据备份文件外网下载地址>' -O <自定义文件名>.tar.gz
  1. 对下载的数据文件进行解压.命令如下:
tar -izxvf <数据备份文件名>.tar.gz -C /home/mysql/data
  1. 查看解压后的文件:
ls /home/mysql/data

命令执行成功后,系统会返回如下结果,以 d 开头的蓝色目录表示数据库名称
image

  1. 下载并解压 percona Xtrabackup 2.4.12,并将解压后的目录改名为Xtrabackup2.4.12
wget -c 'https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/tarball/percona-xtrabackup-2.4.12-Linux-x86_64.libgcrypt11.tar.gz' -O  Xtrabackup2.4.12.tar.gz
tar zxvf  Xtrabackup2.4.12.tar.gz
mv percona-xtrabackup-2.4.12-Linux-x86_64 Xtrabackup2.4.12
  1. 用 innobackex 恢复解压后的数据.命令如下:
./Xtrabackup2.4.12/bin/innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log  /home/mysql/data/

若系统返回如下类似结果,则说明备份文件已成功恢复到本地数据库。
image

  1. 查看有没有在运行的mysql或占用3306端口的程序.命令如下:
    image

如上图结果为空,表示没有.

  1. 修改backup-my.cnf ,具体操作步骤如下:
    I: 用vi打开backup-my.cnf
vi /home/mysql/data/backup-my.cnf

II:按字母i键,进入编辑模式,注释如下参数,即在行首添加#号,并在尾部添加 skip-grant-tables项.

#innodb_log_checksum_algorithm=strict_crc32
#innodb_fast_checksum=false
#innodb_page_size=16384
#innodb_log_block_size=512
#redo_log_version=1
#server_uuid=e4323bd1-072f-11e9-97a1-7cd30ad32d28
#master_key_id=0

修改后的配置文件应是如下内容:

# The MySQL server
[mysqld]
innodb_checksum_algorithm=crc32
#innodb_log_checksum_algorithm=strict_crc32
innodb_data_file_path=ibdata1:200M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=1048576000
#innodb_fast_checksum=false
#innodb_page_size=16384
#innodb_log_block_size=512
innodb_undo_directory=./
innodb_undo_tablespaces=0
server_id=1960504189
#redo_log_version=1
#server_uuid=e4323bd1-072f-11e9-97a1-7cd30ad32d28
#master_key_id=0
skip-grant-tables

III:按esc键,录入 :x 退出并保存修改.

  1. 修改目录属组和权限

  2. mysql:mysql -R /home/mysql/data/
  3. 755 -R /home/mysql/data/

  4. 执行命令,启动MySQL,命令如下:
mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --datadir=/home/mysql/data/  --user=mysql

注意: mysqld_safe 必须是已经加入到了系统环境变量中,否则需要写上该命令的绝对路径.

  1. 检查是否启动成功.
    命令仍为:
ps -ef|grep -i mysql|grep -v grep

如下图所示,表示启动成功.
image

  1. 登录mysql.因为设置了 skip-grant-tables,所以无须密码.命令为:
mysql

下图表示登录成功:
image

  1. 查看并修改超级账号 aliyun_root 的密码. 命令为:
select host,user from mysql.user;
update mysql.user set authentication_string=password('新密码') where user='aliyun_root';

这时会报错,Unknown system variable 'maintain_user_list',如图:
image
表示有触发器.
注意: 在mysql5.7 中, aliyun_root 才是真正超级权限账号.

  1. 查看并删除触发器.命令如下:
select trigger_schema,trigger_name from information_schema.triggers;

结果如图,发现有两个sys库下的触发器.
image
删除这两个触发器,命令如下:

drop trigger sys.sys_config_insert_set_user;
drop trigger sys.sys_config_update_set_user;

如下图所示,表示删除成功了.
image

  1. 再次修改密码,仍然报错.错误和14步骤中一致.这时我们还要删除触发器文件.先退出mysql,在 shell 下查找.TRG 结尾的文件,命令如下:
find /home/mysql/data/ -iname *.trg

结果如下图,表示触发器文件还在.
image
为避免误删除其它文件,我们先将它移到家目录下.命令如下:

mv /home/mysql/data/mysql/*.TRG ~

再次查询,保证移除成功,下图表示移除成功.
image

  1. 再次登录并修改 aliyun_root 的密码.命令同上,下图表示修改成功.
    image

我们退出mysql.然后关闭 mysql 服务.命令为:

  mysqladmin shutdown
  1. 修改 backup-my.cnf, 注释 skip-grant-tables, 保存, 并再次启动mysql.
  2. 这次登录需要密码验证,登录命令为:
mysql -ualiyun_root -p -h127.0.0.1

回车,录入刚修改的密码后,就能登录了.如图表示成功登录.
image

  1. 因为 aliyun_root 是超级账号,有超级权限.所以可以做任何操作.

好的,整个恢复步骤就完成了.

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
关系型数据库 MySQL 索引
MySQL的全文索引查询方法
【8月更文挑战第26天】MySQL的全文索引查询方法
53 0
|
2月前
|
存储 关系型数据库 MySQL
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
113 1
|
2月前
|
存储 关系型数据库 MySQL
提高MySQL查询性能的方法有很多
提高MySQL查询性能的方法有很多
166 7
|
4月前
|
存储 关系型数据库 MySQL
mysql数据库查询时用到的分页方法有哪些
【8月更文挑战第16天】在MySQL中,实现分页的主要方法包括:1)使用`LIMIT`子句,简单直接但随页数增加性能下降;2)通过子查询优化`LIMIT`分页,提高大页码时的查询效率;3)利用存储过程封装分页逻辑,便于复用但需额外维护;4)借助MySQL变量实现,可能提供更好的性能但实现较复杂。这些方法各有优缺点,可根据实际需求选择适用方案。
392 2
|
28天前
|
关系型数据库 MySQL
Mysql 中日期比较大小的方法有哪些?
在 MySQL 中,可以通过多种方法比较日期的大小,包括使用比较运算符、NOW() 函数、DATEDIFF 函数和 DATE 函数。这些方法可以帮助你筛选出特定日期范围内的记录,确保日期格式一致以避免错误。
|
3月前
|
存储 关系型数据库 MySQL
深入解析MySQL数据存储机制:从表结构到物理存储
深入解析MySQL数据存储机制:从表结构到物理存储
227 1
|
3月前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
147 4
|
3月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
36 4
|
3月前
|
关系型数据库 MySQL Unix
MySQL配置不区分大小写的方法
结论 通过适当配置 lower_case_table_names参数以及在数据定义和查询中选择合适的校对规则,可以灵活地控制MySQL中的大小写敏感性,以适应不同的应用场景和需求。这样的设置既可以增加数据库的兼容性,又可以在必要时利用大小写敏感性进行精确的数据处理。需要注意的是,修改 lower_case_table_names参数后,最好在数据库初始化时进行,以避免现有表名的大小写问题。
334 3
|
3月前
|
存储 关系型数据库 MySQL
技术解析:MySQL中取最新一条重复数据的方法
以上提供的两种方法都可以有效地从MySQL数据库中提取每个类别最新的重复数据。选择哪种方法取决于具体的使用场景和MySQL版本。子查询加分组的方法兼容性更好,适用于所有版本的MySQL;而窗口函数方法代码更简洁,执行效率可能更高,但需要MySQL 8.0及以上版本。在实际应用中,应根据数据量大小、查询性能需求以及MySQL版本等因素综合考虑,选择最合适的实现方案。
394 6