Xtrabackup + mysqlbinlog还原数据库

本文介绍了一种MySQL数据库恢复方案,具体包括使用XtraBackup恢复指定时间点的数据状态、利用mysqlbinlog工具精确恢复误删表前后的数据变更,以及整个过程中涉及的关键步骤和技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假如出现一种情况:由于误操作,比如说在2015年11月04日10:17分删除了kaopu中的一张表,我们需要的是恢复到误操作前的状态,然后跳过误操作的语句,再恢复后面操作的语句。

还原步骤分为:

  1. 备份当前mysql_binlog文件
  2. 使用XtraBackup恢复到2015年11月04日10:10分的状态。
  3. 通过mysqlbinlog恢复到误删除之前的状态。
  4. 跳过误删除的语句,恢复到误删除之后的状态。

##准备工作 修改/etc/my.cnf文件,设置bind-address = 127.0.0.1,拒绝所有对数据库的外部操作。


[mysqld]
bind-address = 127.0.0.1

或者修改防火墙,拒绝访问3306端口。

然后重启mysql。

##XtraBackup恢复 XtraBackup数据库备份目录为:/niub/mysql_xtrabackup/base为全备目录,increment为增量备份目录,所有的增备都是基于全备的。

例:

当前全备目录为:/niub/mysql_xtrabackup/base/2015-11-02_17-10-04/

增备目录为:/niub/mysql_xtrabackup/increment/20151104/2015-11-04_10-10-01/

###还原XtraBackup备份 在全备上,使用—redo-only只做已提交事务,不回滚未提交事务


innobackupex --apply-log --redo-only /niub/mysql_xtrabackup/base/2015-11-02_17-10-04/

会出现以下结果:


innobackupex: completed OK!

###应用增量备份

innobackupex --apply-log --redo-only /niub/mysql_xtrabackup/base/2015-11-02_17-10-04/ --incremental-dir= /niub/mysql_xtrabackup/increment/20151104/2015-11-04_10-10-01/

###回滚未提交事务

当应用完所有增量备份的时候,就需要回滚所有为完成事务(如果最后一步加了 –redo-only就需要回滚未提交,不执行的话在服务启动阶段服务会处理未提交事务)。


innobackupex --apply-log /niub/mysql_xtrabackup/base/2015-11-02_17-10-04/

###还原备份 使用innobackupex –copy-back来还原备份

注:datadir必须是为空的,innobackupex –copy-back不会覆盖已存在的文件,还要注意,还原时需要先关闭服务,如果服务是启动的,那么就不能还原到datadir


innobackupex --copy-back /niub/mysql_xtrabackup/base/2015-11-02_17-10-04/

后需要修改文件的所有者和权限:


