mysql 主從分離 讀寫分離(mysql-proxy)

mysql主備同步:

dd1主:yum install mysql-server -y

vim /etc/my.cnf

wKioL1jbGLPz7bZeAAE8y9rmcKs492.png-wh_50

server-id=1

log-bin=mysql-bin 啓動二進制日誌系統

binlog-do-db=test 需要同步的數據庫

binlog-ignore-db=mysql 禁止同步的數據庫

 

/etc/init.d/mysqld start

show master status

wKiom1jbGMCibw-wAAIF9nUg6E4316.png-wh_50

mysql> GRANT REPLICATION SLAVE ON *.* TO dd@'172.25.254.%'IDENTIFIED BY 'redhat'  創建同步用戶並給予權限

mysql>Flush privileges

wKioL1jbGMuxXm_zAADwaXAvICI834.png-wh_50

dd2備:yum install mysql-server -y

測試 看能不能遠程登陸訪問:mysql -h 172.25.254.11dd -p redhat

wKiom1jbGNXhKs-yAAGSMHxHokU483.png-wh_50

vim /etc/my.cnf

wKioL1jbGN2h9dwSAAEgHEKTgns794.png-wh_50

server-id=2

read-only

 

/etc/init.d/mysqld start

 

在同步之前確保 master 與 slave 上的數據一致性

 

mysql> change master tomaster_host='172.25.254.11', master_user='dd',

master_password='redhat',master_log_file='mysql-bin.000003', master_log_pos=106;

slave start

wKiom1jbGObQp_CZAAKKzvB3PZM656.png-wh_50

show slave status\G

 

Slave_IO_Running: Yes

Slave_SQL_Running: Yes   如果都是 yes,表示從庫的 I/O,Slave_SQL 線程都正確開啓.表明數據庫正在同步

wKioL1jbGPGh6d3JAAHPVWx62sA334.png-wh_50

測試:

 

 

 

wKioL1jbGQmQCqC7AAHPVWx62sA772.png-wh_50

wKioL1jbGQqT_08lAAFpkAsn37Q825.png-wh_50

wKiom1jbGR-TElxUAAFctEuWDoo008.png-wh_50

wKioL1jbGSDySKmrAAEfXUb0KYo791.png-wh_50

wKiom1jbGSLj9Qg6AAFDDebrVyM258.png-wh_50

 

mysql數據庫的主備(gtid方式)

 

gtid是一個基於原始mysql服務器生成的一個已經被成功執行的全局事務id,它由服務器id及事物id組合而成,這個全局事物id不僅僅在原始服務器上唯一,在所有存在主從關係的mysql服務器也是唯一的

 

安裝軟件包:(兩臺數據庫同時做)

 

tar xfmysql-5.7.17-1.el6.x86_64.rpm-bundle.tar

 

yum install -ymysql-community-client-5.7.17-1.el6.x86_64.rpmmysql-community-common-5.7.17-1.el6.x86_64.rpmmysql-community-libs-5.7.17-1.el6.x86_64.rpmmysql-community-libs-compat-5.7.17-1.el6.x86_64.rpmmysql-community-server-5.7.17-1.el6.x86_64.rpm

yum install * -y

wKioL1jbGanDpGREAAIERS_0eU0535.png-wh_50

wKiom1jbGauj6oktAAHrCpEAAno545.png-wh_50


注意:myslq密碼在啓動時初始化生成

mysql -p

alter userroot@localhost identified by 'Westos+007' (注意新的密碼格式大小寫特殊字符)

wKiom1jbGcLxpIt1AADYZvsRBXU132.png-wh_50

wKiom1jbGcPgdcUWAADpeg747qo355.png-wh_50

 

dd1()

vim /etc/my.cnf

gtid-mode=ON

enforce-gtid-consistency

log-bin=mysql-bin

binlog-do-db=test

log-slave-updates  slave更新是否記錄日誌

wKiom1jbGeLT_hUVAACwmWJmqMw165.png-wh_50

wKioL1jbGePCYaNLAADcwRL2yHI020.png-wh_50

dd2()

vim /etc/my.cnf

gtid-mode=ON

enforce-gtid-consistency

#log-bin=mysql-bin

#binlog-do-db=test

log-slave-updates

wKiom1jbGfKCKz_9AAC3e4vm3ZY641.png-wh_50

/etc/init.d/mysqld restart (兩臺同時)   

 

