Mysql-Replication

XtraBackup 還原在從屬上提供重複項?

  • July 27, 2015

我們最近將 MySQL 5.0 master-master setup 升級到 Percona 5.6。由於我們這邊的一些故障,Slaving 變得 b0rken,但我們認為我們可以通過使用 xtrabackup 從正在執行的伺服器創建備份並將其導入到 slave 來簡單地修復它。我整個週末都在嘗試這樣做(部分原因是它是一個巨大的數據庫,其中包含大量的數據庫和表),但無濟於事。有人可以闡明我在這裡可能做錯了什麼嗎?

首先,我在目前的生產主伺服器上執行以下命令:

ulimit -n 409600 innobackupex --defaults-file=/etc/mysql/debian.cnf /mnt

完成後,我將生成的目錄複製到另一台伺服器並執行:

innobackupex --use-memory=4G --apply-log /srv/restore

它最終以 OK 消息退出。現在我將它恢復到數據庫:

innobackupex --move-back /srv/restore

一切順利,我可以再次啟動 MySQL(在我 chown /srv/mysql 目錄,這是我們的數據目錄之後)。數據在那裡,數據庫執行良好。現在我開始在這個數據庫上工作:

/usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf -e "CHANGE MASTER TO MASTER_HOST='10.x.x.x', MASTER_USER='replication', MASTER_PASSWORD='verysecret', MASTER_AUTO_POSITION=1; START SLAVE"

從動開始但由於 1062 錯誤而立即停止。經過調查,我發現它嘗試應用的條目是在我開始備份後立即添加到主數據庫中的。我可以解決這個問題,但我立即收到一個新錯誤。

對我來說,備份似乎沒有包含所有最新的 GTID,只有在備份開始時可用的那些?我認為這正是 XtraBackup 應該解決的問題?我現在看不到確保在備份期間不對數據庫進行任何寫入的替代方法。我在這裡做錯了嗎?這應該發生嗎?

在帶有所有最新更新檔的 Debian Wheezy 上執行。

Server version: 5.6.25-73.1-log Percona Server (GPL), Release 73.1, Revision 07b797f $ innobackupex --version InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy and Percona LLC and/or its affiliates 2009-2013. All Rights Reserved. $ xtrabackup --version xtrabackup version 2.2.11 based on MySQL server 5.6.24 Linux (x86_64) (revision id: )

您必須告訴從屬伺服器在進行備份時在主伺服器上執行的最後一個 GTID 是什麼。

NewSlave > SET GLOBAL gtid_purged="XXXX";
NewSlave > CHANGE MASTER TO
          MASTER_HOST="10.x.x.x",
          MASTER_USER="replication",
          MASTER_PASSWORD="verysecret",
          MASTER_AUTO_POSITION = 1;
NewSlave > START SLAVE;
NewSlave > SHOW SLAVE STATUS \G;

來源:https ://www.percona.com/doc/percona-xtrabackup/2.1/howtos/recipes_ibkx_gtid.html

引用自:https://serverfault.com/questions/708641