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

374 阅读3分钟

数据版本匹配

下载地址

www.percona.com/downloads/P…

数据库版本xtrabackup版本服务器版本
5.7.33-0ubuntu0.16.04.1percona-xtrabackup-2.4.29Ubuntu 16.04.7 LTS
-- 下载对应数据库
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;

整库备份/恢复

第一步(备份整数据)

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

第二步(数据恢复)

/usr/local/percona-xtrabackup-2.4.29/bin/innobackupex \
--defaults-file=/etc/mysql/my.cnf \
--copy-back /data/backups/fullAll
--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

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

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

第二步

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

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

第三步

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

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

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

ALTER TABLE 数据库.表 DISCARD TABLESPACE;

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

cp /data/backups/test05/user.* /var/lib/mysql/test/

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

chown -R mysql:mysql /var/lib/mysql;
chown -R mysql:mysql /var/lib/mysql/*;

3.5 导入表空间信息到mysql

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

备份其他操作

流式tar

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

/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
--user=root    		            # 账号
--password=123456   	            # 密码
--databases=test06	            # 数据库名
	       # 重新设置临时文件	    # 真实保存目标位置		
--stream=tar /data/backups/ |gzip -> /data/backups/test061.tar.gz