dd1:mysql -p

grant replicationslave on *.* to dd@'172.25.42.%' identified by 'Westos+007'

wKioL1jbGgCjzHChAADgxssai5E952.png-wh_50

 

dd2:mysql -p

mysql -u dd -h172.25.42.10 -p (測試)

change master tomaster_host='172.25.42.10',master_user='dd',master_password='Westos+007',master_auto_position=1;

wKiom1jbGi3hvdZaAAEVDV8SQNo025.png-wh_50

(注意和前一個主備設置的區別就不用手動添加要同步的日誌自動定位因爲在生產環境中備份服務器很可能不止一臺這樣每一分裏面的同步日誌是不同的無法定位所以gtid可以不用指定binlog和主mysql的讀取指針定位)

start slave

 show slave status\G

wKioL1jbGjjwiXDkAAEMXp7d_pc681.png-wh_50

同步測試:

wKiom1jbGnbxqcWFAADxomMX268186.png-wh_50

wKioL1jbGnfABDv5AAC8ITghRmY747.png-wh_50

wKiom1jbGnjRCjraAAD86uo87-c736.png-wh_50

wKiom1jbGnmCgwfkAADFNsTxoiY269.png-wh_50

wKioL1jbGnmikMUeAACyvWYgxJ4795.png-wh_50

 

主備mysql半同步傳輸(io)(一個binlog 返回一個ACK mysql上面的數據纔會提交)異步傳輸(不需要返回ACK就提交)

show plugins

wKioL1jbGobBqL-lAADpiQco_VE750.png-wh_50

install pluginrpl_semi_sync_master soname 'semisync_master.so'

wKiom1jbGpDCpFHeAADkQZQpvZw562.png-wh_50

set globalrpl_semi_sync_master_enabled=1;

wKiom1jbGprjVPUoAADvO5LDxjw406.png-wh_50

 

show global statuslike '%semi%';

show globalvariables like '%rpl_semi%';

 

show plugins

install pluginrpl_semi_sync_master soname 'semisync_master.so';

wKioL1jbGqPQwpKRAADlcoS-5XQ840.png-wh_50

install pluginrpl_semi_sync_slave soname 'semisync_slave.so';

show global statuslike '%semi%';

show globalvariables like '%rpl_semi%';

wKioL1jbGrHRrm2eAAEEjarmIP4253.png-wh_50

測試半同步,異步的切換:

stop slaveio_thread

insert intotest.usertb values ('dd331','41113331');

發現提交等待10s 備機無相應(ACK),則轉爲異步

 

多線程並行複製:(針對 sql 只在slave上面做)

備:vim /etc/my.cnf

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=16

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON

/etc/init.d/mysqldrestart

mysql -p

show processlist (查看線程)

 

 

mysql 讀寫分離mysql-proxy

主機:dd1.example.com 172.25.254.11

備機:dd2.example.com 172.25.254.12

管理機:dd3.example.com 172.25.254.13

 

dd3:

tar zxfmysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

mvmysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/

cd /usr/local/

ln -smysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy

cd /usr/local/mysql-proxy/bin

vim mysql-proxy.conf

[mysql-proxy]

user=root

#admin-username=lin3615

#admin-password=123456

#proxy-address=192.168.179.142:4040

proxy-read-only-backend-addresses=172.25.0.4

proxy-backend-addresses=172.25.0.3

proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

#admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua

log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log

log-level=info

daemon=true

keepalive=true

wKiom1jbGr6jJ8r5AADsy_2FUfg126.png-wh_50

cd /usr/local/mysql-proxy/share/dos

vim rw-splitting.lua

wKioL1jbGsniTWaFAAD1tqoldR8871.png-wh_50

cd/usr/local/mysql-proxy

mkdir logs

cd/usr/local/mysql-proxy/bin

./mysql-proxy  --defaults-file=mysql-proxy.conf

chmod 600mysql-proxy.conf

wKiom1jbGtPQWatmAAAy_7z9pSo905.png-wh_50

dd1:

grant all on *.* to proxy@'172.25.254.%'identified by'Westos+007';

測試:

wKioL1jbGt3S8iwoAAFPIbq9IVM037.png-wh_50

 

通過代理訪問數據庫實現讀寫分離

 

 

 

 

wKiom1jbGuniQoeBAAEQJzypHic459.png-wh_50


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章