问题描述:运用xtrabackup进行mysql全备,mysql8之前使用的是innodbxtrabackup,mysql8之后开始使用xtrabackup,innobackupex把功能都集成到xtrabackup中。

脚本在备库上实现每周末零点进行全备,周一到周六凌晨一点进行增备!

这里下载地址很奇怪,为什么有的人就可以打开下载列表,我这里打开就是空的

下载地址:http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.8/source/

空的:

xtrabackup安装步骤,解压即用,我安装的是tar包,8.0.27高版本向下mysql8.0的兼容

全备脚本:

mysql_full_bakcup.sh

#一主两备集群,在从库上进行备份,如果从库同步失败,备份停止,备份用户还要用查看复制状态的权限
#!/bin/bash
# MySQL backup script
# Copyright (c) 2022 hzh
# Version: 1.0
# mkdir -pv /backup/{33306,backuplog,scripts}

date=`date +%F` #当前时间变量
backupDir=/backup/33306 #备份路径
target_dir=/backup/$date #全备路径变量
xtrDir=/root/percona-xtrabackup/bin/xtrabackup #xtrabackup启动环境变量
mysqlDir=/usr/local/mysql8/bin/mysql #mysql启动环境变量
backupLog=$backupDir/backuplog #备份日志目录
mysql_host=192.168.163.21 #备份host
mysql_port=33310 #端口
mysql_user=root #用户
mysql_password=123456 #密码
mysql_socket=/data/mysql10/db_dxpt10/mysql.sock #socket
mysql_cnf=/data/mysql10/db_dxpt10/conf/dxpt10.cnf #配置文件 show_slave_status=`"$mysqlDir" -S"$mysql_socket" -P"$mysql_port" -u"$mysql_user" -p"$mysql_password" -A -e 'show slave status\G;' 2>/dev/null` #获取slave状态
slave_sql_running_state=`echo "$show_slave_status" |grep Slave_SQL_Running_State |awk -F ': ' '{print $2}'` #Slave上SQL运行状态
ms_status=`echo "$show_slave_status" |grep Running: |awk -F ': ' '{if($2=="Yes"){sum += 1}}; END{print sum}'` #IO、SQL线程运行状态:2表示健康,!2表示不健康 if [ $ms_status -eq 2 ]; #检查mysql复制状态
then
echo =========================Run full backup beginning========================== >>$backupLog/backup_full_success.log 2>&1
$xtrDir --defaults-file=$mysql_cnf --user=$mysql_user --password=$mysql_password --socket=$mysql_socket --compress --compress-threads=2 --backup --target-dir=$target_dir >>$backupLog/backup_full_success.log 2>&1
echo =========================Run full backup finished successfully========================== >>$backupLog/backup_full_success.log 2>&1
#如果需要 发送邮件 else
echo =========================Error,the synchronization may fail. Locate the cause========================== >> $backupLog/backup_failed.log 2>&1
#如果需要 发送邮件
fi #删除两周前备份
#find $backupDir -maxdepth 1 -type d -mtime +14 -exec rm -Rf {} \; >>$backupLog/deleted_record.log  2>&1

增备脚本:

mysql_incremental_backup.sh

#一主两备集群,在从库上进行备份,如果从库同步失败,备份停止,备份用户还要用查看复制状态的权限
#!/bin/bash
# MySQL backup script
# Copyright (c) 2022 hzh
# Version: 1.0

