msyql的主從複製

mysql主從複製概述:

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

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

  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的哪個位置開始往後的日誌內容,請發給我”

  4. Slave 的 SQL 線程檢測到 Relay Log 中新增加了內容後,會馬上解析該 Log 文件中的內容成爲在 Master 端真實執行時候的那些可執行的 Query 語句,並在自身執行這些 Query。這樣,實際上就是在 Master 端和 Slave 端執行了同樣的 Query,所以兩端的數據是完全一樣的。



主從複製的實際配置操作:

    2個節點,

    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 [email protected] 

        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

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










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章