mysql8.4备份与恢复实践
服务器版本
#cat /etc/os-release
openEuler 22.03 (LTS-SP4)
数据库与数据信息
数据库版本:
#mysql --version
mysql Ver 8.4.5 for Linux on x86_64 (MySQL Community Server - GPL)
数据库:testdb1
表t_1,t_2,t_3,t_4
表初始数据:
物理冷备份与恢复
物理冷备份:
停止mysql服务
#systemctl stop mysql
打包压缩data目录:
#cd /opt/software/mysql/mysql-8.4.5-linux-glibc2.28-x86_64/data
#tar -zcvf $(date +%Y%m%d%H%M%S).tar.gz *
这样冷备份就完成了,这种备份简单,适合非核心业务场景,能很好地保证数据库的完整性。由于备份过程简单直接,所以备份和恢复速度都比较快。但缺点也很明显,需要停机操作,这在一些对业务连续性要求较高的场景中不太适用。
物理恢复:
模拟数据丢失:
停止mysql服务
#systemctl stop mysql
备份现有data目录:
执行:
#mv data data_bak2
然后新建一个空data目录:
执行:
#mkdir data
将物理冷备份的压缩文件包复制到data目录
执行:
将备份的数据解压恢复到data目录:
#tar -xzf 20250607111223.tar.gz
启动mysql服务:
#systemctl start mysql
登录数据库查看数据是否恢复:
恢复成功!
Mysqldump逻辑热备份与恢复
mysqldump常用选项
--databases或-B:备份指定的数据库
--all-databases或-A:备份所有数据库
-d或--no-data:用于备份数据库的结构(即表的创建语句)但不包括表中的数据
--flush-logs或-F :在备份开始前刷新 MySQL 服务器的日志文件
--single-transaction:使用单一事务来备份数据
--lock-all-tables :备份过程中锁定所有表
--master-data=2 :用于备份二进制日志的位置信息,用于设置主从复制
--set-gtid-purged=OFF :用于关闭 GTID 信息的输出
举例:
mysqldump -u 用户 -p密码 --databases testdb1 testdb2 > mysqldump_20250611_testdb.sql #备份一个或多个指定库及库中的所有表
mysqldump -u 用户 -p密码 --all-databases > mysqldump_20250611_all.sql #备份所有库及库中的所有表
mysqldump -u 用户 -p密码 --all-databases | gzip > mysqldump_20250611_all.sql.gz
mysqldump -u 用户 -p密码 testdb1 t_1 t_2 > mysqldump_20250611.sql #备份指定库中的一个或多个表(不包含库对象本身)
备份testdb1数据库:
执行:
#mysqldump -u root -p -B testdb1 > $(date +%Y%m%d%H%M%S).sql
模拟数据丢失:
查看当前t_1,t_2,t_3,t_4表数据:
模拟丢失数据:
恢复testdb1数据库:
#mysql -u root -p < /opt/software/mysql/mysql-8.4.5-linux-glibc2.28-x86_64/data_backup/20250611111101.sql
验证恢复情况:
结论:数据恢复正常
PXB(Percona XtraBackup)备份与恢复
Percona XtraBackup是世界上唯一一款开源的免费MySQL热备份软件,可以为InnoDB和XtraDB数据库执行非阻塞备份。
使用Percona XtraBackup,可以获得以下好处:
快速可靠地完成备份
备份期间不间断的事务处理
节省磁盘空间和网络带宽
自动备份验证
由于恢复时间更快,正常运行时间更长
Percona XtraBackup对所有版本的Percona Server for MySQL和MySQL进行MySQL热备份。它执行流式、压缩和增量MySQL备份。
注意:
随着Percona XtraBackup 8.0的推出,Percona XtraBackup 2.4将继续支持MySQL和Percona Server 5.6和5.7数据库。由于新的MySQL重做日志和数据字典格式,Percona XtraBackup 8.0.x版本将只与MySQL8.0.x和即将推出的用于MySQL8.0.x的Percona服务器兼容。
下载PXB:
下载地址:
https://www.percona.com/downloads/XtraBackupDownload free, open source software for MySQL including Percona Server, Percona XtraBackup, Percona Toolkit, Percona XtraDB Cluster, and more. Download now!https://www.percona.com/downloads/XtraBackup
查看服务器的glibc版本,然后选择对应的版本下载
查看glibc版本方法,执行:
#rpm -q glibc
安装PXB:
将下载PXB上传到服务器目录:/opt/software/mysql/pxb,然后解压:
#tar -zxvf percona-xtrabackup-8.4.0-3-Linux-x86_64.glibc2.34
设置环境变量:
#vi /etc/profile
增加:
export XTRABACKUP_HOME=/opt/software/mysql/pxb/percona-xtrabackup-8.4.0-3-Linux-x86_64.glibc2.34
export PATH=$PATH:$HOME/bin:$XTRABACKUP_HOME/bin
使环境变量生效,执行:
#source /etc/profile
验证PXB安装是否成功,执行:
#xtrabackup --version
报错:xtrabackup: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
即缺失:libssl.so.3 包,这个包位于openssl包中
查看服务器openssl版本,发现是1.1版本,需要升级至3.x
下载openssl3.x这个包
#wget https://www.openssl.org/source/openssl-3.0.12.tar.gz
或者在本地下载下来然后上传到服务器,下载地址:
Downloads | OpenSSL Library https://openssl-library.org/source/
解压openssl-3.0.12.tar.gz:
#tar -zxvf openssl-3.0.12.tar.gz
安装openssl3:
#cd openssl-3.0.12
#./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
#make
#make install
创建软件链接:
#ln -s /usr/local/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
#ln -s /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
更新动态库缓存:
#ldconfig
继续验证PXB是否安装成功
#xtrabackup --version
报错:
xtrabackup: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.13' not found (required by xtrabackup)
xtrabackup: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by xtrabackup)
则需要安装libstdc++ 高版本
检测libstdc++当前版本
#strings /usr/lib64/libstdc++.so.6 | grep CXXABI
如果输出:
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
...
中没有CXXABI_1.3.13,说明系统自带的 libstdc++ 版本太低,需要升级
执行:
#dnf install libstdc++-devel libstdc++
检查检查当前 libstdc++.so.6 版本:
#strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
如果 没有 GLIBCXX_3.4.29,说明需要升级 libstdc++,执行:
#dnf install gcc-toolset-12-gcc.x86_64
始终未能安装成功,求高人指点!