date=`date +%F`
datenum=`date -d "1 days ago" +%F` #当前时间变量
cur_dateTime=$(date "+%Y-%m-%d %H:%M:%S")
backupDir=/backup/33306 #备份路径
target_dir=/backup/$date #全备路径变量
xtrDir=/root/percona-xtrabackup/bin/xtrabackup #xtrabackup启动环境变量
mysqlDir=/usr/local/mysql8/bin/mysql #mysql启动环境变量
backupLog=$backupDir/backuplog
mysql_host=192.168.163.21 #host
mysql_port=33310 #端口
mysql_user=root #用户
mysql_password=123456 #密码
mysql_socket=/data/mysql10/db_dxpt10/mysql.sock #socket
mysql_cnf=/data/mysql10/db_dxpt10/conf/dxpt10.cnf #配置文件
show_slave_status=`"$mysqlDir" -S"$mysql_socket" -P"$mysql_port" -u"$mysql_user" -p"$mysql_password" -A -e 'show slave status\G;' 2>/dev/null` #获取slave状态
slave_sql_running_state=`echo "$show_slave_status" |grep Slave_SQL_Running_State |awk -F ': ' '{print $2}'` #Slave上SQL运行状态
ms_status=`echo "$show_slave_status" |grep Running: |awk -F ': ' '{if($2=="Yes"){sum += 1}}; END{print sum}'` #IO、SQL线程运行状态:2表示健康,!2表示不健康 if [ $ms_status -eq 2 ]; #检查mysql复制状态
then
echo -e $cur_dateTime >>$backupLog/backup_incr_success.log 2>&1
echo =========================Run incremental backup beginning========================== >>$backupLog/backup_incr_success.log 2>&1
$xtrDir --defaults-file=$mysql_cnf --port=$mysql_port --user=$mysql_user --password=$mysql_password --socket=$mysql_socket --compress --compress-threads=2 --backup --target-dir=$target_dir --incremental-basedir=$backupDir/$datenum >> $backupLog/backup_incr_success.log 2>&1
echo -e $cur_dateTime >>$backupLog/backup_incr_success.log 2>&1
echo =========================Run incremental backup finished successfully========================== >>$backupLog/backup_incr_success.log 2>&1
#发送邮件 else
echo -e $cur_dateTime >>$backupLog/backup_incr_success.log 2>&1
echo =========================Error,the synchronization may fail. Locate the cause========================== >> $backupLog/backup_incr_failed.log 2>&1
#发送邮件
fi #删除两周前备份
#find $backupDir -maxdepth 1 -type d -mtime +14 -exec rm -Rf {} \; >>$backupLog/deleted_record.log  2>&1

配合定时任务使用

0 0 * * 7 sh /backup/scripts/mysql_full_backup.sh
0 1 * * 1-6 sh /backup/scripts/mysql_incremental_backup.sh

以上脚本都是使用root用户进行备份,有些生产限制这个,要换成专门的备份用户,但是我这边测试使用备份用户全备出来的内容跟root全备的内容不一样,要不然增备的时候出岔子,所以使用了root用户代替

创建备份用户
create user backuper@'localhost' identified by 'i6+MgKFN';
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT,SUPER ON *.* TO 'backuper'@'localhost';
grant create,insert,select on percona_schema.* to 'backuper'@'localhost';
flush privileges;

脚本中还是用的是qp压缩方式,如果想要解压备份,还需要安装qp解压工具

下载链接:http://www.quicklz.com/qpress-11-source.zip

--解压.qb文件
[root@ ~]# cd /backup/33306/备份目录
[root@ ~]# for qp in `find . -iname "*\.qp"`; do /usr/local/bin/qpress -d $qp $(dirname $qp) && rm $qp; done

文中细节,欢迎指正!

