MySQL5.7.17 主從同步配置


1.1 關閉防火牆
Service iptables status // 查看防火牆狀態
Service iptables stop // 防火牆啟動狀態,則運行此命令停止防火牆服務
1.2 禁掉 selinux
/usr/sbin/sestatus -v // 查看 selinux 狀態
SELinux status:                 disabled// 關閉
SELinux status:                     enabled// 啟動
vim /etc/selinux/config 需要重啟機器
#SELINUX=enforcing
#SELINUXTYPE=targeted
SELINUX=disabled
setenforce 0 臨時關閉,不需要重啟機器




主從復制的原理:
 
分為同步復制和異步復制,實際復制架構中大部分為異步復制。 復制的基本過程如下:
1).Slave上面的IO進程連接上Master,並請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內容;
2).Master接收到來自Slave的IO進程的請求后,通過負責復制的IO進程根據請求信息讀取制定日志指定位置之后的日志信息,返回給Slave 的IO進程。返回信息中除了日志所包含的信息之外,還包括本次返回的信息已經到Master端的bin-log文件的名稱以及bin-log的位置;
3).Slave的IO進程接收到信息后,將接收到的日志內容依次添加到Slave端的relay-log文件的最末端,並將讀取到的Master端的 bin-log的文件名和位置記錄到master-info文件中,以便在下一次讀取的時候能夠清楚的告訴Master“我需要從某個bin-log的哪個位置開始往后的日志內容,請發給我”;
4).Slave的Sql進程檢測到relay-log中新增加了內容后,會馬上解析relay-log的內容成為在Master端真實執行時候的那些可執行的內容,並在自身執行。
1.主服務器配置
vim /etc/my.cnf
#--同步配置begin
#若涉及及同步函數或者存儲過程需要配置,否則主備會產生異常不能同步
log_bin_trust_function_creators=TRUE
#需要備份的數據庫名,多個庫以逗號分
binlog_do_db =ashop,bookmanager,zook
#不需要備份的數據庫名  多個庫以逗號分
binlog-ignore-db=mysql,sys,performance_schema,information_schema
#表示是本機的序號為1,一般來講就是master的意思
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
log-bin=/u01/mysql/mysql-bin
sync_binlog=1
log-slave-updates=1
server-id=1
innodb_flush_log_at_trx_commit=1
#0:如果innodb_flush_log_at_trx_commit的值為0,log buffer每秒就會被刷寫日志文件到磁盤,提交事務的時候不做任何操作(執行是由mysql的master thread線程來執行的。
#主線程中每秒會將重做日志緩沖寫入磁盤的重做日志文件(REDO LOG)中。不論事務是否已經提交)默認的日志文件是ib_logfile0,ib_logfile1
#1:當設為默認值1的時候,每次提交事務的時候,都會將log buffer刷寫到日志。
#2:如果設為2,每次提交事務都會寫日志,但並不會執行刷的操作。每秒定時會刷到日志文件。要注意的是,並不能保證100%每秒一定都會刷到磁盤,這
#要取決於進程的調度。
#每次事務提交的時候將數據寫入事務日志,而這里的寫入僅是調用了文件系統的寫入操作,而文件系統是有 緩存的,所以這個寫入並不能保證數據已經
#寫入到物理磁盤
#默認值1是為了保證完整的ACID。當然,你可以將這個配置項設為1以外的值來換取更高的性能,但是在系統崩潰的時候,你將會丟失1秒的數據。
#設為0的話,mysqld進程崩潰的時候,就會丟失最后1秒的事務。設為2,只有在操作系統崩潰或者斷電的時候才會丟失最后1秒的數據。InnoDB在做恢復的
#時候會忽略這個值。
#總結
#設為1當然是最安全的,但性能頁是最差的(相對其他兩個參數而言,但不是不能接受)。如果對數據一致性和完整性要求不高,完全可以設為2,如果>只最求性能,例如高並發寫的日志服務器,設為0來獲得更高性能
#--同步配置end
2.重啟mysql
mysql> grant replication slave on *.* to slaveusr@ 192.168 . 19.142  identified by  ' slaveusr ' ;
mysql> show master status;
+------------------+----------+------------------------+-------------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB           | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+------------------+----------+------------------------+-------------------------------------------------+-------------------+
| mysql-bin.000004 |      154 | ashop,bookmanager,zook | mysql,sys,performance_schema,information_schema |                   |
+------------------+----------+------------------------+-------------------------------------------------+-------------------+

  1. 鎖定主數據庫 DDL 操作
mysql> flush tables with read lock;
Master上備份一份完整的數據:
mysqldump -uroot -proot123 -h39.108.0.229 --master-data=2 --single-transaction -R --triggers -A > /u01/soft/all.sql;
#解釋
--master-data=2代表備份時刻記錄master的Binlog位置和Position
--single-transaction意思是獲取一致性快照
-R意思是備份存儲過程和函數
--triggres的意思是備份觸發器
-A代表備份所有的庫

8、在node01(ccy002)Master上創建復制用戶repl(密碼111111),並授權訪問所有主機:
1
2
mysql> grant replication slave on *.* to 'repl'@'%' identified by '111111'; 
mysql> flush privileges; #刷新緩存


2.副服務器配置
vim /etc/my.cnf

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLE
server-id =3
replicate-do-db = sbfxd
master-info-file = master.info
relay-log = relay-relay-bin
relay-log-index = relay-relay-bin.index
relay-log-info-file=relay-relay-log.info

3。重啟mysql
mysql>  stop slave;
mysql> change master to master_host='192.168.19.139',master_port= 3306,master_log_file=' mysqlbin.000004 ' ,master_log_pos= 154 ,master_bind='',master_user=' slaveusr ',master_password=' slaveusr ';
mysql> change master to master_user='root',master_password='root123',master_host='39.108.0.229',master_port=3306,master_log_file='mysql-bin.000002',master_log_pos=154;
mysql> start slave;
(4)顯示副服務器的狀態

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 39.108.0.229
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 2230
               Relay_Log_File: VM_10_35_centos-relay-bin.000002
                Relay_Log_Pos: 2396
        Relay_Master_Log_File: mysql-bin.000007
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 2230
              Relay_Log_Space: 2613
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID: 4c24c6df-85a2-11e7-a2dd-00163e06a33c
             Master_Info_File: /u01/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:

(5)登陸slave
導入all.sql
mysql -uroot -p111111 -hccy002 < /u01/soft/all.sql
mysql -uroot -p111111 -hccy003 < /u01/soft/all.sql

2.6 解鎖主庫 ddl 操作
mysql> unlock tables;

訪問: http://39.108.0.229/ 則會在bookmanager插入一條記錄
ccy001
mysql> use bookmanager;
mysql> select count(1) from t_log;
+----------+
| count(1) |
+----------+
|     7211 |
+----------+
ccy003
mysql> use bookmanager;
mysql> select count(1) from t_log;
+----------+
| count(1) |
+----------+
|     7211 |
+----------+
日志表數量相同則表示同步成功



















注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com