xtrabackup 增量备份 恢复

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: step 1: 全备# innobackupex --defaults-file=/etc/my.cnf --no-timestamp /home/ssd/ali_backup/full_xtra_3306_20160826 --user root --...

step 1: 全备

# innobackupex --defaults-file=/etc/my.cnf --no-timestamp /home/ssd/ali_backup/full_xtra_3306_20160826 --user root --password beijing --socket=/home/ssd/ali_data/my3306.sock

查看xtrabackup_checkpoints 文件

# more full_xtra_3306_20160826/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 12222652952
last_lsn = 12222652952
compact = 0
recover_binlog_info = 0

测试数据

mysql> create database miles;
Query OK, 1 row affected (0.01 sec)
mysql> use miles;
Database changed
mysql> create table t( id int, name varchar(30));
Query OK, 0 rows affected (0.05 sec)

step 2:1级备份

# innobackupex --defaults-file=/etc/my.cnf --no-timestamp --incremental /home/ssd/ali_backup/full_xtra_3306_20160826_i_01 --incremental-basedir=/home/ssd/ali_backup/full_xtra_3306_20160826/  --user root --password beijing --socket=/home/ssd/ali_data/my3306.sock

查看xtrabackup_checkpoints 文件

# more full_xtra_3306_20160826_i_01/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 12222652952
to_lsn = 12222657366
last_lsn = 12222657366
compact = 0
recover_binlog_info = 0

测试数据

mysql> insert into t values (1, 'i1'),(2,'i2'),(3,'i3'); 
mysql> select * from t;
+------+------+
| id   | name |
+------+------+
|    1 | i1   |
|    2 | i2   |
|    3 | i3   |
+------+------+
3 rows in set (0.01 sec)

step 3:2级备份

# innobackupex --defaults-file=/etc/my.cnf --no-timestamp --incremental /home/ssd/ali_backup/full_xtra_3306_20160826_i_02 --incremental-basedir=/home/ssd/ali_backup/full_xtra_3306_20160826_i_01/  --user root --password beijing --socket=/home/ssd/ali_data/my3306.sock

查看xtrabackup_checkpoints 文件

# more full_xtra_3306_20160826_i_02/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 12222657366
to_lsn = 12222659058
last_lsn = 12222659058
compact = 0
recover_binlog_info = 0

测试数据

mysql> delete from t where id=2;
Query OK, 1 row affected (0.02 sec)

mysql> select * from t;
+------+------+
| id   | name |
+------+------+
|    1 | i1   |
|    3 | i3   |
+------+------+
2 rows in set (0.00 sec)

mysql> drop database miles;
Query OK, 1 row affected (0.02 sec)

step 4:查看当前日志


mysql> show master status\G;
*************************** 1. row ***************************
             File: 3306-mysql-bin.000003
         Position: 1319
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 87fd24be-683d-11e6-ba97-1418774c98d8:49-53,
cdf80832-6a74-11e6-890b-1418774c98d8:1-13
1 row in set (0.00 sec)

mysql> flush logs;
Query OK, 0 rows affected (0.02 sec)

step 5:关库

# mysqladmin -uroot shutdown --socket=/data/mysql.sock -p

step 6:保留旧数据目录

# mv ali_data ali_data_bak

step 7:准备全备

# innobackupex --apply-log --redo-only /home/ssd/ali_backup/full_xtra_3306_20160826/

step 8:准备1级备份

# innobackupex --apply-log --redo-only /home/ssd/ali_backup/full_xtra_3306_20160826/ --incremental-dir=/home/ssd/ali_backup/full_xtra_3306_20160826_i_01/

step 9:准备2级备份

# innobackupex --apply-log --redo-only /home/ssd/ali_backup/full_xtra_3306_20160826/ --incremental-dir=/home/ssd/ali_backup/full_xtra_3306_20160826_i_02/

step 10:再次准备全备

# innobackupex --apply-log  /home/ssd/ali_backup/full_xtra_3306_20160826/

step 11:恢复数据库

# innobackupex --defaults-file=/etc/my.cnf --copy-back /home/ssd/ali_backup/full_xtra_3306_20160826

# chown -R mysql:mysql ali_data

step 12:启动实例

# mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/home/ssd/ali_data/  &
mysql> select * from t;
+------+------+
| id   | name |
+------+------+
|    1 | i1   |
|    2 | i2   |
|    3 | i3   |
+------+------+
3 rows in set (0.00 sec)

step 13:查看备份Position

# more full_xtra_3306_20160826/xtrabackup_binlog_info 
3306-mysql-bin.000003   933     87fd24be-683d-11e6-ba97-1418774c98d8:49-53,
cdf80832-6a74-11e6-890b-1418774c98d8:1-11

