MySQL主從複制原理:
MySQL 主從同步,其實是一個異步複制的過程,要實作複制,首先需要在 master 上開 啟 bin-log 日志功能,整個過程需要開啟 3 個線程,Master 開啟 IO 線程,slave 開啟 IO 和 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 的哪個位置開始往後的日志 内容,請發給我”
4)slave 的sql 線程檢測到 relay-log 中新增加了内容後,會馬上解析 relay-log 的内容成 為在 master 端真實執行時候的那些可執行的内容,并在自身執行。
配置過程:
yum -y install mysql mysql-deve mysql-server mysql-libs
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配置檔案内容如下:
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;
<a href="http://s3.51cto.com/wyfs02/M02/71/55/wKioL1XL_F_DCyqzAAEt8oEzMUQ833.jpg" target="_blank"></a>
在 slave 資料庫上設定
>change master to master_host='主IP',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000007',master_log_pos=250;
<a href="http://s3.51cto.com/wyfs02/M01/71/55/wKioL1XL_MDgQRwcAAGJedVILb8762.jpg" target="_blank"></a>
測試:
在主上建立資料庫,然後檢視從,如果同步過來,說明主從搭建成功
本文轉自 菜鳥的征程 51CTO部落格,原文連結:http://blog.51cto.com/songqinglong/1684258