首頁  >  文章  >  資料庫  >  歸納整理之MySQL基於GTID主從搭建

歸納整理之MySQL基於GTID主從搭建

WBOY
WBOY轉載
2022-08-26 11:56:332469瀏覽

推薦學習:mysql影片教學

#用xtarbackup來同步數據,然後基於GTID來設定主從。

一、用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-71CA336262536262963E11FA47-71CA-1362913223293630

## 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@&#39;192.168.1.7&#39;  identified by "c2xhdmV1c2Vy";

(2)、在slave上設定

stop slave;
SET GLOBAL gtid_purged="c5b5ffe7-ce66-11e7-9a19-00163e00013d:1-515758";
CHANGE MASTER TO MASTER_HOST=&#39;192.168.1.6&#39;,MASTER_PORT=3306,MASTER_USER=&#39;slaveuser&#39;,MASTER_PASSWORD=&#39;c2xhdmV1c2Vy&#39;,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视频教程

以上是歸納整理之MySQL基於GTID主從搭建的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除