step 14:查看binlog日志,确定start-position和stop-position

# mysqlbinlog -vv --base64-output=decode-rows 3306-mysql-bin.000003
...
SET @@SESSION.GTID_NEXT= 'cdf80832-6a74-11e6-890b-1418774c98d8:11'/*!*/;
# at 722
#160826 14:00:28 server id 201983306  end_log_pos 795 CRC32 0x98f6ac81  Query   thread_id=27    exec_time=0     error_code=0
SET TIMESTAMP=1472191228/*!*/;
BEGIN
/*!*/;
# at 795
#160826 14:00:28 server id 201983306  end_log_pos 843 CRC32 0x98615829  Table_map: `miles`.`t` mapped to number 77
# at 843
#160826 14:00:28 server id 201983306  end_log_pos 902 CRC32 0x44246525  Write_rows: table id 77 flags: STMT_END_F
### INSERT INTO `miles`.`t`
### SET
###   @1=1 /* INT meta=0 nullable=1 is_null=0 */
###   @2='i1' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
### INSERT INTO `miles`.`t`
### SET
###   @1=2 /* INT meta=0 nullable=1 is_null=0 */
###   @2='i2' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
### INSERT INTO `miles`.`t`
### SET
###   @1=3 /* INT meta=0 nullable=1 is_null=0 */
###   @2='i3' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
# at 902
#160826 14:00:28 server id 201983306  end_log_pos 933 CRC32 0x47fad9c0  Xid = 239
COMMIT/*!*/;
# at 933
#160826 14:08:31 server id 201983306  end_log_pos 981 CRC32 0xd5f3269b  GTID [commit=yes]
SET @@SESSION.GTID_NEXT= 'cdf80832-6a74-11e6-890b-1418774c98d8:12'/*!*/;
# at 981
#160826 14:08:31 server id 201983306  end_log_pos 1054 CRC32 0x993def1d         Query   thread_id=32    exec_time=0     error_code=0
SET TIMESTAMP=1472191711/*!*/;
BEGIN
/*!*/;
# at 1054
#160826 14:08:31 server id 201983306  end_log_pos 1102 CRC32 0x5fe76bad         Table_map: `miles`.`t` mapped to number 78
# at 1102
#160826 14:08:31 server id 201983306  end_log_pos 1145 CRC32 0x98128279         Delete_rows: table id 78 flags: STMT_END_F
### DELETE FROM `miles`.`t`
### WHERE
###   @1=2 /* INT meta=0 nullable=1 is_null=0 */
###   @2='i2' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
# at 1145
#160826 14:08:31 server id 201983306  end_log_pos 1176 CRC32 0xa2617fb2         Xid = 261
COMMIT/*!*/;
# at 1176
#160826 14:08:40 server id 201983306  end_log_pos 1224 CRC32 0x5cda357a         GTID [commit=yes]
SET @@SESSION.GTID_NEXT= 'cdf80832-6a74-11e6-890b-1418774c98d8:13'/*!*/;
# at 1224
#160826 14:08:40 server id 201983306  end_log_pos 1319 CRC32 0x5de28a5d         Query   thread_id=32    exec_time=0     error_code=0
SET TIMESTAMP=1472191720/*!*/;
drop database miles
/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
# at 1319
#160826 14:09:05 server id 201983306  end_log_pos 1371 CRC32 0xee498579         Rotate to 3306-mysql-bin.000004  pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

step 15:基于binlog日志恢复

# mysqlbinlog --start-position=933 --stop-position=1176 3306-mysql-bin.000003 | mysql -uroot -p --socket=/home/ssd/ali_data/my3306.sock

查看恢复情况

mysql> select * from t;
+------+------+
| id   | name |
+------+------+
|    1 | i1   |
|    3 | i3   |
+------+------+
2 rows in set (0.00 sec)

step 16:确定数据无误后,重新做一份全备

