Percona-Cluster:备份和恢复过程

我试图从三节点percona集群(percona集群5.5,galera 2.1,wsrep sst方法是rsync,只有innodb表)中的一个节点恢复完整备份。

备份是这样的:

rm -rf /tmp/backup/mysqldb innobackupex --user=bkpuser --password=xxxx --galera-info --no-timestamp /tmp/backup/mysqldb/ innobackupex --apply-log --use-memory=2G /tmp/backup/mysqldb/ 

我试图恢复过程是这样的:

  1. 在所有三个节点上closuresmysql
  2. 在第一个节点上
    1. 删除mysql数据目录的内容
    2. 删除mysql redologs / binlogs,双重写入文件等(他们位于一个单独的文件夹)
    3. 为我的数据库实例复制数据库表空间文件
    4. 为mysql数据库复制数据库表空间文件
    5. redologs / binlogs,doublewrite文件等
    6. wsrep_urls = gcomm://启动mysql来初始化集群
  3. 在第二和第三节点上
    1. 删除mysql redologs / binlogs,双重写入文件等
    2. 删除galera.cachegrastate.dat
    3. 启动mysql( wsrep_urls = gcomm://firstnode:port,gcomm://secondnode:port,gcomm://thirdnode:port
  4. 一旦群集全部同步,请使用完整的wsrep_urlsconfiguration重新启动第一个节点

(我知道wsrep_urls已被弃用,但我还没有得到加莱拉与wsrep_cluster_address工作呢。)

我的问题是第二个和第三个节点报告SST后的错误。 对于每个表,我看到这个错误:

130225 15:44:43 [ERROR] Cannot find or open table myTestDb/settings from the internal data dictionary of InnoDB though the .frm file for the table exists. Maybe you have deleted and recreated InnoDB data files but have forgotten to delete the corresponding .frm files of InnoDB tables, or you have moved .frm files to another database? or, the table contains indexes that this version of the engine doesn't support. See http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html how you can resolve the problem.

Mysql show tables显示表是现有的,但是当试图从它们中select时,它报告错误Table 'myTestDb.settings' does not exist

我试图删除本地表空间文件之前启动mysql和请求sst,相同的结果。

我应该如何执行恢复? 我应该将备份文件复制到所有节点?

你没有说你正在使用什么SST方法。 我认为这是xtrabackup?

您在第二个和第三个节点上描述的症状听起来像是一个缺失(并重新初始化)的Innodb数据字典,它位于ibdata1文件中。 有可能没有从第一个节点的正确位置复制。

你提到了一些像trx日志和doublewrite文件在“单独的文件夹”的东西。 你的my.cnf中的Innodb设置是什么? 你有没有设置innodb_data_home_dir(它在你的标准datadir之外)?

如果是这样,它可能是这个bug: https : //bugs.launchpad.net/percona-xtradb-cluster/+bug/1098566 ,或者可能是一个类似的。

这花费我很多时间来找出答案。 如果您从施主节点读取innobackup.backup.log并观察添加节点中正在创build的数据,您将会明白为什么发生这种情况。

我也有完全一样的问题。 对于我的情况,注释掉定制的innodb_data_home_dir和innodb_log_group_home_dir值将解决这个问题。

与组同步后,只需启用这些值和复制文件即可。

希望这可以帮助。