Percona XtraBackup备份

1.PXB备份与恢复MySQL数据库

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

(1)Xtrabackup中主要包含两个工具

xtrabackup:是用于热备份innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力

(2)常用选项

常用选项
--host 指定主机
--user 指定用户名
--password 指定密码
--port 指定端口
--database 指定数据库
--incremental 创建增量备份
--incremental-basedir 指定包含完整备份的目录
--incremental-dir 指定包含增量备份的目录
--apply-log 对备份进行预处理操作

(3)创建一个最小权限的备份用户进行备份

create user 'bkuser'@'localhost' identified by 'bk123456';     #创建用户
flush privileges;    #刷新授权表
revoke all privileges,grant option  from 'bkuser'@'localhost';    #回收此用户所有权限
flush privileges;    #刷新授权表
grant reload,lock tables,replication client,process ON *.* TO 'bkuser'@'localhost';     #授权刷新、锁表、查看服务器状态、进程的权限
flush privileges;    #刷新授权表

(4)备份所有数据库,在备份目录里自动生成日期命名的文件夹

mkdir -p /data/backup/
innobackupex --defaults-file=/etc/my.cnf --user=bkuser --password=bk123456 --socket=/usr/local/mysql/mysql.sock /data/backup/
#innobackupex会在指定存放数据的目录下用当前时间创建一个目录,所有生成的备份文件都会这个时间目录下

(5)备份所有数据库,指定目录的名称

/data/backup/full

innobackupex --defaults-file=/etc/my.cnf --user=bkuser --password=bk123456 --socket=/usr/local/mysql/mysql.sock --no-timestamp /data/backup/full/

(6)将所有数据库备份并压缩打包

mkdir /data/backup/temp

innobackupex --defaults-file=/etc/my.cnf --user=bkuser --password=bk123456 --socket=/usr/local/mysql/mysql.sock --stream=tar --no-timestamp /data/backup/temp | gzip > /data/backup/temp/backup.tar.gz

(7)备份所有数据库到远程主机并压缩

ssh-keygen 
ssh-copy-id 192.168.80.14
innobackupex --defaults-file=/etc/my.cnf --user=bkuser --password=bk123456 --socket=/usr/local/mysql/mysql.sock --stream=tar /data/backup | ssh root@192.168.80.14 "gzip > /opt/backup.tar.gz"

(8)将指定的数据库备份

innobackupex --defaults-file=/etc/my.cnf --user=bkuser --password=bk123456 --socket=/usr/local/mysql/mysql.sock --databases="mydb" --no-timestamp /data/backup/mydb_database

(9)将不同库下的不同表进行备份

innobackupex --defaults-file=/etc/my.cnf --user=bkuser --password=bk123456 --socket=/usr/local/mysql/mysql.sock --databases="mydb01.test01 mydb02.test02" --no-timestamp  /data/backup/mydb_test_tables
#将mydb01库下的test01表和mydb02库下的test02表

(10)备份某一个库下以某个字母开头的表

innobackupex --defaults-file=/etc/my.cnf --user=bkuser --password=bk123456 --socket=/usr/local/mysql/mysql.sock --include="mydb.xy" --no-timestamp  /data/backup/mydb_xy_tables
#--include: 使用匹配正则表达式匹配表名,上述命令表示备份mydb库下的xy开头的表

(11)现增量备份

innobackupex --defaults-file=/etc/my.cnf --user=bkuser --password=bk123456 --socket=/usr/local/mysql/mysql.sock --no-timestamp /data/backup/full/

innobackupex --defaults-file=/etc/my.cnf --user=bkuser --password=bk123456 --socket=/usr/local/mysql/mysql.sock --no-timestamp --incremental /data/backup/increment --incremental-basedir=/data/backup/full
#--incremental:增量备份目录
#--incremental-basedir:全量备份目录,此为增量备份的根基目录

2.恢复

(1)完全恢复

systemctl stop mysqld
mv /usr/local/mysql/data  /usr/local/mysql/data_bak1

注:恢复时,mysql服务器需要关闭,而且数据目录必须是空的,innobackupex –copy-back 不会覆盖已存在的文件

  • 先利用 –apply-log 参数对数据进行预备操作,将回滚未提交的事务或同步已经提交的事务至数据文件使数据文件处于一致性状态
innobackupex --apply-log /data/backup/full/

cat /data/backup/full/xtrabackup_checkpoints      #确保 backup-type 为 full-prepared 的状态

#恢复数据
innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/full/      #--copy-back 数据恢复时将指定目录下的备份数据文件拷贝到MySQL服务器的datadir

chown -R mysql:mysql /usr/local/mysql/data
systemctl start mysqld

(2)增量恢复

systemctl stop mysqld
mv /usr/local/mysql/data  /usr/local/mysql/data_bak2

#把增量备份数据合并到全量备份数据上
innobackupex --apply-log --redo-only /data/backup/full/
innobackupex --apply-log --redo-only /data/backup/full/  --incremental-dir=/data/backup/increment/

#对数据进行预备操作,使数据文件完全一致
innobackupex --apply-log /data/backup/full/

#恢复数据
innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/full/

chown -R mysql:mysql /usr/local/mysql/data
systemctl start mysqld

3.xtrabackup 备份数据库

xtrabackup --backup --user=bkuser --password=bk123456 --port=3306 --target-dir=/data/backup/full/

4.xtrabackup 恢复数据库

systemctl stop mysqld
mv /usr/local/mysql/data  /usr/local/mysql/data_bak3

xtrabackup --prepare --target-dir=/data/backup/full/

xtrabackup --copy-back --target-dir=/data/backup/full/

chown -R mysql:mysql /usr/local/mysql/data
systemctl start mysqld

posted @   无敌小鲁班  阅读(295)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示