# innobackupex --defaults-file=/etc/my.cnf --user root --password beijing --no-timestamp /home/ssd/ali_backup/full_xtra_3306_20160826_1
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
监控 BI Sentinel
十分钟搞懂阿里Sentinel核心源码
本文深入解析了Sentinel限流功能的实现,基于2.0.0-alpha2-SNAPSHOT版本。文章从数据统计、核心结构到具体案例,详细讲解了Sentinel如何通过责任链模式串联不同Slot,实现流量控制、系统保护等功能。重点分析了StatisticNode、ArrayMetric等关键类的实现原理,以及ContextUtil、SphU等核心组件的源码逻辑。同时探讨了滑动窗口机制、并发计数器和BlockException处理等内容,帮助读者全面理解Sentinel的内部工作机制。
1038 79
十分钟搞懂阿里Sentinel核心源码
|
网络协议 安全 Linux
通过NAT网关实现本地客户端访问NAS SMB文件系统
通过NAT网关实现本地客户端访问NAS SMB文件系统。帮助用户使用本地的MacOS、iPad、Linux、Windows等客户端连接阿里云上的NAS SMB文件系统,实现文件跨机器共享和永久存储。 虽然NAT网关可以将NAS SMB挂载点开放到公网方便用户本地客户端进行访问,但是直接暴露NAS SMB文件系统到公网有安全风险,任何人拿到公网地址和端口都可以进行访问。 推荐使用VPN或者专线方案将连接保护起来。VPN + SSL的方案可以参考MacOS客户端连接阿里云NAS SMB文件系统,以及通过VPN网关实现本地数据中心访问阿里云NAS。
4093 0
通过NAT网关实现本地客户端访问NAS SMB文件系统
|
8月前
|
机器学习/深度学习 数据采集 供应链
Pandas数据应用:销售预测
本文介绍如何使用Pandas进行销售预测。首先,通过获取、清洗和可视化历史销售数据,确保数据质量并理解其特征。接着,进行特征工程,构建线性回归等模型进行预测,并评估模型性能。最后,针对常见问题如数据类型不匹配、时间格式错误、内存不足和模型过拟合提供解决方案。掌握这些步骤,可有效提升销售预测的准确性,助力企业优化库存管理和提高客户满意度。
163 17
|
10月前
|
移动开发 前端开发 JavaScript
React 表单验证实战
【10月更文挑战第25天】本文介绍了 React 表单验证的常见方法,包括原生 HTML5 验证、自定义验证逻辑和第三方库(如 Formik 和 Yup)的使用。通过具体代码示例,详细讲解了每种方法的实现步骤,并探讨了常见问题和易错点及其解决方法。旨在帮助开发者提高表单验证的有效性和安全性。
234 9
|
关系型数据库 分布式数据库 数据库
PolarDB操作报错合集之查看表结构时报错,如何排查
在使用阿里云的PolarDB(包括PolarDB-X)时,用户可能会遇到各种操作报错。下面汇总了一些常见的报错情况及其可能的原因和解决办法:1.安装PolarDB-X报错、2.PolarDB安装后无法连接、3.PolarDB-X 使用rpm安装启动卡顿、4.PolarDB执行UPDATE/INSERT报错、5.DDL操作提示“Lock conflict”、6.数据集成时联通PolarDB报错、7.编译DN报错(RockyLinux)、8.CheckStorage报错(源数据库实例被删除)、9.嵌套事务错误(TDDL-4604)。
217 1
|
缓存 JavaScript 前端开发
Vue.js 2 项目实战(五):水果购物车
Vue.js 2 项目实战(五):水果购物车
|
JavaScript 开发者 索引
【亮剑】探讨了在TypeScript中为对象动态添加属性的三种方式
【4月更文挑战第30天】本文探讨了在TypeScript中为对象动态添加属性的三种方式:1) 使用索引签名允许添加任意属性,如`[key: string]: any`;2) 通过接口和类型别名提供编译时类型检查,例如`interface Person { name: string; age: number; }`;3) 利用类创建具有属性的对象,如`class Person { name: string; age: number; }`。每种方法有其适用场景,开发者可根据需求选择。
1242 0
|
JavaScript 前端开发 Linux
Vue.js + Electron 的跨平台桌面应用程序开发
本文介绍了 Vue.js 和 Electron 的基本特点和原理,并分析了它们在桌面应用程序开发中的优势和应用场景。在基于 Vue.js 和 Electron 的桌面应用程序开发实践中,本文详细介绍了项目的搭建和配置,包括环境的准备、项目的初始化和依赖的安装等步骤。然后,本文介绍了使用 Vue.js 进行界面设计和组件开发的方法,并提供了相关的示例代码和实现细节。接下来,本文探讨了 Electron 主进程和渲染进程的开发,包括窗口管理、文件系统访问和与底层系统交互等方面的内容。最后,本文对基于 Vue.js 和 Electron 的桌面应用程序开发做出了总结,并展望了未来的发展方向和应用前景
1122 2
|
缓存 JSON 运维
深入探讨API调用性能优化与错误处理
随着互联网技术的不断发展,API(应用程序接口)已经成为软件系统中重要的组成部分。而优化API调用的性能以及处理错误和异常情况则是保障系统稳定性和可靠性的关键。本文将从以下几个方面来探讨如何进行性能优化和错误处理。
|
Java Apache Spring
解决required a single bean, but 2 were found问题
背景:springboot整合shiro中自定义Realm时出现 错误描述 Parameter 0 of method getDefaultWebSecurityManager in cn.ken.springboot_shiro.config.ShiroConfig required a single bean, but 2 were foun