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数据库完全备份与恢复,以及各种报错解决方案

回到顶层

相关推荐
cherub.5 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
南城花随雪。10 分钟前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了11 分钟前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度12 分钟前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮15 分钟前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
梅见十柒29 分钟前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
Koi慢热32 分钟前
路由基础(全)
linux·网络·网络协议·安全
传而习乎42 分钟前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
soulteary44 分钟前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习