大衆流的mysql主從複製

MySQL Replication

主從複製(也稱 AB 複製)允許將來自一個MySQL數據庫服務器(主服務器)的數據複製到一個或多個MySQL數據庫服務器(從服務器)。

根據配置,您可以複製數據庫中的所有數據庫,所選數據庫甚至選定的表。

MySQL主從複製的優點包括:

  • 橫向擴展解決方案 - 在多個從站之間分配負載以提高性能。在此環境中,所有寫入和更新都必須在主服務器上進行。但是,讀取可以在一個或多個從設備上進行。該模型可以提高寫入性能(因爲主設備專用於更新),同時顯着提高了越來越多的從設備的讀取速度。
  • 數據安全性 - 因爲數據被複制到從站,並且從站可以暫停複製過程,所以可以在從站上運行備份服務而不會破壞相應的主數據。
  • 分析 - 可以在主服務器上創建實時數據,而信息分析可以在從服務器上進行,而不會影響主服務器的性能。
  • 備份 - 可以使用從服務器數據進行備份,減輕主服務器的壓力。

在這裏插入圖片描述
前提是作爲主服務器角色的數據庫服務器必須開啓二進制(binlog)日誌
原理
主服務器上面的任何修改都會保存在二進制日誌( Bin-log日誌) 裏面。
從服務器上面啓動一個I/O線程, 連接到主服務器上面請求讀取二進制(Bin-log)日誌,然後把讀取到的二進制日誌寫到本地的Realy-log(中繼日誌)裏面。
從服務器上面同時開啓一個SQL線程,讀取Realy-log(中繼日誌),如果發現有更新立即把更新的內容在本機的數據庫上面執行一遍。

基於無數據的情況下 就是mysql剛安裝的 裏面沒有變動數據
有數據的配置
配置步驟:

實驗:
兩臺虛擬機(一主一從)
兩臺都配置hosts解析
# vim /etc/hosts  寫入如下解析
192.168.62.152 mysql-master
192.168.62.151 mysql-slave1

兩端關閉防火牆,selinux

主服務器

  1. 在主服務器上,您必須啓用二進制日誌記錄並配置唯一的服務器ID。
    編輯主服務器的配置文件 /etc/my.cnf,添加如下內容
添加配置
[mysqld]
log-bin=/var/log/mysql/mysql-bin   #billog二進制日誌存放位置
server-id=1                         #server id 

創建日誌目錄並賦予權限

[root@mysql-1 ~]# mkdir /var/log/mysql
[root@mysql-1 ~]# chown mysql.mysql /var/log/mysql

重啓服務

[root@mysql-1 ~]# systemctl restart mysqld

2.應該創建一個專門用於複製數據的用戶

每個從服務器需要使用MySQL 主服務器上的用戶名和密碼連接到主服務器。

例如,計劃使用用戶 tom 可以從任何主機上連接到 master 上進行復制操作, 並且用戶 tom 僅可以使用複製的權限。

mysql> GRANT REPLICATION SLAVE ON *.*  TO  'tom'@'%'  identified by '密碼';
mysql>flush privileges;   #刷新權限
將複製的權限給與此用戶

3.在從服務器上使用剛纔創建的用戶進行測試連接

[root@mysql-slalve ~]# mysql -utom -p'密碼' -hmysql-master1
測試是否連通,連通退出即可

進入數據庫查看主服務器的binlog日誌的名稱和位置
從服務器會用

mysql> show master status \G

在這裏插入圖片描述
從服務器設置

/etc/my.cnf配置文件

[mysqld]
server-id=2  #只要與主服務器不同就可以
重啓服務

然後進入從服務數據庫

mysql> CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='tom',
MASTER_PASSWORD='密碼',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=681;

mysql> start slave;

以下可選
查看當前只讀的狀態
mysql>show variables like '%renad_only%';
設置普通用戶只讀
mysql>set global read_only=1;
設置超級用戶只讀
mysql>set global super_read_only=1;

在這裏插入圖片描述
檢查是否成功

在從服務上執行如下操作,加長從服務器端 IO線程和 SQL 線程是否是 OK

mysql> show slave status\G

輸出結果中應該看到 I/O 線程和 SQL 線程都是 YES, 就表示成功。

執行此過程後,在主服務上操作的修改數據的操作都會在從服務器中執行一遍,這樣就保證了數據的一致性。
在這裏插入圖片描述

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