centos系统mysql数据库差异备份与恢复

文章目录

差异备份mysql数据

一、 安装 Percona XtraBackup

bash 复制代码
# 添加 Percona 仓库
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm  
  
# 安装 Percona XtraBackup  
sudo yum install percona-xtrabackup-83 -y # 注意:版本号可能会变化
										  # 83版本工具只支持mysql80以上版本

数据库中创建一些数据

如果数据库中已有默认以外的数据,直接跳过

sql 复制代码
CREATE DATABASE IF NOT EXISTS test;		#创建一个名为test的数据库
USE test;								#使用数据库
sql 复制代码
#创建一个名为t1的表

CREATE TABLE IF NOT EXISTS t1 (  				
    id INT AUTO_INCREMENT PRIMARY KEY,  
    name VARCHAR(100) NOT NULL,  
    age INT  
);
sql 复制代码
#向t1表中插入一些数据

INSERT INTO t1 (name, age) VALUES ('Alice', 30);  
INSERT INTO t1 (name, age) VALUES ('Bob', 25);  
INSERT INTO t1 (name, age) VALUES ('Charlie', 35);


#查看表中所有记录
SELECT * FROM t1;

三、创建全备份

首先,你需要为 MySQL 数据库创建一个全备份、这是差异备份的基础

sql 复制代码
#创建一个备份目录
mkdir /data/backup -p
bash 复制代码
# 使用 xtrabackup 执行完全备份  
xtrabackup --defaults-file=/etc/my.cnf \	#使用配置文件连接
--backup -uroot -p'你的密码' \
--target-dir=/data/backup/base  \			#全备份目录
--no-server-version-check 					#不检查版本

注意:在实际操作中,请不要直接在命令行中包含密码,而是通过配置文件或环境变量来管理密码

四、创建差异备份

在进行了全备份之后,你可以根据需要创建多个差异备份

差异备份只包含全备份以来发生更改的数据

1. 在数据库中添加数据,让数据发生一些改变
sql 复制代码
use test;			\\使用test数据库
#插入一些记录
INSERT INTO t1 (name, age) VALUES ('David', 28);  
INSERT INTO t1 (name, age) VALUES ('Eva', 32);  
INSERT INTO t1 (name, age) VALUES ('Frank', 29);
2. 创建第一个差异备份
bash 复制代码
#差异备份都是基于全备份的
xtrabackup --defaults-file=/etc/my.cnf \		#使用配置文件连接
	--backup \				
	--target-dir=/data/backup/inc1 \			#第一次差异备份目录
	--incremental-basedir=/data/backup/base  \	#全备份目录,在全目录的基础上备份新数据
	-uroot -p'你的密码' \
	--no-server-version-check			#   '\'代表换行,这是一条命令

显示completed OK! 就成功了,若是报错可以点击以下链接博客查询
mysql全备份,及各种报错详解

3. 数据库中再次添加一些数据
sql 复制代码
use test;
#再次插入一些记录
INSERT INTO t1 (name, age) VALUES ('Grace', 27);  
INSERT INTO t1 (name, age) VALUES ('Henry', 31);  
INSERT INTO t1 (name, age) VALUES ('Ivy', 24);  
INSERT INTO t1 (name, age) VALUES ('Jack', 33);


4. 创建第二个差异备份
bash 复制代码
#跟前一个差异备份唯一的区别就是换了一下备份目录
xtrabackup --defaults-file=/etc/my.cnf \			#使用配置文件连接
	--backup \
	--target-dir=/data/backup/inc2 \				# 第二次差异备份目录
	--incremental-basedir=/data/backup/base  \		# 全备份目录,在全备份的基础上备份新数据
	-uroot -p'你的密码' \
	--no-server-version-check						#   '\'代表换行,这是一条命令

五、模拟数据丢失,删库

bash 复制代码
 systemctl stop mysqld			\\停止mysql数据库

 rm -rf /var/lib/mysql/*		\\删除mysql下的所有数据
  #这时mysql数据库已经登不上了

六、准备备份数据

在恢复之前,你需要准备备份数据。跟增量备份不同的是,不需要准备所有的备份,只需要准备第一次的全备份和最后一次差异备份即可。

bash 复制代码
#准备全备份数据
 xtrabackup --defaults-file=/etc/my.cnf \	#使用配置文件连接
 --prepare --apply-log-only \				#准备备份,只第一次使用 --apply-log-only
 --target-dir=/data/backup/base \			#全备份目录
 --no-server-version-check					#不检查版本信息
bash 复制代码
#在全备份数据的基础上准备差异备份数据
xtrabackup --defaults-file=/etc/my.cnf \		#使用配置文件连接
--prepare  
--target-dir=/data/backup/base \				#全备份目录
--incremental-basedir=/data/backup/inc2   \		#最后一次差异备份
--no-server-version-check						#不检查服务版本

七、恢复数据

bash 复制代码
#恢复数据
xtrabackup --defaults-file=/etc/my.cnf \		#使用配置文件连接
--copy-back \									#恢复数据
--target-dir=/data/backup/base \				#全备份目,此时此目录数据是所有数据
--no-server-version-check						

此时所有数据就都恢复了

bash 复制代码
#将恢复的数据给上mysql用户权限
chown -R mysql.mysql /var/lib/mysql
#重启mysql
 systemctl restart mysqld
#登录mysql
mysql -uroot -p'你的密码';
#查看所有数据库
show databases;

若是中途遇到一些无法解决的问题以下链接可能有解决方式
centos系统mysql数据库完全备份与恢复,以及各种报错解决方案

回到顶层

相关推荐
inquisiter6 分钟前
UEFI镜像结构布局
linux·spring
Allen Bright20 分钟前
【MySQL基础-20】MySQL条件函数全面解析:提升查询逻辑的利器
数据库·mysql
孤独得猿21 分钟前
Qt常用控件第一部分
服务器·开发语言·qt
不爱吃鱼的猫-37 分钟前
Node.js 安装与配置全攻略:从入门到高效开发
服务器·node.js
Justice link1 小时前
企业级NoSql数据库Redis集群
数据库·redis·缓存
爱的叹息1 小时前
主流数据库的存储引擎/存储机制的详细对比分析,涵盖关系型数据库、NoSQL数据库和分布式数据库
数据库·分布式·nosql
Linux运维老纪1 小时前
运维之 Centos7 防火墙(CentOS 7 Firewall for Operations and Maintenance)
linux·安全·centos·云计算·运维开发·火绒
斯普信专业组1 小时前
Ceph异地数据同步之-RBD异地同步复制(下)
linux·服务器·ceph
counsellor1 小时前
CentOS 7安装hyperscan
linux·centos·hyperscan
电星托马斯1 小时前
Linux系统CentOS 6.3安装图文详解
linux·运维·服务器·程序人生·centos