1. 程式人生 > >centos7下配置mysql5.7.24主從複製

centos7下配置mysql5.7.24主從複製

前置條件

準備兩臺伺服器(可以是虛擬機器),系統為centos7

此處演示的兩臺伺服器:192.168.8.134、192.168.8.135

第一步:安裝mysql5.7.24

先在兩臺伺服器上安裝mysql5.7.24,安裝可參考:

安裝成功後,啟動mysql。如果是虛擬機器的話,在一臺安裝好之後,可以使用克隆功能,克隆後的虛擬機器也會有安裝好的mysql。

第二步:配置主從複製

配置之前,先在兩臺伺服器上開啟mysql。

master:192.168.8.134

slave: 192.168.8.135

配置master

  1. 建立一個名為repl的使用者

    CREATE USER repl IDENTIFIED BY '
    [email protected]
    ';
  2. 授權slave資料庫REPLICATION 許可權

    GRANT REPLICATION  SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY '[email protected]';

    授權slave伺服器可以通過repl使用者可以遠端訪問master,來讀取binlog中資料,實現資料同步。

  3. 修改my.cnf配置檔案

    sudo vim /etc/my.cnf

    在/etc/my.cnf的[mysqld]下加入如下配置:

    # 啟用二進位制日誌檔案
    log-bin=mysql-bin
    # 伺服器唯一ID
    server-id=1

    log-bin: 開啟binlog

    server-id:指定伺服器id(唯一,不能與slave伺服器server-id相同)

  4. 重啟mysql

    sudo systemctl restart mysqld
  5. 檢視master二進位制檔名稱和偏移量

    show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+

    此處二進位制檔名稱為:mysql-bin.000002,偏移量為:154

配置slave

  1. 修改my.cnf配置檔案

    sudo vim /etc/my.cnf

    在/etc/my.cnf的[mysqld]下加入如下配置:

    # 伺服器唯一ID
    server-id=2
    # 開啟中繼日誌
    relay-log=slave-relay-bin
    # 開啟中繼日誌索引
    relay-log-index=slave-relay-bin.index
    # 設定只讀
    read_only=1

    此處設定只讀是因為,在主從複製的情況下,通常資料寫入master,從slave中讀取資料。

  2. 重啟mysql

    sudo systemctl restart mysqld
  3. 建立同步連線

    CHANGE MASTER TO master_host = '192.168.8.134',
    master_port = 3306,
    master_user = 'repl',
    master_password = '[email protected]',
    master_log_file = 'mysql-bin.000002',
    master_log_pos = 154;

    master_host: master伺服器ip

    master_port: master上mysql服務埠

    master_user: 配置master時建立的repl使用者

    master_password: master上repl使用者密碼

    master_log_file: 配置master第5步查詢到的二進位制日誌檔名稱

    master_log_pos: 配置master第5步查詢到的偏移量

  4. 啟動slave

    start slave;
  5. 檢視slave狀態

    show slave status \G

    此時Slave_IO_Running、Slave_SQL_Running值都是Yes,說明主從複製配置成功

測試

在master上新建一個名為test的資料庫

create database test;

在slave上檢視

show databases;

可以看到test資料庫已經同步到slave上了

可能出現的錯誤

  1. [ERROR] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593

我在檢視slave狀態時,發現 Slave_IO_Running: No

檢視日誌

tail -f /var/log/mysqld.log

發現上面的錯誤。

原因:我在master: 192.168.8.134 上安裝好mysql之後,使用克隆功能,建立了slave:192.168.8.135,導致master和slave上的server-uuid相同。

在master和slave上分別檢視server-uuid

sudo cat /var/lib/mysql/auto.cnf

發現值都是:server-uuid=a1ae101b-13e3-11e9-8f07-000c29b2fc93

解決方法:

先重新命名slave上的auto.cnf

sudo mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bk

然後重啟slave上的mysql

sudo systemctl restart mysqld

檢視slave狀態

show slave status \G

此時Slave_IO_Running、Slave_SQL_Running值都是Yes,說明主從複製配置成功

參考資料