1、原理php
mysql主從配置的流程大致如圖:html
1)master會將變更記錄到二進制日誌裏面;mysql
2)master有一個I/O線程將二進制日誌發送到slave;linux
3) slave有一個I/O線程把master發送的二進制寫入到relay日誌裏面;sql
4)slave有一個SQL線程,按照relay日誌處理slave的數據;數據庫
2、操做步驟vim
按照原理,咱們開啓mysql主從複製,咱們大致須要作如下操做:服務器
1)開啓master的二進制日誌測試
2)開啓slave的二進制日誌spa
3)將slave指向master
4)開始複製
3、開啓master二進制日誌
1)編輯mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二進制日誌配置,開啓二進制(master-bin只是日誌文件名稱,能夠本身指定)
log-bin=master-bin
server-id=1
注意:server-id是要指定的,否則會報錯,每一臺指定一個惟一標識符
4、受權
咱們須要給slave配置一個用戶/密碼的權限
mysql>GRANT REPLICATION SLAVE ON *.* TO '用戶名'@'slave數據庫的IP地址' IDENTIFIED BY '密碼';
這行命令的意思是:容許在某個IP地址的某個用戶以某個密碼對當前數據庫的全部庫和全部表進行複製操做
注意:以上配置了權限,咱們須要刷新如下權限使用命令:
mysql>flush privileges;
或者直接重啓mysql服務:
service mysql restart;
5、查看如下master的狀態
其實主要是查看如下master的日誌文件名字,以及文件所在的位置,使用命令:
show master status;
能夠看到相似以下信息:
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 1516 | | | |
+-------------------+----------+--------------+------------------+-------------------+
File: 日誌文件名稱
Position: 日誌所在位置
6、開啓slave的二進制日誌
進入slave的服務器
1)編輯mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二進制日誌配置,開啓二進制(relay-bin只是日誌文件名稱,能夠本身指定)
log-bin=relay-bin
server-id=2
注意:server-id是要指定的,否則會報錯,每一臺指定一個惟一標識符
7、將slave指向master
mysql>CHANGE MASTER TO
>MASTER_HOST='master所在服務器的IP',
>MASTER_USER='master受權的帳號',
>MASTER_PASSWORD='master受權的密碼',
>MASTER_LOG_FILE='master的日誌文件名',
>MASTER_LOG_POS=master的日誌所在位置;
8、開始主從複製
在slave上執行
mysql>start slave;
咱們能夠查看slave的運行狀態:
show slave status\G;
能夠看到相似以下內容:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master的IP地址
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 1516
Relay_Log_File: slave-bin.000004
Relay_Log_Pos: 1117
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
注意:
Slave_IO_Running: YES 表示slave的日誌讀取線程開啓
Slave_SQL_Running: YES 表示SQL執行線程開啓
若是有主從複製有錯誤信息其實也能夠看到
9、測試
以上咱們就將主從複製功能設置完畢了,咱們能夠經過在master裏面建立數據庫,或者表,插入數據等來測試一下
10、注意點
1)開啓了主從複製,slave庫若是寫入數據的話,可能致使數據回滾從而主從複製線程中斷,能夠經過如下方式解決:
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;
2)若是要中止slave的複製可使用命令:
mysql>stop slave;
3)因爲主從複製是基於I/O的日誌,因此會存在必定延時,若是對數據一致性要求很是高的話,簡單的主從複製在實際環境中會存在問題
參考文章:
1)https://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label0