GTID及mysql-proxy實現mysql5.6讀寫分離

來源:互聯網
上載者:User

標籤: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讀寫分離

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.