xtrabackup+MySQL8全备+增备脚本的更多相关文章

  1. innobackupex 全备、增备脚本

    全备脚本:innobackupex --defaults-file=/etc/my.cnf --user root --password mypasswd /mydata/fullbak/ 增备脚本: ...

  2. PerconaXtraBackup --全备增备prepare restore

    Xtrabackup Xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下:  • xtrabackup只能备份innodb和xtradb引擎表,而不 ...

  3. innobackupex 单脚本循环7天一全备6增备脚本更新

    #!/bin/bash #日期转为天数 function date2days { echo "$*" | awk '{ z=-$)/); y=$+-z; m=$+*z-; j=*m ...

  4. Mongodb全备+增备+oplog恢复误删数据

    此时测试表中有7条数据,做个全备. 全备: mongodump --host=192.168.43.43 --port=37017 --oplog --out=/opt/mongo/fullbacku ...

  5. Innobackupex MySQL 全备、增备及恢复

    简介: 在这之前都是通过 mysqldump 来备份数据库的,由于是逻辑备份,所以采用这种备份方式数据是很安全的,跨平台.版本都很容易. 凡事有利必有弊,逻辑备份在你数据库比较大时,备份.恢复数据所耗 ...

  6. oracle 备份恢复篇(二)---rman 增备恢复--不完全恢复

    一,环境准备 全备脚本: export TMP=/tmp export TMPDIR=$TMP export ORACLE_BASE=/u01 export ORACLE_SID=prod expor ...

  7. Percona XtraBackup 实现全备&增量备份与恢复【转】

    percona-xtrabackup主要是有两个工具,其中一个是xtrabackup,一个是innobackupex,后者是前者封装后的一个脚本.在针对MySQL的物理备份工具中,大概是最流行也是最强 ...

  8. xtrabackup备份和恢复数据脚本

    该脚本用于备份和恢复MySQL数据库. 总结xtrabackup备份的两个坑: 1.在恢复数据的过程中,如果中途出错,则数据将会被破坏,后续很难再恢复. 2.在恢复过程中,如果版本过低,在准备全量数据 ...

  9. 利用XtraBackup给MYSQL热备(基于数据文件)

    利用XtraBackup给MYSQL热备(基于数据文件) By JRoBot on 2013 年 11 月 26 日 | Leave a response 利用XtraBackup给MYSQL热备(基 ...

  10. Oracle冷备和热备脚本

    Oracle冷备和热备脚本 冷备脚本: set feedback off set heading off set verify  off set trimspool off set echo off ...

随机推荐

  1. JAVA面经-基础篇-线程

    1.创建线程有哪几种方式?   创建线程有3种方式,分别是继承Thread类.实现Runnable类.实现Callable类.   继承Thread类的步骤:     1. 定义Thread类的子类, ...

  2. Buuoj 被嗅探的流量

    Buuoj 被嗅探的流量 这个点进去之后看到了很像flag的内容 这个好像就是 也可以右键Analyse→Follow→TCP Stream或HTTP stream

  3. RKO队——冲刺随笔(4)

    这个作业属于哪个课程 至诚软工实践F班 这个作业要求在哪里 第五次团队作业:项目冲刺 这个作业的目标 记录冲刺计划.要求包括当天会议照片.会议内容以及项目燃尽图(项目进度) 1.昨日进展 对小程序的的 ...

  4. 用bat文件,自动进入cmd虚拟环境

    L:cd L:\myenv\Scriptscmd /K activate.bat  这行,这样写,cmd窗口会继续保留,按任意键也不会关闭. 这个问题网上大部分说法是在批处理里面加上 cmd /k, ...

  5. B树、B+树详解

    B树.B+树详解   B树 前言 首先,为什么要总结B树.B+树的知识呢?最近在学习数据库索引调优相关知识,数据库系统普遍采用B-/+Tree作为索引结构(例如mysql的InnoDB引擎使用的B+树 ...

  6. redis缓存lua脚本过多导致内存占用很多问题

    现象 生产某集群各节点已使用内存比较大,在清理了大量业务无用数据后,节点已使用内存却未下降. 排查与分析 通过info memory命令查看,内存碎片率略高,但是对某个主节点新添加的从节点内存使用依然 ...

  7. 转载·Pycharm Pro“This license 56ZS5PQ1RF has been cancelled” 激活码失效处理记录

    今天打开许久没用的Pycharm提示激活码过期,激活提示:"This license 56ZS5PQ1RF has been cancelled" 解决方法如下 首先修改hosts ...

  8. 1004.Django模板标签

    一.常用标签 模板标签 标签在渲染的过程中提供任意的逻辑.这个定义是刻意模糊的.例如,一个标签可以输出内容,作为控制结构,例如 "if"语句或"for"循环从数 ...

  9. idea 切换database数据库方言

    在适配各种国产数据库时常常遇到存在数据库方言的情况,例如openGauss支持oracle兼容模式.. 在这种情况下,就需要在idea里对方言进行切换,否则无法执行oracle语法的sql. 1.连接 ...

  10. flask动态csv接口——编码问题

    @xxx_blueprint.route("/file", methods=["GET"]) def group_trend(): def generate() ...