MySQL:第一次看到有人把MYSQL主從複製講解的這麼清楚

1、基本原理

MySQL複製過程分紅三步:mysql

  • 1)、master將改變記錄到二進制日誌(binary log)。這些記錄過程叫作二進制日誌事件,binary log events
  • 2)、slave將master的binary log events拷貝到它的中繼日誌(relay log);
  • 3)、slave重作中繼日誌中的事件,將改變應用到本身的數據庫中。 MySQL複製是異步的且串行化的。

簡單來講: slave會從master讀取binlog來進行數據同步linux

MySQL:第一次看到有人把MYSQL主從複製講解的這麼清楚

MySQL:第一次看到有人把MYSQL主從複製講解的這麼清楚

Mysql的複製(replication)是一個異步的複製sql

實現整個複製操做主要由三個進程完成的,其中兩個進程在Slave(Sql進程和IO進程),另一個進程在 Master(IO進程)上。數據庫

要實施複製,首先必須打開Master端的binary log(bin-log)功能,不然沒法實現。windows

由於整個複製過程實際上就是Slave從Master端獲取該日誌而後再在本身身上徹底順序的執行日誌中所記錄的各類操做。服務器

複製的詳細過程:異步

(1)Slave上面的IO進程鏈接上Master,並請求從指定日誌文件的指定位置(或者從最開始的日誌)以後的日誌內容;ide

(2)Master接收到來自Slave的IO進程的請求後,經過負責複製的IO進程根據請求信息讀取制定日誌指定位置以後的日誌信息,返回給Slave 的IO進程。返回信息中除了日誌所包含的信息以外,還包括本次返回的信息已經到Master端的bin-log文件的名稱以及bin-log的位置;3d

(3)Slave的IO進程接收到信息後,將接收到的日誌內容依次添加到Slave端的relay-log文件的最末端,並將讀取到的Master端的 bin-log的文件名和位置記錄到master-info文件中,以便在下一次讀取的時候可以清楚的高速Master「我須要從某個bin-log的哪一個位置開始日後的日誌內容,請發給我」;日誌

(4)Slave的Sql進程檢測到relay-log中新增長了內容後,會立刻解析relay-log的內容成爲在Master端真實執行時候的那些可執行的內容,並在自身執行。

原則:

  • 每一個slave只有一個master;
  • 每一個slave只能有一個惟一的服務器ID;
  • 每一個master能夠有多個salve;

2、一主一從相關配置

演示主機爲Windows (配置文件爲my.ini文件),從機爲Linux(配置文件爲my.cnf

一、主機配置(windows的my.ini)

  • 1)、[必須]主服務器惟一ID;
  • 2)、[必須]啓用二進制日誌;
    • log-bin=本身本地的路徑/data/mysqlbin
    • log-bin=D:/devSoft/MySQLServer5.5/data/mysqlbin
  • 3)、[可選]啓用錯誤日誌
    • log-err=本身本地的路徑/data/mysqlerr
    • log-err=D:/devSoft/MySQLServer5.5/data/mysqlerr
  • 4)、[可選]根目錄
    • basedir="本身本地路徑"
    • basedir="D:/devSoft/MySQLServer5.5/"
  • 5)、[可選]臨時目錄
    • tmpdir="本身本地路徑"
    • tmpdir="D:/devSoft/MySQLServer5.5/"
  • 6)、[可選]數據目錄
    • datadir="本身本地路徑/Data/"
    • datadir="D:/devSoft/MySQLServer5.5/Data/"
  • 7)、[可選]設置不要複製的數據庫
    • binlog-ignore-db=mysql
  • 8)、[可選]設置須要複製的數據庫
    • binlog-do-db=須要複製的主數據庫名字

二、從機配置(linux的my.cnf)

  • [必須]從服務器惟一ID;
  • [可選]啓用二進制日誌;

MySQL:第一次看到有人把MYSQL主從複製講解的這麼清楚

三、因修改過配置文件,請主機+從機都重啓後臺mysql服務

四、主從機都關閉linux防火牆

  • windows手動關閉;
  • 關閉虛擬機linux防火牆 service iptables stop

五、在Windows主機上創建賬戶並受權slave

  • GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'從機器數據庫IP' IDENTIFIED BY '123456';
  • 刷新一下配置flush privileges;
  • 查詢master的狀態。
    • show master status;
    • 記錄下File和Position的值
  • 執行完此步驟後不要再操做主服務器MYSQL,防止主服務器狀態值變化。

MySQL:第一次看到有人把MYSQL主從複製講解的這麼清楚

MySQL:第一次看到有人把MYSQL主從複製講解的這麼清楚

六、在Linux從機上配置須要複製的主機

  • 配置
CHANGE MASTER TO MASTER_HOST='主機IP',MASTER_USER='zhangsan',MASTER_PASSWORD='123456',MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position數字;
  • 啓動從服務器複製功能,start slave;
  • 查看配置
    • 下面兩個參數都是Yes,則說明主從配置成功!
    • Slave_IO_Running: Yes
    • Slave_SQL_Running: Yes
CHANGE MASTER TO MASTER_HOST='192.168.124.3',
MASTER_USER='zhangsan',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysqlbin.具體數字',MASTER_LOG_POS=具體值;

MySQL:第一次看到有人把MYSQL主從複製講解的這麼清楚

MySQL:第一次看到有人把MYSQL主從複製講解的這麼清楚

七、主機鍵表,看從機有沒有

八、如何中止主從服務複製功能

linux下面輸入stop slave;

相關文章
相關標籤/搜索