############################################################node
##############mysql主從架構#################mysql
Server11.linux
yum install mysql-server -ysql
vim /etc/my.cnf數據庫
log-bin=mysql-bin #啓動二進制日誌系統vim
binlog-do-db=test #二進制須要同步的數據庫名,若是須要同步多個庫,例如要再同步 westos服務器
庫,再添加一行「binlog-do-db=westos」,以此類推session
server-id=3架構
#必須爲 1 到 232–1 之間的一個正整數值app
binlog-ignore-db=mysql #禁止同步 mysql 數據庫
/etc/init.d/mysqld start
Mysql
查看和受權
Server12
yum install mysql-server -y
vim /etc/my.cnf添加兩行
vsymbolic-links=0
server-id=4
驗證受權以後是否能夠登錄
/etc/init.d/mysqld start
Mysql
出現說明成功了
測試
Server11
mysql
登錄server12上的mysql
##############################################################
###############mysql的gtid機制#############
Server11.和server12相同
/etc/init.d/mysqld stop
yum remove mysql-server -y
rm -fr /var/lib/mysql/*
tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
yum install -y mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm
/etc/init.d/mysqld start
cat /var/log/mysqld.log | grep password 初始化密碼在這
mysql -p
退出而且關掉mysql
Server11
vim /etc/my.cnf
Server12
vim /etc/my.cnf
兩個服務器都打開mysql
Server11
受權
Server12
查看是否受權成功
添加主服務器的相關信息
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.45.11
Master_User: student ####主服務起的IP、用戶名和端口信息
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 450
Relay_Log_File: server12-relay-bin.000002
Relay_Log_Pos: 663
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes IO和SQL線程開啓
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 450
Relay_Log_Space: 873
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 3
Master_UUID: ae5b62c7-1548-11e7-a52c-525400cc54de
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: ae5b62c7-1548-11e7-a52c-525400cc54de:1
Executed_Gtid_Set: ae5b62c7-1548-11e7-a52c-525400cc54de:1
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
查看 /var/lib/mysql/mysqlbinlog mysql-bin.000003
#170330 8:41:02 server id 4 end_log_pos 194 CRC32 0xeb5aadd3 Previous-GTIDs
# ae5b62c7-1548-11e7-a52c-525400cc54de:1-5
兩個gtid應該同樣
Sever11
建立庫而且存入相關信息
Server12查看
主從複製成功
##########mysql主從的半同步和異步傳輸日誌文件數據##########
Mysql版本必須時5.5以上
接下來分別在主庫和從庫執行install plugin 命令加載插件,而且開啓半同步插件,查看插件的安裝狀況
主庫
從庫
安裝狀況
Rpl_semi_sync_master_timeout表示主庫等待從庫的超時時間,若是在時間內沒有收到從庫迴應,複製切換到異步模式
在從庫上中止io線程,在此時主庫內同步數據,在10秒內自動切換到異步同步數據
然而下次繼續同步數據時,便不用在等待,直接爲異步同步,若打開從庫的io線程,主庫又恢復半同步複製數據
在mysql啓動前將全局變量寫入到配置文件中,以避免忘記設置使半同步不生效
主庫配置文件
[mysqld]
rpl_semi_sync_master_enabled=1
rpl__semi_sync_master_timeout=10000 ###10秒
從庫配置文件
[mysqld]
rpl_semi_sync_slave_enabled=1
主庫:
mysql> show global variables like '%rpl_semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.01 sec)
##IO線程關閉後,半同步狀態檢測的延時(10000ms)
mysql> show global status like '%rpl_semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
主庫
mysql> show global variables like '%rpl_semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+-------------------------------------------+------------+
8 rows in set (0.01 sec)
mysql> show global status like '%rpl_semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 1 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | OFF |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
| Rpl_semi_sync_slave_status | OFF |
+--------------------------------------------+-------+
############sql線程的並行(多)線程##############
IO線程用於同步日誌二進制文件數據
sql線程(本來爲單線程)用於回放日誌,將二進制文件的在slave上進行再次操做。sql線程在slave上
vim /etc/my.cnf##添加
15 slave-parallel-type=LOGICAL_CLOCK
16 slave-parallel-workers=16
17 master_info_repository=TABLE
18 relay_log_info_repository=TABLE
19 relay_log_recovery=ON
/etc/init.d/mysqld restart
mysql -p
Msyql-proxy讀寫分離
1.mysql proxy
tar -zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
cd /usr/local/mysql-proxy
mkdir lua
Mkdir logs
cp /share/doc/mysql-proxy/rw-splitting.lua ./lua
cp /share/doc/mysql-proxy/admin-sql.lua ./lua
vim /usr/local/mysql-proxy/bin/mysql-proxy.conf
[mysql-proxy]
user=root
admin-username=proxy
admin-password=Westos+007
proxy-address=172.25.45.13:4040
proxy-read-only-backend-addresses=172.25.45.12
proxy-backend-addresses=172.25.45.11
proxy-lua-script=/usr/local/mysql-proxy/lua/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
chmod 660 /usr/local/mysql-proxy/bin/mysql-proxy.conf
vim /usr/local/mysql-proxy/lua/rw-splitting.lua
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,
max_idle_connections = 1,
is_debug = false
改成1,方便測試
啓動MYSQL-PROXY
/usr/lo/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/bin/mysql-proxy.conf
netstat -tupln | grep 4040
測試讀寫分離
主服務器
grant all on *.* to proxy@'172.25.45.13' identified by 'Westos+007';
使用客戶端鏈接mysql-proxy
mysql -u proxy -h 172.25.45.13 -P 4041 -pWestos+007
################MHA###############3
在作好mysql的gtid機制和半同步的基礎上
Server1:172.25.45.11 master
Server2:172.25.45.12slave(主從)
Server4:172.25.45.13 slave 從
Server5:172.25.45.14 manager
1.配置三臺機子ssh無密碼鏈接:
ssh-keygen ##每臺機子都要生成本身的公祕鑰對
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.45.12
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.45.13
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.45.14
每臺機子都要作上述操做
2.安裝mha
全部節點都要安裝
yum install -y perl-DBD-MySQL
rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
管理節點
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
rpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm
配置mysql的主從replication:
主從服務器都須要有 vim /etc/my.cnf
binlog-do-db=test
replication-do-db=test
其中在從服務器的配置還須要多添加一行:
Relay_log_purge=0
通常狀況下,主服務器須要包含binlog-do-db=test,從服務器須要包含replicate-do-db=test,這樣主從就能夠同步了。可是隻是這樣配置的話,會報如下錯誤
All log-bin enabled servers must have same binlog filtering rules (same binlog-do-db and binlog-ignore-db). Check SHOW MASTER STATUS output and set my.cnf correctly
3.配置mha manage
1,添加管理帳號,每臺機器都執行如下操做
grant all privileges on *.* to lzt@'172.25.45.%' identified by 'Westos+007';
flush privileges;
2,配置/etc/mha/app1.cnf,只在管理端作,manage這臺機器
mkdir /etc/mha
mkdir -p /var/log/mha/app1
vim /etc/mha/app1.cnf ##配置以下:
[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1.log
master_binlog_dir=/var/lib/mysql
user=proxy
Password=Westos+007
ping_interval=2
repl_password=Westos+007
repl_user=lzt
ssh_user=root
[server1]
hostname=172.25.45.11
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=172.25.45.12
port=3306
[server3]
check_repl_delay=0
hostname=172.25.30.45.12
port=3306
4.檢測mha是否配置成功:
A.檢查ssh登錄:
masterha_check_ssh --conf=/etc/mha/app1.cnf
B.檢測mha manage的監控情況:
3,管理端經常使用命令
masterha_check_ssh 檢查MHA的SSH配置情況
masterha_check_repl 檢查MySQL複製情況
masterha_manger 啓動MHA
masterha_check_status 檢測當前MHA運行狀態
masterha_master_monitor 檢測master是否宕機
masterha_master_switch 控制故障轉移(自動或者手動)
masterha_conf_host 添加或刪除配置的server信息
4.切換:
關閉master ,切換至主備