1. 程式人生 > >mysql主從復制(一主一從)

mysql主從復制(一主一從)

stop 主從復制 RoCE my.cnf配置 事件 技術分享 mas 復制。 二進制文件

技術分享圖片

MySQL之間數據復制的基礎是二進制日誌文件(binary log file)。一臺MySQL數據庫一旦啟用二進制日誌後,其作為master,它的數據庫中所有操作都會以“事件”的方式記錄在二進制日誌中,其他數據庫作為slave通過一個I/O線程與主服務器保持通信,並監控master的二進制日誌文件的變化,如果發現master二進制日誌文件發生變化,則會把變化復制到自己的中繼日誌中,然後slave的一個SQL線程會把相關的“事件”執行到自己的數據庫中,以此實現從數據庫和主數據庫的一致性,也就實現了主從復制。

實現MySQL主從復制需要進行的配置:

主服務器:
開啟二進制日誌
配置唯一的server-id

獲得master二進制日誌文件名及位置
創建一個用於slave和master通信的用戶賬號
從服務器:
配置唯一的server-id
使用master分配的用戶賬號讀取master二進制日誌
啟用slave服務

準備工作:

1.主從數據庫版本最好一致
2.主從數據庫內數據保持一致

主數據庫:10.100.141.135
從數據庫:10.100.141.117

配置實施過程:

一、主服務器master修改:
1.修改mysql配置
找到主數據庫的配置文件my.cnf(或者my.ini),我的在/etc/mysql/my.cnf,在[mysqld]部分插入如下兩行:
[mysqld]
log-bin=mysql-bin //開啟二進制日誌

server-id=1 //設置server-id
技術分享圖片

2.重啟mysql,創建用於同步的用戶賬號
打開mysql會話shell>mysql -uname -ppassword
創建用戶並授權:用戶:cisco 密碼:cisco@123
mysql> CREATE USER [email protected] IDENTIFIED BY ‘cisco@123‘; //創建用戶
mysql> GRANT REPLICATION SLAVE ON . TO [email protected]; //分配權限
mysql>FLUSH PRIVILEGES; //刷新權限

技術分享圖片
技術分享圖片
技術分享圖片

3.查看master狀態,記錄二進制文件名(mysql-bin.000001)和位置(649):
SHOW MASTER STATUS;
技術分享圖片

二、從服務器slave修改:
1.修改mysql配置
同樣找到my.cnf配置文件,添加server-id
[mysqld]
server-id=2 //設置server-id,必須唯一
技術分享圖片

2.重啟mysql,打開mysql會話,執行同步SQL語句(需要主服務器主機名,登陸憑據,二進制文件的名稱和位置):
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘10.100.141.135‘,
-> MASTER_USER=‘cisco‘,
-> MASTER_PASSWORD=‘cisco@123‘,
-> MASTER_LOG_FILE=‘mysql-bin.000001‘,
-> MASTER_LOG_POS=649;
技術分享圖片

3.啟動slave同步進程:
mysql>start slave;
技術分享圖片

4.查看slave狀態:
SHOW SLAVE STATUS\G;
技術分享圖片

當Slave_IO_Running和Slave_SQL_Running都為YES的時候就表示主從同步設置成功了。接下來就可以進行一些驗證了,比如在主master數據庫的test數據庫的一張表中插入一條數據,在slave的test庫的相同數據表中查看是否有新增的數據即可驗證主從復制功能是否有效,還可以關閉slave(mysql>stop slave;),然後再修改master,看slave是否也相應修改(停止slave後,master的修改不會同步到slave),就可以完成主從復制功能的驗證了。

驗證:
主數據庫建立數據庫,刪除數據庫,插入數據表,備數據庫是否即時同步

還可以用到的其他相關參數:
master開啟二進制日誌後默認記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的數據庫甚至指定的表的操作,具體在mysql配置文件的[mysqld]可添加修改如下選項:
#不同步哪些數據庫
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema

#只同步哪些數據庫,除此之外,其他不同步
binlog-do-db = game

mysql主從復制(一主一從)