You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
YltProject/操作文档/7、Mysql数据库下载与还原.md

3.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

云数据库 RDS

RDS5.7版本,有自动备份设置,每天都会有一个新的备份生成。这个备份是物理备份。

下载的文件名称类似于:

hins25487844_data_20240730052418_qp.xb
hins25487844_data_20240813052415_qp.xb 

阿里云官方参考文档

安装Percona XtraBackupqpress

在自建库所在服务器中安装Percona XtraBackupqpress后,再执行以下解压命令。若不安装,后续执行如下命令将失败。

参考文档

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release enable-only tools release
yum install lz4 zstd -y
yum install percona-xtrabackup-80 -y
yum -y install qpress

# 检查安装的版本
 xtrabackup --version

上传备份文件到主机

cd /usr/local

因为备份文件太大,无法使用rz -be,所以选择sftp上传

hins25487844_data_20240813052415_qp.xb 

前提条件

要执行恢复备份,必须满足以下条件:

  • 备份集要完成准备

  • 数据目录**datadir必须为空**。

  • 不能恢复到正在运行的mysqld实例的数据目录(除非导入部分备份),在执行恢复之前需要关闭MySQL服务器

还原

rm -rf /var/mysql_bkdata/ && mkdir /var/mysql_bkdata/ -p

# 解压
cat hins25487844_data_20240813052415_qp.xb | xbstream -x -v -C /var/mysql_bkdata/

innobackupex --decompress --remove-original /var/mysql_bkdata/

# 应用日志
innobackupex --defaults-file=/var/mysql_bkdata/backup-my.cnf --apply-log /var/mysql_bkdata/

# 修改数据库文件属性
chown -R mysql:mysql /var/mysql_bkdata

编辑数据库配置文件

vi /etc/my.cnf

内容如下:

[mysqld]
user=mysql
basedir=/usr/local/mysql
#datadir=/data/mysql
datadir=/var/mysql_bkdata
server_id=1
port=22066
socket=/tmp/mysql.sock

lower_case_table_names=1
max_connections = 2048
max_connect_errors = 30
table_open_cache = 2048
open_files_limit = 16384
max_allowed_packet = 16M
read_buffer_size = 8M
read_rnd_buffer_size = 32M
sort_buffer_size = 2M
join_buffer_size = 2M
thread_cache_size = 16
query_cache_size = 128M
query_cache_limit = 4M
slow_query_log = 1
long_query_time = 2
innodb_file_per_table = 1
max_allowed_packet = 64M

innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 2G
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 170M
innodb_lock_wait_timeout = 60

#sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

[mysql]
socket=/tmp/mysql.sock

启动

/usr/local/mysql/bin/mysqld_safe  --defaults-file=/etc/my.cnf --user=mysql --datadir=/var/mysql_bkdata/ &

登录数据库

/usr/local/mysql/bin/mysql -uroot

上面基本完成数据的恢复。考虑到恢复完成后表mysql.user中不包含在RDS实例中创建的用户需要新建。在新建用户前执行如下命令

delete from mysql.db where user<>'root' and char_length(user)>0;

delete from mysql.tables_priv where user<>'root' and char_length(user)>0;

flush privileges;