专栏
天翼云开发者社区

xtrabackup8.0.13版本的copy-back恢复后数据库重启失败问题分析

2023-04-03 17:46:49 7阅读

现象:

数据库的binlog和data放在同一个目录下,使用xtrabackup的copy-back拷贝回原data目录时发现mysqlbin.index内容发生了变化,导致恢复后重启失败

触发条件:

配置文件存在log-bin配置,以及配置存储路径为data目录。

初步分析:

D:\project\percona-xtrabackup-8.0.13\storage\innobase\xtrabackup\src\backup_copy.cc

xtrabackup执行copy-back时会先通过binlog_file_location::find_binlog找到binlog文件和binlog索引文件信息,并存储到binlog_file_location类型的结构体变量(binlog、target)中,主要信息如下:

binlog结构体变量主要通过遍历备份目录更新以上信息,更新后如下所示

更新target结构体变量时,此处仅取了opt_log_bin(/data2/sf/zgj/data8022/mysqlbin)的目录长度,即r.name=/data2/sf/zgj/data8022/ + .000005,也因此返回了一个奇怪的target.name信息。

在拷贝binlog.index时是将binlog.index_name.c_str()的内容拷贝到target.index_path.c_str()中,该过程完成后的binlog.index正常,但后面一步的fixup binlog index,由于binlog和data处于同一目录下,会执行f_index << target.name.c_str() << std::endl;操作,错误的target.name信息将被写入到target.index_path中。

 

相关提交:

  • 0
  • 0
  • 0
0 评论
0/1000
评论(0) 发表评论
zzzzgj

zzzzgj

5 篇文章 1 粉丝
关注

xtrabackup8.0.13版本的copy-back恢复后数据库重启失败问题分析

2023-04-03 17:46:49 7阅读

现象:

数据库的binlog和data放在同一个目录下,使用xtrabackup的copy-back拷贝回原data目录时发现mysqlbin.index内容发生了变化,导致恢复后重启失败

触发条件:

配置文件存在log-bin配置,以及配置存储路径为data目录。

初步分析:

D:\project\percona-xtrabackup-8.0.13\storage\innobase\xtrabackup\src\backup_copy.cc

xtrabackup执行copy-back时会先通过binlog_file_location::find_binlog找到binlog文件和binlog索引文件信息,并存储到binlog_file_location类型的结构体变量(binlog、target)中,主要信息如下:

binlog结构体变量主要通过遍历备份目录更新以上信息,更新后如下所示

更新target结构体变量时,此处仅取了opt_log_bin(/data2/sf/zgj/data8022/mysqlbin)的目录长度,即r.name=/data2/sf/zgj/data8022/ + .000005,也因此返回了一个奇怪的target.name信息。

在拷贝binlog.index时是将binlog.index_name.c_str()的内容拷贝到target.index_path.c_str()中,该过程完成后的binlog.index正常,但后面一步的fixup binlog index,由于binlog和data处于同一目录下,会执行f_index << target.name.c_str() << std::endl;操作,错误的target.name信息将被写入到target.index_path中。

 

相关提交:

文章来自专栏

zzz

5 篇文章 1 订阅
0 评论
0/1000
评论(0) 发表评论
  • 0
    点赞
  • 0
    收藏
  • 0
    评论