mysql使用xtrbackup+relaylog增量恢复注意事项

 更新时间:2023年05月12日 10:43:31   作者:foxytale  
这篇文章主要介绍了mysql使用xtrbackup+relaylog增量恢复,本次实验mysql5.7.19.使用了GTID,row格式的binlog,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下

实验说明

本次实验mysql5.7.19.使用了GTID,row格式的binlog

参数说明

[mysql]
password=root@1234
[mysqld]
server_id=1
log_bin
gtid_mode=1
binlog_format=row
basedir=/usr/local/mysql
datadir=/home/mysql/data

时点说明

bin.000001 1-154

创建test表

bin.000001 154

xtrabackup --backup

bin.000001 154-end

创建test_dml表,test表数据

bin.000002

test表插入数据

xtrabackup备份恢复

备份

[root@mysql57-1 tmp]# xtrabackup --user=root --password=root@1234 --socket=/tmp/mysql.sock --backup --target-dir=/tmp/bak
....
230508 15:48:12 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
xtrabackup: The latest check point (for incremental): '2568864'
xtrabackup: Stopping log copying thread.
.230508 15:48:12 >> log scanned up to (2568873)
230508 15:48:13 Executing UNLOCK TABLES
230508 15:48:13 All tables unlocked
230508 15:48:13 [00] Copying ib_buffer_pool to /tmp/bak/ib_buffer_pool
230508 15:48:13 [00]        ...done
230508 15:48:13 Backup created in directory '/tmp/bak/'
MySQL binlog position: filename 'mysql57-1-bin.000001', position '154'
230508 15:48:13 [00] Writing /tmp/bak/backup-my.cnf
230508 15:48:13 [00]        ...done
230508 15:48:13 [00] Writing /tmp/bak/xtrabackup_info
230508 15:48:13 [00]        ...done
xtrabackup: Transaction log of lsn (2568864) to (2568873) was copied.
230508 15:48:13 completed OK!

prepare恢复

[root@mysql57-1 bak]# xtrabackup --prepare --target-dir=/tmp/bak
InnoDB: 96 redo rollback segment(s) found. 1 redo rollback segment(s) are active.
InnoDB: 32 non-redo rollback segment(s) are active.
InnoDB: 5.7.40 started; log sequence number 2569237
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 2569256
230511 16:54:37 completed OK!

复制回原目录

cp -r /tmp/bak /home/mysql/data
chown -R mysql:mysql /home/mysql/data

relaylog增量恢复初始

修改server_id

做为relay log来读取binlog,需要server id不能一致。

重启sever会自动启动slave sql thread。我个人尝试start slave sql_thread不能成功,但是重启实例可以。

vi /etc/my.cnf
server_id=2

初始化master

主要是通过该命令将relaylog的相关初始化出来。因为使用的GTID,不需要指定pos

CHANGE MASTER TO master_host='1',master_password='1',master_user='1',master_log_file='1',master_log_pos=4;

拷贝binlog为relaylog

binlog和relaylog的格式完全相同,只需要将名字处理成relaylog的样式即可

如需要恢复多个,拷贝多个过去即可,我这里的演示只拷贝了一个binlog

cp mysql57-1-bin.000001 /home/mysql/data/mysql57-1-relay-bin.000001
chown mysql:mysql /home/mysql/data/mysql57-1-relay-bin.00000*

修改index

INDEX同步修改

vi mysql57-1-relay-bin.index
./mysql57-1-relay-bin.000001

重启数据库

/etc/init.d/mysql restart

可以看到日志中io thread 错误,sql thread正常

2023-05-11T13:31:30.297886Z 1 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider
using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
2023-05-11T13:31:30.297994Z 1 [ERROR] Slave I/O for channel '': error connecting to master '1@1:3306' - retry-time: 60  retries: 1, Error_code: 2003
2023-05-11T13:31:30.299542Z 2 [Warning] Slave SQL for channel '': If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0
2023-05-11T13:31:30.299616Z 2 [Note] Slave SQL thread for channel '' initialized, starting replication in log '1' at position 4, relay log './mysql57-1-relay-bin.000001' position: 4
2023-05-11T13:31:30.304018Z 0 [Note] Event Scheduler: Loaded 0 events
2023-05-11T13:31:30.304223Z 0 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.7.19-log'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)

查看数据确认

