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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示