msyql的主從複製

mysql主從複製概述:mysql

    2個數據庫分別在2個節點上,一個爲主(master),另外一個爲從(slave),從節點要從主節點複製數據,根據什麼呢?
    
linux

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

  2. Master 接收到來自 Slave 的 IO 線程的請求後,經過負責複製的 IO 線程根據請求信息讀取指定日誌指定位置以後的日誌信息,返回給 Slave 端的 IO 線程。返回信息中除了日誌所包含的信息以外,還包括本次返回的信息在 Master 端的 Binary Log 文件的名稱以及在 Binary Log 中的位置;數據庫

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

  4. Slave 的 SQL 線程檢測到 Relay Log 中新增長了內容後,會立刻解析該 Log 文件中的內容成爲在 Master 端真實執行時候的那些可執行的 Query 語句,並在自身執行這些 Query。這樣,實際上就是在 Master 端和 Slave 端執行了一樣的 Query,因此兩端的數據是徹底同樣的。工具



主從複製的實際配置操做:測試

    2個節點,
spa

    A(master):172.16.14.44
線程

    B (slave):172.16.14.33
日誌

在2個節點上都要安裝數據庫,我使用的是 mariadb-5.5.36-linux-x86_64.tar.gz 這個壓縮包,

1,# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local


2,建立存儲數據目錄  # mkdir -pv /mydata/data

3, 建立MySQL用戶     # useradd -r mysql

4,修改屬主屬組/mydata/data   # chown -R mysql.mysql /mydata/data

5,在/etc/ 建立MySQL配置文件的目錄  /etc/mysql

6, 複製配置文件  # cp support-files/my-large.cnf /etc/mysql/

7,修改配置文件  添加 datadir=/mydata/data

8, 複製啓動腳本服務 # cp support-files/mysql.server  /etc/rc.d/init.d/mysqld 並賦予執行權限,# chmod +x /etc/rc.d/init.d/mysqld

9, 添加到服務: # chkconfig --add mysqld

10,初始化數據庫: # scripts/mysql_install_db --datadir=/mydata/data --user=mysql

11,啓動mysql

12,在主節點上mysql上建立具備複製權限的帳號,並flush下,

   mysql>   GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repluser@172.16.13.33 

        IDENTIFIED BY 'mysqld'

   mysql>   FLUSH PRIVILEGES;



從節點上的操做:

    1,安裝mysql工具,應和主節點版本一致。

    2, 建立存儲數據目錄  # mkdir -pv /mydata/data

    3, 建立MySQL用戶     # useradd -r mysql

    4,修改屬主屬組/mydata/data   # chown -R mysql.mysql /mydata/data

    5,在/etc/ 建立MySQL配置文件的目錄  /etc/mysql

    6, 複製配置文件  # cp support-files/my-large.cnf /etc/mysql/

        須要修改的地方:

                添加datadir=/mydata/data

                添加中繼日誌及serveriD,

                    server-id       = 11 //不要與master節點相同

                    relay-log       = /mydata/relaylogs/relay-log

        

    7,修改配置文件  添加 datadir=/mydata/data

    不須要創建存放二進制日誌的文件

    可是必需要建立存放中繼日誌的文件

    # mkdir /mydata/relaylogs/ 


配置過程就如上所述,下面看下,具體的測試和結果吧

在slave端,使用

mysql> CHANGE MASTER TO MASTER_HOST='172.16.14.44',MASTER_USER='repluser',MASTER_PASSWORD='mysqld',MASTER_LOG_FILE='master-bin.000003',MASTER_LOG_POS=493

其中:MASTER_LOG_FILE 指主節點的二進制日誌文件

        MASTERT_LOG_POS指的是二進制日誌文件中,事件的起始複製位置。

使用SHOW STATUS;查看信息

    wKiom1Qg4pmBkiaHAAA2pzmZZxI552.png如上圖顯示的信息,主節點 172,16.14.44,(這是在從節點上的mysql上操做的)


配置成功後,你會發現,在從節點上的中級日誌中,會自動建立文件,

wKiom1Qg5ueTvLweAAAMNTzVWYA617.png

從節點就是根據中繼日誌內的內容來複制主節點上的數據的。

相關文章
相關標籤/搜索