做网站哪便宜,可以做点赞的网站赚钱,做网站租服务器,企查查入口网页版#x1f4ab;《博主介绍》#xff1a;✨又是一天没白过#xff0c;我是奈斯#xff0c;DBA一名✨ #x1f4ab;《擅长领域》#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux#xff0c;也在扩展大数据方向的知识面✌️… 《博主介绍》✨又是一天没白过我是奈斯DBA一名✨ 《擅长领域》✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux也在扩展大数据方向的知识面✌️ 大佬们都喜欢静静的看文章并且也会默默的点赞收藏加关注 今天作为PXB系列的第三篇这篇文章其实计划是在上周写的奈何工作上的事情过于繁忙就迟迟一直抽不出身来专注写作不过正所谓“好饭不怕晚”今天难得下午有时间来兑现我的承诺将这篇期待已久的文章呈现在大家面前如标题所示今天带来的是——Percona XtraBackup标准化全库完整备份策略。 删过库跑过路的小伙伴都知道有备份是多么的重要全库备份将作为最后的恢复手段。不是执行一个xtrabackup备份命令就完事了xtrabackup备份需要备份哪些内容xtrabackup输出的备份片名称应该怎么命名这些都是非常有讲究的不能执行了一个全库备份命令生成的备份没有命名而是xtrabackup自己内部命名的这让一个刚上手的小伙伴会感觉的很蒙蔽不知道应该从那个备份开始恢复。所以今天就带着这些疑问开始今天的内容吧。 用一篇文章是不能将Percona XtraBackup工具讲明白的所以我将理论、命令、备份策略、异机恢复、使用场景等分成五篇去介绍即使分为五篇也有部分内容没有涵盖到但是这五篇文章都是精华掌握了之后就可以轻松应对Percona XtraBackup工具的相关日常工作了五篇文章的内容分别如下
第一篇Percona XtraBackup物理备份工具的基础理论概述第二篇Percona XtraBackup工具备份指南常用备份命令详解与实践当前篇第三篇Percona XtraBackup标准化全库完整备份策略第四篇Percona XtraBackup全量mysqlbinlog增量完成异机恢复基于全库恢复 or 基于时间点恢复第五篇物理克隆数据clone插件、逻辑备份工具mysqldump/mysqlpump和物理备份工具Percona XtraBackup这三种的区别和各自的使用场景总汇 xtrabackup备份应该哪些内容
备份内容一参数文件。MySQL启动的第一步就是读取参数文件中的内容备份他有多重要那么就不言而喻了。备份内容二数据库对象、共享表空间ibdata、临时表空间ibtmp、undo文件。在MySQL中没有控制文件这个概念所以读取完参数文件后就开始打开数据库对象、共享表空间ibdata、临时表空间ibtmp、undo文件。备份他有多重要那么就不言而喻了。备份内容三二进制日志。二进制日志记录mysql所有的DDL和DML(除了数据查询语句select语句事件。用来记录数据库中发生的修改情况数据的修改、表的创建及修改等。它既可以记录涉及修改的SQL也可以记录数据修改的行变化记录同时也记录了执行时间。类似于oracle的归档日志二进制有可能会被重做日志替代自己的猜测哦。备份他有多重要那么就不言而喻了
上面我说了三个重要所以xtrabackup备份少了那一个都不行滴 xtrabackup全库备份脚本包括数据文件数据库对象、共享表空间ibdata、临时表空间ibtmp、undo文件、参数文件
Datedate %Y%m%d
Begindate %Y-%m-%d %H:%M:%S
Port3306# 实例压缩备份恢复时需要借助qpress-11-linux-x64.tar解压缩工具备份时不需要
/mysql/app/mysql/bin/xtrabackup/bin/xtrabackup --defaults-file/mysql/data/3306/my.cnf --socket/mysql/data/3306/mysql.sock --userroot --password123456 --no-lock --backup --compress --compress-threads2 --target-dir/mysql/backup/full/xtrabackup_full_${Port}_${Date} --parallel2 2 /mysql/backup/logs/xtrabackup_full_${Port}_${Date}_err.log#copy备份参数文件
cp /mysql/data/3306/my.cnf /mysql/backup/full/backup-my.cnf_${Port}_${Date}find /mysql/backup/logs/ -name xtrabackup_*_${Port}_*_err.log -mtime 14 -exec rm -rf {} \;
find /mysql/backup/full/ -name xtrabackup_*_${Port}_* -mtime 14 -exec rm -rf {} \;
find /mysql/backup/full/ -name backup-my.cnf_${Port}_* -mtime 14 -exec rm -rf {} \; ### -mtime 14 -exec rm -rf {} \; 表示删除目录下14天之前被修改过的文件。写为mtine是因为默认输入ls -lll命令输出的内容中就是最后修改时间 (mtime)。 二进制日志备份脚本增量备份二进制日志增量只copy上次备份时没有的二进制日志
BinLogDir/mysql/log/3306/binlog ###二进制目录日志实际路径定义在my.cnf文件中
BinIndexFile/mysql/log/3306/binlog/itpuxdb-binlog.index ###二进制索引输出路径实际文件定义在my.cnf文件中
Datedate %Y%m%d
Port3306BinLogBakDir/mysql/backup/binlog ###备份二进制日志的路径
LogOutFile/mysql/backup/logs/backup_mysql_binlog_${Port}_${Date}.log ###日志信息
NextLogFiletail -n 1 $BinIndexFile
LogCounterwc -l $BinIndexFile |awk {print $1} ###统计索引二进制文件数量
NextNum0
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的
echo -------------------------------------------------------------------- $LogOutFile
echo binlog-backup---date %Y-%m-%d %H:%M:%S Bakup Start... $LogOutFile
for binfile in cat $BinIndexFile
dobasebasename $binfile#basename用于截取mysql-bin.00000*文件名去掉./mysql-bin.000005前面的./NextNumexpr $NextNum 1if [ $NextNum -eq $LogCounter ]thenecho $base skip! $LogOutFileelsedest$BinLogBakDir/$baseif(test -e $dest)#test -e用于检测目标文件是否存在存在就写exist!到$LogFile去thenecho $base exist! $LogOutFileelsecp $BinLogDir/$base $BinLogBakDirecho $base copying $LogOutFilefifi
done
echo binlog-backup---date %Y-%m-%d %H:%M:%S Bakup Complete! Next LogFile is: $NextLogFile $LogOutFilefind /mysql/backup/logs -name backup_mysql_binlog_${Port}_*.log -mtime 14 -exec rm -rf {} \;
find $BinLogBakDir -name *binlog.** -mtime 14 -exec rm -rf {} \; ###清理14天前的备份的binlog日志 案例一对MySQL实例进行xtrabackup全库备份。保留4份xtrabackup完整备份14天的二进制日志备份
一、数据备份的路径规划 [rootmysql1 ~]# mkdir -p /mysql/backup/full
[rootmysql1 ~]# mkdir -p /mysql/backup/logs
[rootmysql1 ~]# mkdir -p /mysql/backup/binlog
[rootmysql1 ~]# mkdir -p /mysql/backup/script
###fullmysqldump全备的数据、script备份脚本、binlog需要打开binlog日志功能、logs备份日志[rootmysql1 ~]# chown -R mysql:mysql /mysql/backup/ 二、xtrabackup全备脚本
[rootmysql1 ~]# cd script/
[rootmysql1 ~]# vi xtrabackup_full_3306.shDatedate %Y%m%d
Begindate %Y-%m-%d %H:%M:%S
Port3306# 实例压缩备份恢复时需要借助qpress-11-linux-x64.tar解压缩工具备份时不需要
/mysql/app/mysql/bin/xtrabackup/bin/xtrabackup --defaults-file/mysql/data/3306/my.cnf --socket/mysql/data/3306/mysql.sock --userroot --password123456 --no-lock --backup --compress --compress-threads2 --target-dir/mysql/backup/full/xtrabackup_full_${Port}_${Date} --parallel2 2 /mysql/backup/logs/xtrabackup_full_${Port}_${Date}_err.log#copy备份参数文件
cp /mysql/data/3306/my.cnf /mysql/backup/full/backup-my.cnf_${Port}_${Date}find /mysql/backup/logs/ -name xtrabackup_*_${Port}_*_err.log -mtime 14 -exec rm -rf {} \;
find /mysql/backup/full/ -name xtrabackup_*_${Port}_* -mtime 14 -exec rm -rf {} \;
find /mysql/backup/full/ -name backup-my.cnf_${Port}_* -mtime 14 -exec rm -rf {} \; ### -mtime 14 -exec rm -rf {} \; 表示删除目录下14天之前被修改过的文件。写为mtine是因为默认输入ls -lll命令输出的内容中就是最后修改时间 (mtime)。
三、binlog日志增量脚本增量只copy上次备份时没有的二进制日志
[rootmysql1 ~]# cd script/
[rootmysql1 ~]# vi backup_mysql_binlog_3306.shBinLogDir/mysql/log/3306/binlog ###二进制目录日志实际路径定义在my.cnf文件中
BinIndexFile/mysql/log/3306/binlog/itpuxdb-binlog.index ###二进制索引输出路径实际文件定义在my.cnf文件中
Datedate %Y%m%d
Port3306BinLogBakDir/mysql/backup/binlog ###备份二进制日志的路径
LogOutFile/mysql/backup/logs/backup_mysql_binlog_${Port}_${Date}.log ###日志信息
NextLogFiletail -n 1 $BinIndexFile
LogCounterwc -l $BinIndexFile |awk {print $1} ###统计索引二进制文件数量
NextNum0
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的
echo -------------------------------------------------------------------- $LogOutFile
echo binlog-backup---date %Y-%m-%d %H:%M:%S Bakup Start... $LogOutFile
for binfile in cat $BinIndexFile
dobasebasename $binfile#basename用于截取mysql-bin.00000*文件名去掉./mysql-bin.000005前面的./NextNumexpr $NextNum 1if [ $NextNum -eq $LogCounter ]thenecho $base skip! $LogOutFileelsedest$BinLogBakDir/$baseif(test -e $dest)#test -e用于检测目标文件是否存在存在就写exist!到$LogFile去thenecho $base exist! $LogOutFileelsecp $BinLogDir/$base $BinLogBakDirecho $base copying $LogOutFilefifi
done
echo binlog-backup---date %Y-%m-%d %H:%M:%S Bakup Complete! Next LogFile is: $NextLogFile $LogOutFilefind /mysql/backup/logs -name backup_mysql_binlog_${Port}_*.log -mtime 14 -exec rm -rf {} \;
find $BinLogBakDir -name *binlog.** -mtime 14 -exec rm -rf {} \; ###清理14天前的备份的binlog日志
四、在root下添加全备脚本和binlog增量脚本的自动计划任务
[rootlf script]# chmod 775 /mysql/backup/script/*.sh --确保root用户有执行权限
[rootlf script]# crontab -e
#xtrabackup_3306_full
00 23 * * 1,5 /mysql/backup/script/xtrabackup_full_3306.sh ###每周一和周五执行一次全备保留4份#mysql_3306_binlog
00 02 * * * /mysql/backup/script/backup_mysql_binlog_3306.sh ###每天凌晨进行归档全备保留14天
五、Root下测试脚本可用性并查看日志 全备 [rootlf script]# /mysql/backup/script/xtrabackup_full_3306.sh
[rootlf logs]$ tail -2000f /mysql/backup/logs/xtrabackup_full_3306_20240710_err.log 增量 [rootmysql1 script]# /mysql/backup/script/backup_mysql_binlog_3306.sh
[rootmysql1 binlog]# tail -200f /mysql/backup/logs/backup_mysql_binlog_3306_20240710.log 关于PXB标准化全库完整备份策略到这里就算完成了淦了1个半小时目前也就不到7千字虽然字数不多但是对于需要通过xtrabackup做备份策略的小伙伴而言是非常有用的一篇文章当然备份策略也需要随着业务的发展而不断优化和调整打造出最适合业务的备份方案。 最后感谢每一位集帅的阅读和支持。如果在备份过程中遇到了任何问题或有任何宝贵的建议欢迎随时与我交流分享。