mysql主備同步:
dd1主:yum install mysql-server -y
vim /etc/my.cnf
server-id=1
log-bin=mysql-bin 啓動二進制日誌系統
binlog-do-db=test 需要同步的數據庫
binlog-ignore-db=mysql 禁止同步的數據庫
/etc/init.d/mysqld start
show master status
mysql> GRANT REPLICATION SLAVE ON *.* TO dd@'172.25.254.%'IDENTIFIED BY 'redhat' 創建同步用戶並給予權限
mysql>Flush privileges
dd2備:yum install mysql-server -y
測試 看能不能遠程登陸訪問:mysql -h 172.25.254.11dd -p redhat
vim /etc/my.cnf
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
show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes 如果都是 yes,表示從庫的 I/O,Slave_SQL 線程都正確開啓.表明數據庫正在同步
測試:
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
注意:myslq密碼在啓動時初始化生成
mysql -p
alter userroot@localhost identified by 'Westos+007' (注意新的密碼格式大小寫特殊字符)
dd1(主)
vim /etc/my.cnf
gtid-mode=ON
enforce-gtid-consistency
log-bin=mysql-bin
binlog-do-db=test
log-slave-updates slave更新是否記錄日誌
dd2(備)
vim /etc/my.cnf
gtid-mode=ON
enforce-gtid-consistency
#log-bin=mysql-bin
#binlog-do-db=test
log-slave-updates
/etc/init.d/mysqld restart (兩臺同時)
dd1:mysql -p
grant replicationslave on *.* to dd@'172.25.42.%' identified by 'Westos+007'
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;
(注意和前一個主備設置的區別就不用手動添加要同步的日誌自動定位因爲在生產環境中備份服務器很可能不止一臺這樣每一分裏面的同步日誌是不同的無法定位所以gtid可以不用指定binlog和主mysql的讀取指針定位)
start slave
show slave status\G
同步測試:
主備mysql半同步傳輸(io)(一個binlog 返回一個ACK 主mysql上面的數據纔會提交)異步傳輸(不需要返回ACK就提交)
主:show plugins
install pluginrpl_semi_sync_master soname 'semisync_master.so'
set globalrpl_semi_sync_master_enabled=1;
show global statuslike '%semi%';
show globalvariables like '%rpl_semi%';
從:show plugins
install pluginrpl_semi_sync_master soname 'semisync_master.so';
install pluginrpl_semi_sync_slave soname 'semisync_slave.so';
show global statuslike '%semi%';
show globalvariables like '%rpl_semi%';
測試半同步,異步的切換:
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
cd /usr/local/mysql-proxy/share/dos
vim rw-splitting.lua
cd/usr/local/mysql-proxy
mkdir logs
cd/usr/local/mysql-proxy/bin
./mysql-proxy --defaults-file=mysql-proxy.conf
chmod 600mysql-proxy.conf
dd1:
grant all on *.* to proxy@'172.25.254.%'identified by'Westos+007';
測試:
通過代理訪問數據庫實現讀寫分離: