1. 程式人生 > >mysql主從複製(基於gtid)

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檢視從庫中列表

主庫中資料從庫已複製

配置萬