1. 程式人生 > 其它 >mysql主從複製實現讀寫分離

mysql主從複製實現讀寫分離

主從複製、讀寫分離就是為了資料庫能支援更大的併發。

隨著業務量的擴充套件、如果是單機部署的MySQL,會導致I/O頻率過高。採用主從複製、讀寫分離可以提高資料庫的可用性。

在虛擬機器裡部署兩臺伺服器,一臺專門負責增刪改的主資料庫,一臺專門負責讀的從資料庫

然後進行配置:

Master配置
使用命令列進入mysql:

mysql -u root -p
接著輸入root使用者的密碼(密碼忘記的話就網上查一下重置密碼吧~),然後建立使用者:

//192.168.0.106是slave從機的IP
GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.0.106' identified by 'Java@1234';
//192.168.0.107是slave從機的IP
GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.0.107' identified by 'Java@1234';
//刷新系統許可權表的配置
FLUSH PRIVILEGES;
1
2
3
4
5
建立的這兩個使用者在配置slave從機時要用到。

接下來在找到mysql的配置檔案/etc/my.cnf,增加以下配置:

# 開啟binlog
log-bin=mysql-bin
server-id=104
# 需要同步的資料庫,如果不配置則同步全部資料庫
binlog-do-db=test_db
# binlog日誌保留的天數,清除超過10天的日誌
# 防止日誌檔案過大,導致磁碟空間不足
expire-logs-days=10
1
2
3
4
5
6
7
配置完成後,重啟mysql:

service mysqld restart
可以通過命令列show master status\G;檢視當前binlog日誌的資訊(後面有用):

Slave配置
Slave配置相對簡單一點。從機肯定也是一臺MySQL伺服器,所以和Master一樣,找到/etc/my.cnf配置檔案,增加以下配置:

# 不要和其他mysql服務id重複即可
server-id=106
1
接著使用命令列登入到mysql伺服器:

mysql -u root -p
然後輸入密碼登入進去。

進入到mysql後,再輸入以下命令:

CHANGE MASTER TO
MASTER_HOST='192.168.0.104',//主機IP
MASTER_USER='root',//之前建立的使用者賬號
MASTER_PASSWORD='Java@1234',//之前建立的使用者密碼
MASTER_LOG_FILE='mysql-bin.000001',//master主機的binlog日誌名稱
MASTER_LOG_POS=862,//binlog日誌偏移量
master_port=3306;//埠
1
2
3
4
5
6
還沒完,設定完之後需要啟動:

# 啟動slave服務
start slave;
1
啟動完之後怎麼校驗是否啟動成功呢?使用以下命令:

show slave status\G;
可以看到如下資訊(摘取部分關鍵資訊):

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.104
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 619
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 782
Relay_Master_Log_File: mysql-bin.000001 //binlog日誌檔名稱
Slave_IO_Running: Yes //Slave_IO執行緒、SQL執行緒都在執行
Slave_SQL_Running: Yes
Master_Server_Id: 104 //master主機的服務id
Master_UUID: 0ab6b3a6-e21d-11ea-aaa3-080027f8d623
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Auto_Position: 0