mysql> show tables;
+---------------+
| Tables_in_ddd |
+---------------+
| ddl_test      |
| dml_test      |
| pitr          |
| test          |
| ttt           |
+---------------+
5 rows in set (0.00 sec)
mysql> select * from test;
+---+---------------------+
| x | y                   |
+---+---------------------+
| 1 | 2023-05-08 15:51:37 |
| 2 | 2023-05-08 15:51:39 |
| 3 | 2023-05-08 15:51:42 |
| 4 | 2023-05-08 15:51:45 |
| 5 | 2023-05-08 15:51:49 |
+---+---------------------+
5 rows in set (0.00 sec)
mysql> select * from dml_test;
Empty set (0.00 sec)

relaylog增量恢复接续

接续的时候发现relay-log.info里记录的是binlog的名称,这个流程没有指定过pos。怀疑是relaylog内指定的下一个relaylog名称。

拷贝binlog为relaylog

cp mysql57-1-bin.000002 /home/mysql /data/mysql57-1-relay-bin.000002
chown mysql:mysql /data/mysql57-1-relay-bin.000002

修改index

INDEX同步修改

vi mysql57-1-relay-bin.index
./mysql57-1-relay-bin.000002

重启数据库

/etc/init.d/mysql restart

查看数据确认

mysql> use ddd;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------+
| Tables_in_ddd |
+---------------+
| ddl_test      |
| dml_test      |
| pitr          |
| test          |
| ttt           |
+---------------+
5 rows in set (0.00 sec)
mysql> select * from dml_test;
+------+------+
| x    | y    |
+------+------+
|    1 | 123  |
|    1 | qwe  |
|    1 | ttt  |
+------+------+
3 rows in set (0.00 sec)

slave信息清理

恢复流程完成后,清理slave信息,避免报错影响

注:reset slave不会清除同步信息。

reset slave all;

到此这篇关于mysql使用xtrbackup+relaylog增量恢复的文章就介绍到这了,更多相关mysql增量恢复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL如何添加数据insert命令

    MySQL如何添加数据insert命令

    这篇文章主要介绍了MySQL如何添加数据insert命令问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • mysql的docker容器如何设置默认的数据库技巧详解

    mysql的docker容器如何设置默认的数据库技巧详解

    这篇文章主要为大家介绍了mysql的docker容器如何设置默认的数据库技巧详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Mysql分组查询取最新的几种方案总结

    Mysql分组查询取最新的几种方案总结

    在写报表功能时遇到一个需要根据用户id分组查询最新一条钱包明细数据的需求,下面这篇文章主要给大家总结介绍了关于Mysql分组查询取最新的几种方案,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • mysql 计算函数详情

    mysql 计算函数详情

    这篇文章主要介绍了mysql 计算函数,函数没有SQL的可移植性强 能运行在多个系统上的代码称为可移植的(portable)。相对来说,多数SQL语句是可移植的,在SQL实现之间有差异时,这些差异通常不那么难处理,下面来看看文章的具体内容吧
    2021-10-10
  • MySQL通用查询日志和慢查询日志全面分析

    MySQL通用查询日志和慢查询日志全面分析

    这篇文章主要介绍了MySQL通用查询日志和慢查询日志的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 关于MYSQL 远程登录的授权方法 命令

    关于MYSQL 远程登录的授权方法 命令

    默认是不允许远程连接的,因为有很大的安全隐患。需要手动增加可以远程访问数据库的用户
    2011-11-11
  • MySQL 中的 UPDATE 语句详解

    MySQL 中的 UPDATE 语句详解

    UPDATE 语句用于修改表中的数据,可以更新单行或多行数据,下面给大家介绍MySQL 中的 UPDATE 语句,感兴趣的朋友一起看看吧
    2025-05-05
  • Mysql用户授权(GRANT)语法及示例解读

    Mysql用户授权(GRANT)语法及示例解读

    这篇文章主要介绍了Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • gearman + mysql方式实现持久化操作示例

    gearman + mysql方式实现持久化操作示例

    这篇文章主要介绍了gearman + mysql方式实现持久化操作,简单描述了持久化的概念、原理,并结合实例形式分析了gearman + mysql持久化操作相关实现技巧,需要的朋友可以参考下
    2020-02-02
  • MySql总弹出mySqlInstallerConsole窗口的解决方法

    MySql总弹出mySqlInstallerConsole窗口的解决方法

    这篇文章主要介绍了MySql总弹出mySqlInstallerConsole窗口的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09

最新评论