1. 程式人生 > 實用技巧 >MySQL主從複製 搭建

MySQL主從複製 搭建

節點設定:

  系統:CentOS7

  MySQL:最新

  192.168.100.101  node01    主

  192.168.100.102  node02    從

  192.168.100.103  node03    從

簡單原理:

  

步驟:

 第一步:安裝mysql(yum源安裝,最簡單,可自動替換mariaDB)

  1.安裝wget命令 --CentOS7不能直接使用yum安裝MySQL

    yum install -y wget 

  2.下載rpm源   --此處為最新mysql版本

    wgethttp://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm

  3.解壓rpm

    rpm -ivh mysql57-community-release-el7-8.noarch.rpm

  3.安裝mysql

    yum -y install mysql-server

  4.檢視臨時密碼

    cat /var/log/mysqld.log  *A temporary password is generated for root@localhost:******

  5.修改root密碼

    set global validate_password_policy=0;
    set global validate_password_length=1;

    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

  6.可遠端訪問

    grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
    flush privileges;

  7.啟動

    systemctl start mysqld.service

    預設配置檔案路徑:
    配置檔案:/etc/my.cnf
    日誌檔案:/var/log/var/log/mysqld.log
    服務啟動指令碼:/usr/lib/systemd/system/mysqld.service
    socket檔案:/var/run/mysqld/mysqld.pid

  第二步:克隆虛擬機器node02,node03

  第三步:主從配置

    1.在3個mysql上建庫(相同的庫)

      create database tmp;

    2.修改my.cnf配置檔案

      node01(主):

      my.cnf新增

        log-bin=master-bin   --bin_log名稱

        binlog-format=ROW   --共3種模式,ROW指的是把改變的內容複製過去,而不是把命令在從伺服器上執行一遍,statement指的是在主伺服器上執行的SQL語句,在從伺服器上執行同樣的語句。MySQL預設採用基於語句的複製,效率比較高。mixed指的是預設採用基於語句的複製,一旦發現基於語句的無法精確的複製時,就會採用基於行的複製。

        server-id=1      --要求各個伺服器的id必須不一樣

        binlog-do-db=tmp   --同步資料庫名稱

      mysql中配置

        set global validate_password_policy=0;    --授權操作
        set global validate_password_length=1;    
        grant replication slave on *.* to 'root'@'%' identified by '123456';    --允許從伺服器可以複製內容
        flush privileges;               --重新整理許可權

      重啟mysql服務:systemctl restart mysqld.service

      登入mysql:mysql -uroot -p123456

      檢視binlog名稱及位置:show master status\G    --複製一下binlog名稱以及position位置

      node02(從):

       my.cnf中     

        log-bin=master-bin              --二進位制檔案的名稱
        binlog-format=ROW             --二進位制檔案的格式
        server-id=2                 --伺服器的id

       mysql中

        change master to master_host='192.168.100.101(主節點IP)',master_user='root',master_password='123456',master_port=3306,master_log_file='master-bin.000002(主節點binlog名稱)',master_log_pos=154(position);

        start slave;

      

      node03(從):

       my.cnf中     

        log-bin=master-bin              --二進位制檔案的名稱
        binlog-format=ROW             --二進位制檔案的格式
        server-id=3                 --伺服器的id

       mysql中

        change master to master_host='192.168.100.101(主節點IP)',master_user='root',master_password='123456',master_port=3306,master_log_file='master-bin.000002(主節點binlog名稱)',master_log_pos=154(position);

        start slave;

常見問題:

  wget不能安裝(網路問題)

    ①vi /etc/sysconfig/network-scripts/ifcfg-ens33

     ONBOOT=yes

     MM_CONTROLLED=no

    ②vi /etc/resolve.cnf

     nameserver=8.8.8.8

  slave_IO_Running:No

    ①slave設定的監控主節點的binlog檔案配置名稱出錯或位置出錯,重新在從節點的mysql中設定主節點資訊

      stop slave

      change master to master_host='192.168.100.101(主節點IP)',master_user='root',master_password='123456',master_port=3306,master_log_file='master-bin.000002(主節點binlog名稱)',master_log_pos=154(position);

      start salve

    ②不同節點的UUID相同了,檢視不同節點的/var/lib/mysql/auto.cnf是否相同

    如果相同,則將從節點的auto.cnf刪除,它會重新生成一個新的UUID的

  Slave_SQL_Running:No  

    stop slave;
    SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

    start slave;