共計 5224 個字符,預計需要花費 14 分鐘才能閱讀完成。
本篇內容介紹了“MySQL 基于 GTID 主從搭建怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一、用 xtarbackup 備份數據庫 1.1 優勢
使用 xtarbackup 來做主從的前期準備是因為 xtarbackup 備份數據和恢復數據都很快,特別適合數據量很大的數據庫備份,而且它的安裝非常的簡單,使用也很簡單 ….(巴拉巴拉,廢話編不出來了)。
1.2 安裝
具體版本根據自己的具體情況來選擇。就下面這幾步就安裝好了,是不是非常簡單 …..
# rpm -Uvh https://www.percona.com/redir/downloads/percona-release/redhat/percona-release-0.1-3.noarch.rpm
# yum list | grep percona
# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
# rpm -Uvh ftp://rpmfind.net/linux/epel/6/x86_64/libev-4.03-3.el6.x86_64.rpm
# yum install percona-xtrabackup –y
1.3 使用 1.3.1 普通備份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /data/backupMysql/
1.3.2 tar 備份
(1)、備份到本地
# 不壓縮
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /data/backupMysql/ /data/mysql.tar
# 壓縮
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /data/backupMysql/ | gzip /data/mysql.tar.gz
(2)、備份到遠程
# 不壓縮
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /data/backupMysql/ | ssh root@192.168.1.7 \ cat - /data/mysql.tar
# 壓縮
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /data/backupMysql/ | | ssh root@192.168.1.7 \ gzip /data/mysql.tar.gz
(3)、解壓方式
# 未經過壓縮的文件解壓
tar xvf mysql.tar -C /data
# 壓縮過的文件解壓
tar zxvf mysql.tar.gz -C /data
1.3.3 xbstream 備份
(1)、備份到本地
# 不壓縮
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=xbstream /data/backupMysql/ /data/mysql.xbstream
# 壓縮
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=xbstream --compress /data/backupMysql/ /data/mysql_compress.xbstream
(2)、備份要遠程
# 不壓縮
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=xbstream /data/backupMysql/| ssh root@192.168.1.7 xbstream -x -C /backup/stream
# 壓縮
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=xbstream --compress /data/backupMysql/ | ssh root@192.168.1.7 xbstream -x -C /backup/stream
(3)、解壓方式
#### 未壓縮的
xbstream -x mysql.xbstream -C /data
#### 壓縮過的
# 1、先解壓 xbstream
xbstream -x mysql_compress.xbstream -C /data
# 2、再解壓 qp 壓縮格式
for bf in `find . -iname *\.qp do qpress -d $bf $(dirname $bf) rm $bf; done
注:如果 xtrabackup 版本大于 2.1.4,可以直接通過以下方式解壓第二步。innobackupex --decompress /data
1.3.4 恢復
先將原備份壓縮包解壓到一個目錄,然后執行下面語句恢復。
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /var/lib/mysql/backup/
注:在做備份,解壓,恢復的過程中可以借助分屏工具,我喜歡用 screen。
二、基于 GTID 做數據同步 2.1 GTID 的概念
1、全局事務標識:global transaction identifiers。
2、GTID 是一個事務一一對應,并且全局唯一 ID。
3、一個 GTID 在一個服務器上只執行一次,避免重復執行導致數據混亂或者主從不一致。
4、GTID 用來代替傳統復制方法,不再使用 MASTER_LOG_FILE+MASTER_LOG_POS 開啟復制。而是使用 MASTER_AUTO_POSTION= 1 的方式開始復制。
5、MySQL-5.6.5 開始支持的,MySQL-5.6.10 后開始完善。
6、在傳統的 slave 端,binlog 是不用開啟的,但是在 GTID 中 slave 端的 binlog 是必須開啟的,目的是記錄執行過的 GTID(強制)。
2.2 GTID 的組成
GTID = source_id:transaction_id source_id:用于鑒別原服務器,即 mysql 服務器唯一的的 server_uuid,由于 GTID 會傳遞到 slave,所以也可以理解為源 ID。
transaction_id:為當前服務器上已提交事務的一個序列號,通常從 1 開始自增長的序列,一個數值對應一個事務。
示例: 3E11FA47-71CA-11E1-9E33-C80AA9429562:23 前面的一串為服務器的 server_uuid,即 3E11FA47-71CA-11E1-9E33-C80AA9429562,后面的 23 為 transaction_id
2.3 GTID 的原理
1、當一個事務在主庫端執行并提交時,產生 GTID,一同記錄到 binlog 日志中。
2、binlog 傳輸到 slave, 并存儲到 slave 的 relaylog 后,讀取這個 GTID 的這個值設置 gtid_next 變量,即告訴 Slave,下一個要執行的 GTID 值。
3、sql 線程從 relay log 中獲取 GTID,然后對比 slave 端的 binlog 是否有該 GTID。
4、如果有記錄,說明該 GTID 的事務已經執行,slave 會忽略。
5、如果沒有記錄,slave 就會執行該 GTID 事務,并記錄該 GTID 到自身的 binlog,在讀取執行事務前會先檢查其他 session 持有該 GTID,確保不被重復執行。
6、在解析過程中會判斷是否有主鍵,如果沒有就用二級索引,如果沒有就用全部掃描。
2.4 GTID 的優勢
1、更簡單的實現 failover,不用以前那樣在需要找 log_file 和 log_pos。
2、更簡單的搭建主從復制。
3、比傳統的復制更加安全。
4、GTID 是連續的沒有空洞的,保證數據的一致性,零丟失。
2.5 具體搭建過程
對于 GTID 的配置,主要修改配置文件中與 GTID 特性相關的幾個重要參數,mysql 版本建議 mysql-5.6.5 版本以上。
2.5.1 開啟主(master)Gtid
其主要配置如下:
[mysqld]
#GTID:
server_id=135 # 服務器 id
gtid_mode=on # 開啟 gtid 模式
enforce_gtid_consistency=on # 強制 gtid 一致性,開啟后對于特定 create table 不被支持
#binlog
log_bin=master-binlog
log-slave-updates=1
binlog_format=row # 強烈建議,其他格式可能造成數據不一致
#relay log
skip_slave_start=1
2.5.2 在 master 上進行數據備份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --stream=tar /data/backupMysql/ | | ssh root@192.168.1.7 \ gzip /data/mysql.tar.gz
2.5.3 解壓備份的數據
tar zxvf /data/mysql.tar.gz -C /data/baskup
2.5.4 配置 slave 的配置文件
[mysqld]
#GTID:
gtid_mode=on
enforce_gtid_consistency=on
server_id=143
#binlog
log-bin=slave-binlog
log-slave-updates=1
binlog_format=row # 強烈建議,其他格式可能造成數據不一致
#relay log
skip_slave_start=1
2.5.5 恢復數據
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/backup
2.5.6 獲取 GTID 節點
more /data/backup/2018-02-08_15-03-18/xtrabackup_binlog_info
2.5.7 配置主從
(1)、在 master 上授權
grant replication slave on *.* to slaveuser@ 192.168.1.7 identified by c2xhdmV1c2Vy
(2)、在 slave 上配置
stop slave;
SET GLOBAL gtid_purged= c5b5ffe7-ce66-11e7-9a19-00163e00013d:1-515758
CHANGE MASTER TO MASTER_HOST= 192.168.1.6 ,MASTER_PORT=3306,MASTER_USER= slaveuser ,MASTER_PASSWORD= c2xhdmV1c2Vy ,MASTER_AUTO_POSITION=1;
start slave;
2.6 已運行經典復制 mysql 服務器轉向 GTID 復制
a、按本文 2.5.2 描述配置參數文件;
b、所有服務器設置 global.read_only 參數,等待主從服務器同步完畢; mysql SET @@global.read_only = ON;
c、依次重啟主從服務器;
d、使用 change master 更新主從配置;mysql CHANGE MASTER TO MASTER_HOST = host, MASTER_PORT = port, MASTER_USER = user, MASTER_PASSWORD = password, MASTER_AUTO_POSITION = 1;
e、從庫開啟復制 mysql START SLAVE; f、驗證主從復制
“MySQL 基于 GTID 主從搭建怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!