使用xtrabackup实现mysql定时热备份
https://www.518cn.com 发布时间:2025-03-18 22:34 作者:网络
摘要:mysql数据库使用xtrabackup定时热备份,实现shell脚本,使用cron表达式定时调度,备份文件异地保存
1、原理:方案选型 mysqldump是逻辑备份解决方案,备份恢复速度慢,工具获取方便,数据量少推荐 主要用途是导出数据 xtrababckup是物理热备份,速度快,适合大数据量 xtrababckup支持innodb和MyISAM存储引擎,支持集成shell脚本,支持管道传输 InnoDB支持完整和增量备份,不上只读锁 MyISAM只有全量备份,会上只读锁,备份期间不可写 xtrababckup版本号:percona-xtrabackup-24对应5.*版本;percona-xtrabackup-80对应8.*版本 增量备份原理:使用page的lsn号,如图7,8是lsn变化的page
xtrabackup备份原理-时序图表示
备份命令: xbstream :流式压缩,节省IO,tar压缩要先创建文件,流式压缩可以边生成边压缩 innobackupex :总命令,包含其它命令,对MYISAM存储引擎,只能全量备份;对innodb引擎可以做增量备份,只存在于2.4版本,8版本已取消 4、xtrabackup做全量热备份 #普通热备份 innobackupex --defaults-file=/etc/my.cnf --host=*.*.*.* --user=* --password=* --port=3306 /home/mysqlbackup #流式备份(打开流式IO) innobackupex --defaults-file=/etc/my.cnf --host=*.*.*.* --user=* --password=* --port=3306 --no-timestamp --stream=xbstream -> /home/mysqlbackup/backup.xbstream #带压缩流式备份 innobackupex --defaults-file=/etc/my.cnf --host=*.*.*.* --user=* --password=* --port=3306 --compress --compress-threads=10 --no-timestamp --stream=xbstream -> /home/mysqlbackup/backup.xbstream 5、使用corn表达式 shell定时备份 5.1 创建shell脚本 cd /home/mysqlbackup touch shell/bkmysql.sh #添加shell语句 #mysql用户名与密码 BACKUP_NAME=* BACKUP_PW=* #数据库服务器ip BACKUP_HOST=* #设置备份文件所在的目录 BACKUP_DIR=/home/mysqlbackup #mysql配置文件路径 MYSQL_CNF=/etc/my.cnf #备份scp远程保存ip remote_host=*.*.*.* #备份文件集团侧保存路径 remote_path=/home/mysql/backupfile #全量热备,大约10秒 time=$(date " %Y-%m-%d %H:%M:%S") echo "执行全量热备份" ${time} filename="backup-$(date %Y%m%d).xbstream" innobackupex --defaults-file=$MYSQL_CNF --host=$BACKUP_HOST --user=$BACKUP_NAME --password=$BACKUP_PW --port=3306 --compress --compress-threads=10 --no-timestamp --stream=xbstream -> $BACKUP_DIR/$filename #备份文件传输到文件服务器 scp -r /home/mysqlbackup/$filename root@$remote_host:$remote_path echo "文件传输完毕" #保留最近三天的文件,其余的将被删除 find $BACKUP_DIR -type f -name "*.xbstream" -mtime 3 -exec rm -f {} ; echo "历史数据清理完毕" 5.2 #提升权限,授权文件可执行 chmod -R 777 bkmysql.sh 5.3 创建日志目录 mkdir /home/mysqlbackup/log 5.3 编辑crontab表达式 crontab -e #添加定时任务,每天2点十分执行shell脚本 10 2 * * * /home/mysqlbackup/shell/bkmysql.sh > /home/mysqlbackup/log/backup.log 2>&1 6、SSH免秘登录配置 ssh localhost --产生.ssh的隐藏目录 在每台机器上执行:ssh-keygen -t rsa --产生密钥对(一路回车) ssh-copy-id -i ~/.ssh/id_rsa.pub 远程机器ip 免秘登录测试通过 7、恢复测试(mysql只能冷还原) 7.1 停止mysql数据服务,清空数据目录包括表分区目录 systemctl stop mysqld rm -rf /home/cnbm/mysql/data 7.2 将流式备份的压缩文件还原到临时目录 mkdir /home/temp #还原流式文件 xbstream -x < /home/mysql/backupfile/backup-20241212.xbstream --decompress -C /home/temp (xbstream -x < /home/cnbm/mysqlbackup/backup-20241212.xbstream -C /home/temp) #解压缩还原文件 innobackupex --decompress /home/temp 7.3 清理redo日志并恢复 innobackupex --apply-log /home/backup/2018-09-12_10-53-51 #恢复数据库 innobackupex --copy-back --defaults-file=/etc/my.cnf /home/temp 7.4 数据目录修改所有者后重启mysql chown -R mysql:mysql /home/cnbm/mysql/data systeml start mysqld 8.binglog配置(在备份结束至恢复数据这段时间,可使用binlog日志恢复) 8.1.创建binglog日志目录,必须修改所有者权限,否则mysql启动会报错 mkdir /home/cnbm/mysql/binlog/ chown -R mysql.mysql /home/cnbm/mysql/binlog/ 8.2./etc/my.cnf文件添加binlog参数,打开binlog开关,指定binglog文件存储路径,修改默认存储格式 binlog_format=MIXED log_bin=mysql-bin server-id=1 8.3 相关sql #显示所有binlog日志名称和大小(索引文件信息) show binary logs #是否启用binlog SHOW VARIABLES LIKE 'log_bin'; #binlog日志格式 show global variables like '%binlog_format%'; #查询binlog文件位置 SHOW VARIABLES LIKE 'log_bin_basename'; #查询binlog文件内容 show BINLOG EVENTS in 'mysql-bin.000001'


