MySQL主從複製原理:mysql
MySQL 主從同步,實際上是一個異步複製的過程,要實現複製,首先須要在 master 上開 啓 bin-log 日誌功能,整個過程須要開啓 3 個線程,Master 開啓 IO 線程,slave 開啓 IO 和 SQL 線程。sql
過程:數據庫
1)服務器執行slave start ,從服務器上 IO 線程會經過受權的用戶鏈接上 master , 並請求 master 從指定的文件和位置以後發送 bin-log 日誌內容。服務器
2)Master 服務器接收到來自 slave 的 IO 線程的請求後,master服務器上的 IO 進程根據 slave 服務器發送的指定 bin-log 日誌以後的內容,而後返回在給 slave 端的 IO 線程(返回的信 息中除了 bin-log 日誌內容外,還有本次返回日誌內容後在master 服務器端的新的bin-log 文件名 以及在bin-log中的下一個指定更新位置)
異步
3)Slave 的 IO 線程接收到信息後,將接收到的日誌內容依次添加到 slave 的 relay-log 文 件的最末端,並交讀取到的 master 端的 bin-log 的文件名和位置記錄到 master-info 文件中以便 在下一次讀取的時候可以清楚的告訴 master 「我須要從某個 bin-log 的哪一個位置開始日後的日誌 內容,請發給我」
socket
4)slave 的sql 線程檢測到 relay-log 中新增長了內容後,會立刻解析 relay-log 的內容成 爲在 master 端真實執行時候的那些可執行的內容,並在自身執行。
ide
配置過程:測試
yum -y install mysql mysql-deve mysql-server mysql-libs
spa
MASTER:線程
修改 /etc/my.cnf 內容爲下:
[mysqld]
datadir=/data/sqldata
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended toprevent assorted security risks
symbolic-links=0
log-bin=mysql-bin
server-id = 1
auto_increment_offset=1
auto_increment_increment=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
replicate-do-db =all
建立mysql數據目錄:
mkdir -p /data/sqldata
chown -R mysql.mysql /data/sqldata
啓動 mysql
/etc/init.d/mysqld restart
SLAVE:
而後修改slaveMysql數據庫my.cnf配置文件內容以下:
[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-bin=mysql-bin
server-id= 2
auto_increment_offset=2
auto_increment_increment=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
在 master 數據庫上設置權限:
>grant replication slave on *.* to 'tongby'@'%' identified by 123456;
>show master status;
在 slave 數據庫上設置
>change master to master_host='主IP',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000007',master_log_pos=250;
測試:
在主上建立數據庫,而後查看從,若是同步過來,說明主從搭建成功