mysql gtid 5.7_MySQL5.7之GTID复制
MySQL之GTID復(fù)制
一、GTID復(fù)制介紹
GTID(Global Transaction ID)是對(duì)于一個(gè)已提交事務(wù)的唯一編號(hào),并且是一個(gè)全局(主從復(fù)制)唯一的編號(hào)。
它的官方定義如下:
GTID = source_id :transaction_id
7E11FA47-31CA-19E1-9E56-C43AA21293967:29
什么是sever_uuid,和Server-id 區(qū)別?
核心特性: 全局唯一,具備冪等性
作用:主要保證主從復(fù)制中的高級(jí)的特性。
GTID:
5.6版本出現(xiàn)沒(méi)有默認(rèn)開(kāi)啟,5.7中即使不開(kāi)啟也有匿名的GTID記錄。
DUMP傳輸可以并性,sQI線程并發(fā)回放提供了。5.7.17+的版本以后幾乎都是GTID模式了。
重要參數(shù):
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
gtid-mode=on --啟用gtid類(lèi)型,否則就是普通的復(fù)制架構(gòu)
enforce-gtid-consistency=true --強(qiáng)制GTID的一致性
log-slave-updates=1 --slave更新是否記入日志
二、環(huán)境準(zhǔn)備
系統(tǒng)
mysql版本
主機(jī)IP
主機(jī)名
centos7.6
mysql-5.7.24
192.168.1.111
master
centos7.6
mysql-5.7.24
192.168.1.112
slave1
centos7.6
mysql-5.7.24
192.168.1.113
slave2
2.1、配置文件準(zhǔn)備
master:
cat > /etc/my.cnf <
[mysqld]
basedir=/data/mysql/
datadir=/data/mysql/
socket=/tmp/mysql.sock
server_id=111
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/mysql/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=master [\\d]>
EOF
slave1:
cat > /etc/my.cnf <
[mysqld]
basedir=/data/mysql
datadir=/data/mysql/
socket=/tmp/mysql.sock
server_id=112
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/mysql/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=slave1 [\\d]>
EOF
slave2:
cat > /etc/my.cnf <
[mysqld]
basedir=/data/mysql
datadir=/data/mysql/
socket=/tmp/mysql.sock
server_id=113
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/mysql/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=slave2 [\\d]>
EOF
# 創(chuàng)建數(shù)據(jù)目錄
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
mkdir -p /data/mysql/data
chown mysql.mysql -R /data/mysql/data
echo export PATH=/app/mysql/bin:$PATH >> /etc/profile
source /etc/profile
2.2、初始化數(shù)據(jù)
mysqld --initialize-insecure --user=mysql --basedir=/app/mysql --datadir=/data/mysql
mysqladmin -uroot -p password 123 (輸入完畢回車(chē)即可)
三、主從配置
3.1、主庫(kù)建立復(fù)制用戶
grant replication slave on *.* to tzh@'192.168.1.%' identified by '123';
3.2、兩個(gè)從庫(kù)
change master to
master_host='192.168.1.111',
master_user='tzh',
master_password='123' ,
MASTER_AUTO_POSITION=1; #自動(dòng)找位置點(diǎn)
start slave;
show slave status\G;
四、GTID 復(fù)制和普通復(fù)制的區(qū)別
CHANGE MASTER TO
MASTER_HOST='192.168.1.111',
MASTER_USER='tzh',
MASTER_PASSWORD='123',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=444,
MASTER_CONNECT_RETRY=10;
change master to
master_host='192.168.1.111',
master_user='tzh',
master_password='123' ,
MASTER_AUTO_POSITION=1;
start slave;
(0)在主從復(fù)制環(huán)境中,主庫(kù)發(fā)生過(guò)的事務(wù),在全局都是由唯一GTID記錄的,更方便Failover
(1)額外功能參數(shù)(3個(gè))
(2)change master to 的時(shí)候不再需要binlog 文件名和position號(hào),MASTER_AUTO_POSITION=1;
(3)在復(fù)制過(guò)程中,從庫(kù)不再依賴(lài)master.info文件,而是直接讀取最后一個(gè)relaylog的 GTID號(hào)
(4) mysqldump備份時(shí),默認(rèn)會(huì)將備份中包含的事務(wù)操作,以以下方式
SET @@GLOBAL.GTID_PURGED='8c49d7ec-7e78-11e8-9638-000c29ca725d:1';
告訴從庫(kù),我的備份中已經(jīng)有以上事務(wù),你就不用運(yùn)行了,直接從下一個(gè)GTID開(kāi)始請(qǐng)求binlog就行。
五、GTID 從庫(kù)誤寫(xiě)入操作處理
查看監(jiān)控信息:
Last_SQL_Error: Error 'Can't create database 'oldboy'; database exists' on query. Default database: 'oldboy'. Query: 'create database oldboy'
Retrieved_Gtid_Set: 71bfa52e-4aae-11e9-ab8c-000c293b577e:1-3
Executed_Gtid_Set: 71bfa52e-4aae-11e9-ab8c-000c293b577e:1-2,
7ca4a2b7-4aae-11e9-859d-000c298720f6:1
注入空事物的方法:
stop slave;
set gtid_next='99279e1e-61b7-11e9-a9fc-000c2928f5dd:3';
begin;commit;
set gtid_next='AUTOMATIC';
這里的xxxxx:N 也就是你的slave sql thread報(bào)錯(cuò)的GTID,或者說(shuō)是你想要跳過(guò)的GTID。
最好的解決方案:重新構(gòu)建主從環(huán)境,從庫(kù)不給寫(xiě)
總結(jié)
以上是生活随笔為你收集整理的mysql gtid 5.7_MySQL5.7之GTID复制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql 1046 3d000_老师
- 下一篇: Mysql商品和图片表_【mysql】数