第一步、配置master
1、 修改master的配置文件,使用二進制日志,指定server-id,重啟服務。目的是讓各自都有了自己的唯一標示,并以二進制文件格式進行交流。Centos中路徑為 /etc/my.cnf。
[mysqld]
log_bin = mysql-bin [必須]啟用二進制日志
server-id=51 [必須]服務器唯一ID,默認是1,一般取IP最后一段
2、配置完成后需要重啟mysqlserver才能生效。
systemctl restart mysqld
3、創(chuàng)建授權用戶
登陸主服務器mysql命令行,創(chuàng)建一個用于從服務器復制的用戶。
mysql>GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by '123456';
"*.*"表示對所有庫的所有操作,“%”表示所有客戶端都可能連,也可用具體客戶端IP代替,如172.16.1.51,加強安全。
4、 記錄master 狀態(tài)信息
查看二進制日志文件名,及最新位置。讓slave知道用哪個用戶信息訪問master,知道讀取哪個日志文件,及從哪兒開始讀。
mysql>show master status;

image
其中file、position字段需要記錄下值,mysql-bin.000001 是用于主從復制的文件名,
437是日志文件內(nèi)的最新位置。
第二步、 配置slave
1、 修改配置文件my.cnf,使用二進制日志,指定server-id,重新啟動服務。
[mysqld]
log_bin = mysql-bin
server-id=52
systemctl restart mysqld
2、 將slave指向master
登陸從服務器mysql命令行,使用之前創(chuàng)建的用戶和master的日志文件及其位置。slave中使用被授權用戶信息及日志文件信息,進行指向master。這時已經(jīng)建立了和master的聯(lián)系,明確了從哪兒讀取日志文件。
mysql>change master to master_host='172.16.1.51',master_user='root',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=437;
3、啟動slave
mysql>start slave;
4、 查看slave狀態(tài)
mysql> show slave status\G;
結果中有兩個重要數(shù)據(jù)項:
1. Slave_IO_Running: Yes IO線程狀態(tài),必須YES
2. Slave_SQL_Running: Yes SQL線程狀態(tài),必須YES
常見的問題是SQL線程沒有正常工作 Slave_SQL_Running: No。通常是兩邊的數(shù)據(jù)庫不是完全對應的,需要確保master上的庫及到目前為止的最新記錄都復制到slave上了。
驗證測試
當IO線程和SQL線程都正常后,到master中隨意測試下插入、修改、刪除操作,同時到slave中檢查。

image.png