必須收藏!MySQL如何不停機(jī)維護(hù)主從同步?看這篇就夠了
那么在企業(yè)里主數(shù)據(jù)庫(kù)不停機(jī)的情況,如何做到不停機(jī)維護(hù)主從同步呢?今天我們就跟大家分享一下企業(yè)實(shí)際案例。
實(shí)戰(zhàn)環(huán)境
- Mysql-5.7
- Xtrabackup-2.4
Xtrabackup 介紹
Percona XtraBackup是一款基于MySQL的服務(wù)器的開(kāi)源熱備份實(shí)用程序,在備份過(guò)程中不會(huì)鎖定數(shù)據(jù)庫(kù)。
它可以備份來(lái)自MySQL5.1,5.5,5.6和5.7服務(wù)器上的InnoDB,XtraDB和MyISAM表的數(shù)據(jù),以及帶有XtraDB的Percona服務(wù)器。
XtraBack XtraBackup 工具 up 工具
Xtrabackup 本身只能備份InnoDB和XtraDB,不能備份MyISAM。
innobackupex 封裝了xtrabackup的perl腳本,覆蓋了Xtrabackup的功能。它不但可以備份nnodb和xtradb兩種引擎的表,還可以備份myisam引擎的表(在備份myisam表時(shí)需要加一個(gè)讀鎖)。
Xtrabackup特點(diǎn)
備份過(guò)程快速、可靠;
備份過(guò)程不會(huì)打斷正在執(zhí)行的事務(wù);
能夠基于壓縮等功能節(jié)約磁盤(pán)空間和流量;
自動(dòng)實(shí)現(xiàn)備份檢驗(yàn);
還原速度快;
Xtrabackup備份實(shí)現(xiàn)原理
innobackupex開(kāi)啟xtrabackup_log監(jiān)控線程,實(shí)時(shí)監(jiān)測(cè)redolog文件的變化,將新備份過(guò)程中新寫(xiě)入到事務(wù)日志中的日志拷貝至innobackup_log中;
同時(shí)開(kāi)啟xtrabackup拷貝線程,開(kāi)始拷貝innodb文件,拷貝數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu),記錄當(dāng)前binlog及position完成備份。
全備恢復(fù)原理
將全備文件進(jìn)行xtrabackup_log日志回放,并對(duì)提交的事務(wù)進(jìn)行重做,同時(shí)rollback未提交的事務(wù)。并將全備文件復(fù)制到mysql 下的data目錄下。
主數(shù)據(jù)庫(kù)
1、安裝xtrabackup工具
- $ yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm$ yum update percona-release$ yum install percona-xtrabackup-24 -y
2、主數(shù)據(jù)庫(kù)全量備
- # 全量備份$ innobackupex --defaults-file=/etc/my.cnf --user=root --password=magedu /data/backup
- # 保持事務(wù)一致性 apply-log的作用是通過(guò)回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件處于一致性狀態(tài),把已提交的事務(wù)合并到ibdata文件$ innobackupex --apply-log /data/backup/2020-03-28_19-13-07
3、 將主數(shù)據(jù)庫(kù)備份文件壓縮并拷貝到從數(shù)據(jù)庫(kù)
- $ tar czf backup.tar.gz 2020-03-28_19-13-07
- $ scp -r /data/backup/backup.tar.gz 172.21.0.8:/data/backup/
4、 主庫(kù)授權(quán)同步帳號(hào)
- mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave_passport';mysql> FLUSH PRIVILEGES;
5、查看主庫(kù)備份到位置,從庫(kù)從備份位置開(kāi)始同步
- $ cat /data/backup/2020-03-28_19-13-07/xtrabackup_binlog_infomysql-bin.000001 1053
從數(shù)據(jù)庫(kù)操作
1、從數(shù)據(jù)全量恢復(fù)
- $ cd /data/backup/ && tar xf backup.tar.gz$ innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backup/2020-03-28_19-13-07
2、修改數(shù)據(jù)文件權(quán)限
- $ chown -R mysql:mysql /var/lib/mysql
3、 啟動(dòng)從數(shù)據(jù)庫(kù)
- $ systemctl restart mysqld
4、查看主數(shù)據(jù)庫(kù)第五步主庫(kù)備份的位置,開(kāi)始同步
- mysql> CHANGE MASTER TO MASTER_HOST='172.21.0.9', \
- MASTER_USER='slave', \
- MASTER_PASSWORD='slave_passport', \
- MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001', \
- MASTER_LOG_POS=1053;
5、開(kāi)啟主從同步
- mysql> start slave;mysql> show slave status\G;
- # 下面二個(gè)Yes代表已經(jīng)正常同步了Slave_IO_Running=YesSlave_SQL_Running=Yes
總結(jié)
Mysql主從同步,雙機(jī)熱備、數(shù)據(jù)備份技術(shù)已經(jīng)成為運(yùn)維工程師不可缺少的技術(shù)之一了,無(wú)論在哪個(gè)公司總有在用Mysql的。
馬哥Linux運(yùn)維課程里面系統(tǒng)的講解了Mysql相關(guān)技術(shù),從Mysql安裝、各種Mysql架構(gòu)到備份還原,而且還有各種實(shí)例案例講解!