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;查看信息
如上圖顯示的信息,主節點 172,16.14.44,(這是在從節點上的mysql上操做的)
配置成功後,你會發現,在從節點上的中級日誌中,會自動建立文件,
從節點就是根據中繼日誌內的內容來複制主節點上的數據的。