標籤:gtid 主從複製 讀寫分離
GTID說明:
MySQL 5.6引入的GTID(Global Transaction IDs)使得其複製功能的配置、監控及管理變得更加易於實現,且更加健壯。
要在MySQL 5.6中使用複製功能,其服務配置段[mysqld]中於少應該定義如下選項:
binlog-format:二進位日誌的格式,有row、statement和mixed幾種類型;
用於啟動GTID及滿足附屬的其它需求:
log-slave-updates:當從伺服器複製時是否啟用二進位日誌
gtid-mode:是否啟用gtid功能
enforce-gtid-consistency:是否強制gtid一致性功能
report-port:是否啟用在gtid模式下從伺服器連入主伺服器時記錄從伺服器的連接埠
report-host:是否啟用在gtid模式下從伺服器連入主伺服器時記錄從伺服器的IP或主
機名
啟用此兩項,可用於實現在崩潰時保證二進位及從伺服器安全的功能;
master-info-repository:定義二進位日誌主伺服器將記錄從伺服器的複製相關資訊
記錄在檔案master.info還是記錄在表mysql.slave_master_info中
relay-log-info-repository:從伺服器的記錄
啟用複製有關的所有校正功能:
binlog-checksum:主伺服器在啟動時是否校正gtid的校正碼
master-verify-checksum
slave-sql-verify-checksum
binlog-rows-query-log-events:啟用之可用於在二進位日誌記錄事件相關的資訊,
可降低故障排除的複雜度;
log-bin:啟用二進位日誌,這是保證複製功能的基本前提;
server-id:同一個複寫拓撲中的所有伺服器的id號必須惟一;
sync-master-info:啟用之可確保無資訊丟失;
slave-paralles-workers:設定從伺服器的SQL線程數;0表示關閉多線程複製功能;
搭建服務內容說明:
三台伺服器位址為202.207.178.6(主節點(Master),202.207.178.7(從節點(Slave),202.207.178.8(前端節點),在主節點和從節點之間基於GTID實現主從複製,在前端節點上安裝mysql-proxy實現對主從節點的讀寫分離。(為避免影響,關閉防火牆和selinux)
一、安裝MySQL(我這裡通過編譯安裝MySQL-5.6.33(通用二進位格式))
Master:
1.將下載好的壓縮包解壓至/usr/local,並進入此目錄
# tar xf mysql-5.6.33-linux-glibc2.5-i686.tar.gz -C /usr/local/
# cd /usr/local/
2.為解壓後的目錄建立一個連結,並進入此目錄
# ln -sv mysql-5.6.33-linux-glibc2.5-i686 mysql
# cd mysql
3.建立MySQL使用者(使其成為系統使用者)和MySQL組
# groupadd -r -g 306 mysql
# useradd -g 306 -r -u 306 mysql
4.使mysql下的所有檔案都屬於mysql使用者和mysql組
# chown -R mysql.mysql /usr/local/mysql/*
5.建立資料目錄,並使其屬於mysql使用者和mysql組,其他人無許可權
# mkdir -p /mydata/data
# chown -R mysql:mysql /mydata/data/
# chmod o-rw /mydata/data/
6.準備就緒,開始安裝
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
7.安裝完成後為了安全,更改/usr/local/mysql下所有檔案的許可權
#chown -R root .
8.準備啟動指令碼,並使其開機自動啟動
# cp support-files/mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig --list mysqld
9.編輯資料庫設定檔
# cp support-files/my-default.cnf /etc/my.cnf
#vim /etc/my.cnf,修改和添加以下內容:
binlog-format=ROW
log-bin=master-bin
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=1
report-port=3306
port=3306
datadir=/mydata/data
socket=/tmp/mysql.sock
report-host=202.207.178.6
10.提供執行相關命令所需的環境變數
# vim /etc/profile.d/mysql.sh
添加以下內容:
export PATH=$PATH:/usr/local/mysql/bin
11.至此,MySQL服務配置完成,可以啟動測試
# service mysqld start
Slave:(方法與主相同,只是設定檔有所不同)
設定檔:
binlog-format=ROW
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=11
report-port=3306
port=3306
log-bin=mysql-bin.log #如果用到高可用功能,隨時提升一個從為主,需要啟動二進
制日誌
datadir=/mydata/data
socket=/tmp/mysql.sock
report-host=202.207.178.7
二、配置主從複製
Master:
建立複製使用者:
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repluser‘@‘202.207.178.%‘ IDENTIFIED BY ‘replpass‘;
mysql> FLUSH PRIVILEGES;
Slave:
啟動從節點的複製線程:
mysql> CHANGE MASTER TO MASTER_HOST=‘202.207.178.6‘,MASTER_USER=‘repluser‘,
MASTER_PASSWORD=‘replpass‘,MASTER_AUTO_POSITION=1;
mysql> SHOW SLAVE STATUS\G;
mysql> START SLAVE;
測試一切正常!
三、安裝mysql-proxy(我這裡使用mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz)
1、建立代理使用者
# useradd -r mysql-proxy
2、解壓相應軟體包,並建立連結
# tar xf mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz -C /usr/local/
# cd /usr/local/
# ln -sv mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit mysql-proxy
3、匯出環境變數
# cd mysql-proxy
# vim /etc/profile.d/mysql-proxy.sh
export PATH=$PATH:/usr/local/mysql-proxy/bin
4、啟動mysql-proxy
# mysql-proxy --daemon --log-level=debug
--log-file=/var/log/mysql-proxy.log --plugins="proxy"
--proxy-backend-addresses="202.207.178.6:3306"
--proxy-read-only-backend-addresses="202.207.178.7:3306"
# tail /var/log/mysql-proxy.log
此時發現已啟動!
5、在主伺服器上建立一個root使用者
mysql>GRANT ALL ON *.* TO ‘root‘@‘202.207.178.%‘ IDENTIFIED BY ‘redhat‘;
mysql> FLUSH PRIVILEGES;
6.在從節點上串連前端mysql-proxy節點測試
# mysql -uroot -p -h202.207.178.8 --port=4040
此時建立資料庫或表,可能會發現主從資料庫都有,這可能是湊巧了,因為要實現 讀寫分離要藉助lua指令碼
7、重啟mysql-proxy,並為其指明lua指令碼
# killall mysql-proxy
# mysql-proxy --daemon --log-level=debug
--log-file=/var/log/mysql-proxy.log --plugins="proxy"
--proxy-backend-addresses="202.207.178.6:3306"
--proxy-read-only-backend-addresses="202.207.178.7:3306"
--proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql- proxy/rw-splitting.lua"
# tail /var/log/mysql-proxy.log
此時,正真意義上的讀寫分離完成了!
歡迎批評指正!
本文出自 “10917734” 部落格,請務必保留此出處http://10927734.blog.51cto.com/10917734/1869205
GTID及mysql-proxy實現mysql5.6讀寫分離