结论:高效热备份使用xtrabackup 2、安装xtrabackup 方式一:在线安装 安装包管理器 yum install https://repo.percona.com/yum/percona-release-1.0-20.noarch.rpm yum install percona-xtrabackup-24 yum install -y percona-xtrabackup-24.x86_64 方式二:编译安装 从 https://www.percona.com/downloads下载二进制安装包percona-xtrabackup-2.4.29-Linux-x86_64.glibc2.17.tar.gz,龙蜥操作系统选择generic
创建目录 /home/xtrabackup 二进制安装包上传此目录 2.1 解压缩 tar -zxvf percona-xtrabackup-2.4.29-Linux-x86_64.glibc2.17.tar.gz 2.2 移动目录 mv percona-xtrabackup-2.4.29-Linux-x86_64.glibc2.17 /usr/local/xtrabackup-2.4.29 2.3 配置软链接 ln -sf /usr/local/xtrabackup-2.4.29/bin/* /usr/bin/ 2.4 查看版本号 xtrabackup -v 3、xtrabackup命令说明

相关文章
- 优化GreatSQL日志文件空间占用 GreatSQL对于日志文件磁盘空间占用,做了一些优化,对于binlog、...03-18
- "数据约束条件" date: 2022-11-24T21:24:31 08:00 draft: false MySQL字段约束条件 无符号, 零填充...03-18
【GreatSQL优化器-16】INDEX_SKIP_SCAN
【GreatSQL优化器-16】INDEX_SKIP_SCAN 一、INDEX_SKIP_SCAN介绍 GreatSQL 优化器的索引跳跃扫描(Index Ski...03-18- MySQL 是一个非常流行的开源关系数据库管理系统,在各种应用场景中都得到了广泛的应用。随...03-18
- 🤖 DB-GPT 是一个开源的 AI 原生数据应用程序开发框架,具有 AWEL(代理工作流表达式语...03-18
GreatSQL 8.0.32-27 GA (2025-3-10)
GreatSQL 8.0.32-27 GA (2025-3-10) 版本信息 发布时间:2025年3月10日 版本号:8.0.32-27, Revision aa66a38591...03-18- 6. MySQL 索引的数据结构(详细说明) @目录6. MySQL 索引的数据结构(详细说明)1. 为什么使用索引2...03-18
- @Override @Transactional(rollbackFor = Exception.class) public void batchInsertDeviceData(IotMsgNotifyData iotMsgNotifyDa...03-18
- 个人Qt项目总结——数据库查询断言问题 问题: 当我使用MySQL数据库的查询操作时, 如果查询...03-18
- MySQL 是一种广泛使用的关系数据库管理系统,MySQL 8 是其最新的主要版本,结合了出色的性能和...03-18
最新评论