【percona-xtrabackup】数据库物理备份整库、单库单表/恢复整库、单库单表

数据版本匹配

下载地址

www.percona.com/downloads/P...

数据库版本 xtrabackup版本 服务器版本
5.7.33-0ubuntu0.16.04.1 percona-xtrabackup-2.4.29 Ubuntu 16.04.7 LTS
mysql 复制代码
-- 下载对应数据库
apt-get update
apt-get install mysql-server=5.7.33-0ubuntu0.16.04.1


-- 创建用户
CREATE USER 'backup_user'@'%' IDENTIFIED BY '123456';
-- 给指定用户赋值指定权限、并只能内网本地登录、将localhost设置%就能外网登录
GRANT RELOAD, LOCK TABLES,PROCESS,REPLICATION CLIENT ON *.* TO 'backup_user'@'%';
-- 刷新权限
FLUSH PRIVILEGES;

整库备份/恢复

第一步(备份整数据)

shell 复制代码
/usr/local/percona-xtrabackup-2.4.29/bin/innobackupex \
--user=root \
--password=123456 \
--no-timestamp \
/data/backups/fullAll
shell 复制代码
--user=root    	        # 账号
--password=123456   	# 密码
--no-timestamp            # 指定保存文件位置
/data/backups/fullAll 	# 指定备份文件夹位置

第二步(数据恢复)

shell 复制代码
/usr/local/percona-xtrabackup-2.4.29/bin/innobackupex \
--defaults-file=/etc/mysql/my.cnf \
--copy-back /data/backups/fullAll
shell 复制代码
--defaults-file=/etc/mysql/my.cnf 	# 指定数据的配置、可以使用find / -name my.cnf去查找文件位置
--copy-back /data/backups/fullAll		# 备份数据位置

因为读取了my.cnf 配置然后会找到mysql的数据存储位置、比如我的数据库存储位置在/var/lib/mysql、我就必须把/var/lib/mysql这个位置删了、恢复命令才能执行!

执行成功后/var/lib/mysql文件夹会出来、然后他的权限和作用域都是root的、要把他设置成mysql

shell 复制代码
chown -R mysql:mysql /var/lib/mysql		# 设置文件夹权限
chown -R mysql:mysql /var/lib/mysql/*		# 设置文件夹里面的所有文件的权限

注意:如果mysql不是停止状态下恢复到/var/lib/mysql后其他库可能展示不出来、需要重启mysql命令systemctl restart mysql

备份单库单表

第一步

备份指定库中指定表、文件保存位置 /data/backups/test07

shell 复制代码
/usr/local/percona-xtrabackup-2.4.29/bin/innobackupex \
--user=root \
--password=123456 \
--tables=test05.user1,test05.user2 \
--no-timestamp \
/data/backups/test07
shell 复制代码
--user=root                            # 账号
--password=123456   		     # 账号
--tables=test05.user1,test05.user2     # 指定库.表
--no-timestamp 			     # 不自动创建备份文件夹
/data/backups/test07                   # 指定备份文件路径

第二步

sh 复制代码
/usr/local/percona-xtrabackup-2.4.29/bin/xtrabackup  \
--prepare \
--export \
--target-dir=/data/backups/test06
shell 复制代码
--prepare 													# 进行还原操作
--export 														# 还原导出的表创建必要的文件
--target-dir=/data/backups/test05		# 还原备份的数据文件夹位置

第一步和第二步、可以理解为在保存的备份数据。

第三步

假如要将备份的数据迁移到另一台服务器上的数据库中。

3.1 在恢复的数据库中先创建好一个数据、并创建在备份文件夹中存在的表、简单来说就是先把库和表结构先创建好。==表结构要和备份的数据一致==

3.2 在数据库中执行这个、会删除ibd文件、如果要恢复多表就再次执行指定库.表。

mysql 复制代码
ALTER TABLE 数据库.表 DISCARD TABLESPACE;

3.3 将备份文件夹中的数据信息复制一份给到mysql存储数据的文件夹中

shell 复制代码
cp /data/backups/test05/user.* /var/lib/mysql/test/

3.4 复制的文件是root组、修改成mysql组

shell 复制代码
chown -R mysql:mysql /var/lib/mysql;
chown -R mysql:mysql /var/lib/mysql/*;

3.5 导入表空间信息到mysql

mysql 复制代码
# 执行前必须要将复制过去的文件设置成mysql组
ALTER TABLE 数据库.表 IMPORT TABLESPACE;

备份其他操作

流式tar

备份时将备份文件压缩成tar.gz格式

shell 复制代码
/usr/local/percona-xtrabackup-2.4.29/bin/innobackupex \
--user=root \
--password=123456 \
--databases=test06 \
--stream=tar /data/backups/ |gzip -> /data/backups/test061.tar.gz


#创建文件夹并写入到创建的文件夹中
mkdir test06 && tar -zxvf test061.tar.gz -C test06
shell 复制代码
--user=root    		            # 账号
--password=123456   	            # 密码
--databases=test06	            # 数据库名
	       # 重新设置临时文件	    # 真实保存目标位置		
--stream=tar /data/backups/ |gzip -> /data/backups/test061.tar.gz 
相关推荐
用户67570498850224 分钟前
告别数据库瓶颈!用这个技巧让你的程序跑得飞快!
后端
Guheyunyi26 分钟前
监测预警系统重塑隧道安全新范式
大数据·运维·人工智能·科技·安全
千|寻42 分钟前
【画江湖】langchain4j - Java1.8下spring boot集成ollama调用本地大模型之问道系列(第一问)
java·spring boot·后端·langchain
知更鸟呆呆1 小时前
【Linux操作系统】基础开发工具(yum、vim、gcc/g++)
linux·运维·vim
程序员岳焱1 小时前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql
龚思凯1 小时前
Node.js 模块导入语法变革全解析
后端·node.js
天行健的回响1 小时前
枚举在实际开发中的使用小Tips
后端
wuhunyu1 小时前
基于 langchain4j 的简易 RAG
后端
techzhi1 小时前
SeaweedFS S3 Spring Boot Starter
java·spring boot·后端