centos7下配置mysql5.7.24主從複製

前置條件

準備兩臺服務器(能夠是虛擬機),系統爲centos7mysql

此處演示的兩臺服務器:192.168.8.13四、192.168.8.135sql

第一步:安裝mysql5.7.24

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

安裝成功後,啓動mysql。若是是虛擬機的話,在一臺安裝好以後,可使用克隆功能,克隆後的虛擬機也會有安裝好的mysql。數據庫

第二步:配置主從複製

配置以前,先在兩臺服務器上開啓mysql。vim

master:192.168.8.134centos

slave: 192.168.8.135服務器

配置master

  1. 建立一個名爲repl的用戶測試

    CREATE USER repl IDENTIFIED BY 'L2019Mysql@';
  2. 受權slave數據庫REPLICATION 權限ui

    GRANT REPLICATION  SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'L2019Mysql@';

    受權slave服務器能夠經過repl用戶能夠遠程訪問master,來讀取binlog中數據,實現數據同步。centos7

  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 = 'L2019Mysql@',
    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,說明主從複製配置成功

參考資料

相關文章
相關標籤/搜索