mysql主從複製(基於gtid)
mysql的主從複製
主伺服器將更新寫入二進位制日誌檔案,並維護檔案的一個索引以跟蹤日誌迴圈。這些日誌可以記錄傳送到從伺服器的更新.當一個從伺服器連線主伺服器時,它通知主伺服器從伺服器在日誌中讀取的最後一次成功更新的位置。從伺服器接收從那時起發生的任何更新,然後封鎖並等待主伺服器通知新的更新。
MySQL使用3個執行緒來執行復制功能(其中1個在主伺服器上,另兩個在從伺服器上。當發出START SLAVE時,從伺服器建立一個I/O執行緒,以連線主伺服器並讓它傳送記錄在其二進位制日誌中的語句。主伺服器建立一個執行緒將二進位制日誌中的內容傳送到從伺服器。
該執行緒為主伺服器上的Binlog Dump執行緒。從伺服器I/O執行緒讀取主伺服器Binlog Dump執行緒傳送的內容並將該資料拷貝到從伺服器資料目錄中的本地檔案中,即中繼日誌。第3個執行緒是SQL執行緒,是從伺服器建立用於讀取中繼日誌並執行日誌中包含的更新。
實驗環境
虛擬機器版本 redhat6.5
mysql版本 5.7.17
iptable/fireword關閉
selinux=disables
mysql主機:172.25.79.3 wyx3
mysql從機:172.25.79.5 wyx5
mysql安裝
在mysql官網上下載 mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
1.對壓縮包進行減壓
tar -xvf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
建立一個目錄 把壓縮檔案移動到該目錄下
1. mkdir mysql-5.7.17
2. mv mysql-community-* mysql-5.7.17
移動到mysql-5.7.17中進行安裝所需軟體
yum install -y mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-libs-5.7.17-1.el6.x86_64.rpm
啟動服務並修改MYSQL密碼
由於第一次啟動。mysql頁面會卡頓,等待就好,或者運用ssh遠端連線控制wyx3進行檢視 程序資訊如有mysql則表示啟動成功
kill -9 pid結束程序在重新開啟即可
檢視 mysql日誌找到mysql啟動時生成的密碼
接下來進入mysql進行修改密碼
mysql_secure_installation
輸入之前日誌中的密碼
如上所屬。出來這種報錯表示密碼強度不夠,此時設定密碼因為mysql為強加密模式,密碼組成必須為數字.大小寫字母。字元組成缺一不可
檢查
輸入密碼登陸mysql看密碼設定是否成功
wyx5同步操作
之後把mysql-5.7.17目錄發給wyx5進行響應的配置
檢查無誤後進行下面的主從複製配置
主從複製
wyx3主伺服器
編輯檔案
[[email protected] ~]# vim /etc/my.cnf
新增
server-id=1 log-bin=mysql-bin
之後重新啟動mysql
進入資料庫進行建立使用者
mysql> grant replication slave on *.* to [email protected]'172.25.79.%' identified by 'wyxWYX123.';
檢視複製起始點
mysql> show master status -> ;
建立一個數據庫並寫入資料
mysql> create database wwyx;
編輯內容
mysql> create table userlb ( -> userid varchar(14) not null, -> username varchar(14) not null); Query OK, 0 rows affected (1.52 sec)
在表中新增資訊
mysql> insert into userlb value ('05158056','wyx'); Query OK, 1 row affected (0.17 sec)
mysql> insert into userlb value ('05158063','wzm'); Query OK, 1 row affected (0.25 sec)
檢視
mysql> select * from usertb(查看錶中所有資訊)
wyx5從庫;
編輯檔案
[[email protected] mysql-5.7.17]# vim /etc/my.cnf
寫入server-id=2(主機從機id不能一樣)
重新啟動mysql服務
測試主機wyx3上的使用者能否登陸
[[email protected] ~]# mysql -h 172.25.79.3 -u wyx -pwyxWYX123.
退出用root使用者進行登陸設定從庫並開啟slave模式
change master to master_host='172.25.79.3(主庫Ip)', master_user='wyx'(使用者名稱), master_password='wyxWYX123.(建立的使用者密碼)', master_log_file='mysql-bin.000005'(主庫的檔名), master_log_pos=446(主庫的POS值); Query OK, 0 rows affected, 2 warnings (0.28 sec)
開啟slave並檢視slave資訊
mysql> start slave;
mysql> show slave status\G;
當Slave_IO_Running: Yes Slave_SQL_Running: Yes時表示服務正常開啟
如出現
Slave_IO_Running: Connecting
錯誤型別無非就3種
1.網路不同
2.編輯change master to時出錯(1.密碼錯誤 2.使用者名稱錯誤)
3.pos值不對
一一檢視即可解決
檢視從庫是否以複製主庫中資訊
mysql> show databases;
檢視資訊內容是否一致
檢視主庫資訊
如果遇到下圖情況主庫中的wyx表在從庫中沒有顯示
注意複製點 pos開始值以及檔案是多少就從那裡開始顯示之前的列表不顯示
Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 446
主庫與從庫資訊一直
在主庫中wwyx userid表中新增資訊
檢視從庫是否同步複製
2表對比一直表示主從複製以實現
基於gtid模式的主從複製
主機從機都進行如下操作
首先修改配置檔案
[[email protected] mysql]# vim /etc/my.cnf
新增
gtid_mode=ON enforce-gtid-consistency=true
重啟服務
[[email protected] mysql]# /etc/init.d/mysqld restart
在wyx5從機上停止slave 重新配置
mysql> stop slave
change master to master_host='172.25.79.3', master_user='wyx', master_password='wyxWYX123.', master_auto_position=1;
開啟salve賓檢視
測試
在主機wyx3上新增資料並查看錶中資料
c檢視從庫中列表
主庫中資料從庫已複製
配置萬