一、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
交流學習
----