在上一篇文章中已經詳細的寫了關於Mysql的安裝步驟。這一篇文章在上一篇文章的基礎之上接着寫集群的安裝與部署。
安裝地址:https://www.cnblogs.com/ming-blogs/p/10962554.html
MySQL主從復制配置
主節點服務器 地址 192.168.0.105
從節點服務器 地址 192.168.0.107
主節點服務器安裝好之后,直接clone 一個即可,不需要重復安裝2次。
主節點服務器配置
1.進入配置頁面命令
vi /etc/my.cnf
2.配置服務器id server_id
這里的server_id 盡量配置為服務器地址的后3位 以用來區分
server_id=105
3.開啟日志文件(binLog)
log-bin=mysql-bin
配置文件的地址應該在 : # Recommended in standard MySQL setup,否則配置不起作用
如下圖所示
4.重啟mysql服務
service mysqld restart
驗證是否已經配置成功
5.show variables like '%server_id%';
能夠查詢對應配置文件中的server_id 說明已經配置成功,如下圖,則表示配置成功。server_id=105
6.show master status;
能夠看到同步的文件,和行數說明已經配置成功。
從服務器節點
1.進入配置頁面命令
vi /etc/my.cnf
2.配置服務器id server_id
這里的server_id 盡量配置為服務器地址的后3位 以用來區分
server_id=105
3.開啟日志文件(binLog)
log-bin=mysql-bin
4.添加需用同步的數據庫
binlog_do_db=test
5.重啟mysql服務
service mysqld restart
驗證是否已經配置成功
6.show variables like '%server_id%';
能夠查詢對應配置文件中的server_id 說明已經配置成功
7.從服務器同步主服務器配置
master_host 主服務器地址
master_user 主服務器用戶名
master_password 主服務器密碼
master_log_file 主服務器配置文件
master_log_pos 主服務器讀取配置文件的開始位置,也就是從第多少行開始讀取。
change master to master_host='192.168.0.105',master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=120;
8.開始同步
start slave
9.檢查從服務器復制功能狀態
SHOW SLAVE STATUS
如果二個從服務器是克隆主服務器的,這時候就會出現如下圖的情況,二個服務器的server-uuid 是相同的,因為是克隆過來的。這時候運行 SHOW SLAVE STATUS 就會出現 Slave_IO_Running 為 No,而Slave_SQL_Running為Yes。說明IO同步出錯,在Last_IO_Error 字段可以看到錯誤信息,如下。錯誤信息的意思就是server-uuid 重復了。也就是下圖展示的效果。
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work。
如果出現這種情況,需要將 /var/lib/mysql 文件下的生成uuid 的文件刪除,然后再重新啟動 mysql 服務,就會重新在生成一個 server-uuid,在下圖2中 也 顯示了這個重新生成的server-uuid。
如果你的從服務器不是克隆主服務器而是重新安裝的,那么就不會出現這種情況。直接運行 SHOW SLAVE STATUS 命令,如下圖。則表示同步成功
存放server-uuid的 地址,可以在 /etc/my.cnf 文件中查看,如下圖。
如何驗證我們mysql 主從復制 集群搭建成功?
在105節點主服務器)新建test數據庫,如果107節點(從服務器)能夠同步過來,則說明環境搭建成功。
如下圖,圖一是沒有創建test數據庫之前,在105 服務器上創建一個test數據庫,然后107關閉連接 再重新打開連接、或者直接刷新,發現test數據庫已經同步過來了,如圖2的效果。
同樣的,在105服務器節點中的test數據庫中新建表test001,然后在107節點中刷新,test001表也同步了過來,如下圖。
這時候在105節點的test數據庫中的test_001數據表添加數據,107 節點也會把數據同步過來,如下圖。
但是這時候我修改105節點數據庫中數據表(test_001)的數據的時候,107節點的數據並沒有更新過來,如下圖。
這個問題,將在下一篇讀寫分離博客中寫出來。
如果同步執行出錯,作如下修改。
show variables like '%server_id%';
show master status;
STOP SLAVE;
set GLOBAL sql_slave_skip_counter=1;
start slave;
SHOW SLAVE STATUS;