chown -R mysql:mysql /niub/mysqldata/*

###还原脚本

#!/bin/bash
db_data=/niub/mysqldata
base_dir=/niub/mysql_xtrabackup/base/2015-11-02_17-10-04
service mysql stop
rm -rf $db_data/*
innobackupex --copy-back $base_dir
chown -R mysql:mysql $db_data/*
service mysql start

##mysqlbinlog恢复

###查询Position信息

SHOW master STATUS;

输出结果


+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |  99      |              |                  |
+------------------+----------+--------------+------------------+

获得XtraBackup恢复后的Position值为:99

使用命令


mysqlbinlog mysql-bin.000001 –database=kaopu 

这个误操作的Position为:200,得出它前后操作的id分别为199和201

###恢复误操作之前的数据

mysqlbinlog --start-position="100" --stop-position="199" --database=kaopu | mysql -u root

###恢复误操作之后的数据

mysqlbinlog --start-position="201" --database=kaopu | mysql -u root

转载于:https://my.oschina.net/deepblue/blog/529380

做基本完整的备份策略,按备份策略使用percona-xtrabackup做全量和增量备份并模拟数据损坏恢复数据为完整一致。 1)下载 xtrabackup wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/tarball/percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz 2)解压 # tar zxf percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz 3)进入解压目录 # cd percona-xtrabackup-2.4.4-Linux-x86_64/ 4)复制 bin 下的所有程序到/usr/bin [root@localhost percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/ 5)安装相关插件 #yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey.x86_64 perl-Digest-MD5 –y 6)下载 percona-toolkit 并安装 #wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/percona-toolkit-2.2.19-1.noarch.rpm # rpm -vih percona-toolkit-2.2.19-1.noarch.rpm 完全备份: 语法:# innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/ # innobackupex --user=root --password=123456 /opt/mysqlbackup/full 增量备份二进制文件: #mysqlbinlog --start-position=2378 /usr/local/mysql/data/mysql-bin.000023 > /opt/mysqlbackup/inc/`date +%F`.sql 模拟数据库损坏: 例 : # rm -fr /home/mysql/data/* 还原完全备份: # innobackupex --apply-log /opt/mysqlbackup/full/2016-09-12_11-29-55/ --apply-log 指明是将日志应用到数据文件上,完成之后将备份文件中的数据恢复到数据库中。 注:/opt/mysqlbackup/full/2016-09-12_11-29-55/备份文件所在目录名称 还原数据库: # innobackupex --copy-back /opt/mysqlbackup/full/2016-09-12_11-29-55/ 这里的--copy-back 指明是进行数据恢复。数据恢复完成之后,需要修改相关文件的权限 mysql 数据库才能正常启动。 # chown -R mysql:mysql /usr/local/mysql/data/ 必须重启 MySQL: # systemctl restart mysqld 验证还原后的数据:
最新发布
06-08
<think>我们正在讨论的是PerconaXtraBackup实现MySQL数据库的全量备份和增量备份,以及数据损坏后的恢复。根据用户需求,我们将分为以下几个步骤:1.安装PerconaXtraBackup2.全量备份3.增量备份(基于全量备份)4.模拟数据损坏5.恢复步骤(先恢复全量,再恢复增量)6.验证数据完整性注意:以下操作基于CentOS7环境,MySQL假设已安装(这里以MySQL5.7为例,PerconaXtraBackup版本需要与MySQL版本匹配)。步骤1:安装PerconaXtraBackup参考官方文档:https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/yum_repo.html步骤2:全量备份步骤3:增量备份步骤4:模拟数据损坏步骤5:恢复步骤6:验证我们将详细展开每个步骤。</think> 下面我将详细介绍使用 Percona XtraBackup 实现 MySQL 全量备份与增量备份的完整策略,并包含数据损坏后的恢复验证流程: ### 一、备份策略设计 ```mermaid graph TD A[周日: 全量备份] --> B[周一: 增量备份] B --> C[周二: 增量备份] C --> D[周三: 增量备份] D --> E[周四: 增量备份] E --> F[周五: 增量备份] F --> G[周六: 增量备份] G --> A ``` ### 二、备份操作步骤 #### 1. 安装 Percona XtraBackup ```bash # CentOS/RHEL 系统 sudo yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm sudo percona-release enable ps-80 release sudo yum install -y percona-xtrabackup-80 ``` #### 2. 全量备份 (每周日执行) ```bash # 创建备份目录 mkdir -p /backup/full # 执行全量备份 xtrabackup --backup \ --target-dir=/backup/full/$(date +%F) \ --user=backup_user \ --password=backup_password # 准备备份(使数据文件一致) xtrabackup --prepare --target-dir=/backup/full/$(date +%F) ``` #### 3. 增量备份 (每日执行) ```bash # 基于全量备份的增量 xtrabackup --backup \ --target-dir=/backup/inc/$(date +%F) \ --incremental-basedir=/backup/full/latest_full \ --user=backup_user \ --password=backup_password ``` ### 三、数据恢复流程 #### 1. 模拟数据损坏 ```sql -- 删除测试数据库 DROP DATABASE IF EXISTS critical_db; ``` #### 2. 恢复步骤 ```mermaid graph LR A[停止MySQL服务] --> B[恢复全量备份] B --> C[应用增量日志] C --> D[启动数据库] D --> E[验证数据完整性] ``` 具体命令: ```bash # 停止MySQL systemctl stop mysqld # 恢复全量备份 xtrabackup --copy-back --target-dir=/backup/full/2023-10-01 # 应用增量备份 xtrabackup --apply-log --redo-only /backup/full/2023-10-01 xtrabackup --apply-log /backup/full/2023-10-01 \ --incremental-dir=/backup/inc/2023-10-02 # 修复文件权限 chown -R mysql:mysql /var/lib/mysql # 启动数据库 systemctl start mysqld ``` ### 四、数据完整性验证 1. **基本检查**: ```sql CHECK TABLE critical_db.important_table; SHOW TABLE STATUS FROM critical_db; ``` 2. **业务逻辑验证**: ```sql -- 检查关键业务流程 SELECT COUNT(*) AS order_count FROM orders WHERE date = CURDATE(); CALL validate_financial_reports(); ``` 3. **数据一致性校验**: ```bash # 使用 Percona 工具校验 pt-table-checksum --databases=critical_db ``` ### 五、备份策略优化建议 1. **备份保留策略**: ```bash # 保留2个全量备份+7天增量 find /backup/full -mtime +14 -exec rm -rf {} \; find /backup/inc -mtime +7 -exec rm -rf {} \; ``` 2. **加密与压缩**: ```bash xtrabackup --backup --compress --encrypt=AES256 \ --encrypt-key="your_encryption_key" \ --target-dir=/backup/encrypted ``` 3. **自动备份监控**: ```bash # 监控脚本示例 if ! pgrep -x "xtrabackup" >/dev/null; then echo "Backup failed!" | mail -s "MySQL Backup Alert" admin@example.com fi ``` > 关键提示:每次执行增量备份前应通过`SHOW BINARY LOG STATUS`确认LSN序列连续[^1],避免备份链断裂。建议使用--no-version-check参数避免版本警告干扰[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值