mysqlbackup 重建帶有gtid特性的slave

weixin_33912246發表於2017-08-29

一、mysqlbackup簡介:

  mysqlbackup是mysql的一個企業級備份工具,優點就是牛逼,缺點就是這東西要錢買。

 

二、gtid 特性簡介:

  gtid 的中文名叫全域性事務ID,也就是說每一個事務都會對應一個全域性唯一的編號;由於這個編號也會被寫入到binlog

  只要slave把自己的已經應用的gitd發給master, master就能知道slave同步到了二進位制日誌的那個位置。也就是說之前

  的master_log_file,master_log_pos被革命了。

 

三、重建slave大致上要分如下幾步:

  1、備份master

  2、傳輸備份到slave主機

  3、確保slave已經停止,資料目錄已經清空

  4、還原備份

  5、建立主從關係,啟動複製

 

四、備份master:

  1、備份指令碼

mysqlbackup --defaults-file=/etc/my.cnf --backup-dir=/tmp/ --with-timestamp \
  --host=127.0.0.1 --port=3306 --user=mebuser --password='Pass@352' \
  --compress --skip-binlog --skip-relaylog --limit-memory=1024 \
  --read-threads=4 --process-threads=8 --write-threads=4  \
  --backup-image=/tmp/$(date +'%F_%H-%M-%S').mbi \
  backup-to-image

  2、注意事項

    --no-locking 這個選擇使得mysqlbackup在備份的最後階段不鎖表,這樣就得不到一個全域性一致的備份;之所以說是全域性一致是

    是因為對於innodb表來說是一致的,因為在還原的時候會前滾回滾,但是MyIASM表就不能保證一致了;所以這種情況下mysqlbackup

    得不到一個正確的binlog位置,這樣做重建是有問題的。

  3、效能優化項:

    --read-threads --write-threads 如果你的磁碟效能比較牛逼就調大這兩個引數

    --process-threads                    如果你的cpu效能比較牛逼就調大這個上引數

    --limit-memory                         如果你的記憶體比較空閒就調大這個上引數

 

五、傳輸備份到slave: 

scp 2017-08-29_16-23-16.mbi root@172.16.192.111:/tmp/

 

六、停止slave 並清空它的資料目錄:

systemctl stop mysql
mv /database/mysql/data/3306 /database/mysql/data/3306.backup.20170829
mkdir -p /database/mysql/data/3306/

 

七、還原備份:

  1、還原指令碼

mysqlbackup --defaults-file=/etc/my.cnf --backup-dir=/tmp/meb --with-timestamp --backup-image=/tmp/2017-08-29_16-23-16.mbi \
    --datadir=/database/mysql/data/3306/  --uncompress copy-back-and-apply-log

  2、還原後的資料目錄內容

ll /database/mysql/data/3306/
total 110656
-rw-r--r--. 1 root root      302 Aug 29 16:43 backup_gtid_executed.sql # 記錄著gtid相關資訊
-rw-r--r--. 1 root root      568 Aug 29 16:43 backup_variables.txt
-rw-r--r--. 1 root root      383 Aug 29 16:43 ib_buffer_pool
-rw-r--r--. 1 root root 12582912 Aug 29 16:43 ibdata1
-rw-r-----. 1 root root 50331648 Aug 29 16:43 ib_logfile0
-rw-r-----. 1 root root 50331648 Aug 29 16:43 ib_logfile1
drwxr-x---. 2 root root     4096 Aug 29 16:43 mysql
drwxr-x---. 2 root root     8192 Aug 29 16:43 performance_schema
-rw-r--r--. 1 root root    15623 Aug 29 16:43 server-all.cnf
-rw-r--r--. 1 root root     4555 Aug 29 16:43 server-my.cnf
drwxr-x---. 2 root root     8192 Aug 29 16:43 sys

  3、修改資料目錄的許可權

chown -R mysql:mysql /database/mysql/data/3306

 

八、啟動slave並配置複製:

   1、啟動slave

systemctl start mysql

  2、更新slave上gtid資訊

reset master;
set sql_log_bin=0;
source /database/mysql/data/3306/backup_gtid_executed.sql

  3、配置複製

change master to
    master_user='repl',
    master_password='xxxxxxxx',
    master_host='172.16.192.110',
    master_port=3306,
    master_auto_position=1;

start slave;

  4、檢視複製的狀態

show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.192.110
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 3206
               Relay_Log_File: clusterb-relay-bin.000002
                Relay_Log_Pos: 626
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

 

總結:

  用mysqlbackup重建帶有gtid特性的slave的過程大致就是上面這個樣子了,這裡並沒有對mysqlbackup有過多的講解,

  官方文件見:MySQL Enterprise Backup 4.1

 

 

 

交流學習

----

 

相關文章