mysql5.7 讀寫分離配置筆記
阿新 • • 發佈:2019-01-01
使用虛擬機器vm和ubuntu server 16系統,安裝的時候就已經預設安裝了lamp環境(mysql5.7),安裝完成一個系統後直接關閉虛擬機器,複製當前虛擬機器然後選擇開啟虛擬機器,這樣可以省去很長的系統安裝時間,兩個系統重新啟動,這樣會重新分配不同的IP地址
完成之後開始mysql的配置
配置步驟
1. 修改配置檔案 my.cnf
master:
3. master建立授權使用者
登陸主伺服器mysql命令列,建立一個用於從伺服器複製的使用者
4. 檢視master狀態
登陸主伺服器mysql命令列
| File | Position |
+-------------------------+----------+
| mysql-bin.000002 | 1308 |
+-------------------------+----------+
mysql-bin.000004 是用於主從複製的檔名
1308 是日誌檔案內的最新位置
5. slave指向master
登陸從伺服器mysql命令列,使用之前建立的使用者和master的日誌檔案及其位置
常見的問題是SQL執行緒沒有正常工作 Slave_SQL_Running: No
通常是兩邊的資料庫不是完全對應的,需要確保master上的庫及到目前為止的最新記錄都複製到slave上了
8. 測試
當IO執行緒和SQL執行緒都正常後,到master中隨意測試下插入、修改、刪除操作,同時到slave中檢查
1) Slave_IO_Running: Yes
IO執行緒狀態,必須YES
2) Slave_SQL_Running: Yes
SQL執行緒狀態,必須YES
在start slave 後發現 Slave_IO_Running=NO
Mysql 5.7 主從複製的多執行緒複製配置方式,資料庫複製的主要效能問題就是資料延時,為了優化複製效能,Mysql 5.6 引入了 “多執行緒複製” 這個新功能,但 5.6 中的每個執行緒只能處理一個數據庫,所以如果只有一個數據庫,或者絕大多數寫操作都是集中在某一個數據庫的,那麼這個“多執行緒複製”就不能充分發揮作用了,Mysql 5.7 對 “多執行緒複製” 進行了改善,可以按照邏輯時鐘的方式來分配執行緒,大大提高了複製效能,下面看一下在5.7中如何配置 “多執行緒複製”
1、對兩個mysql 例項配置好主從複製配置成功後,在從庫上使用
可以看到只有一個複製執行緒在執行
2、在從庫上停止複製
配置成基於邏輯時鐘的方式
先看下當前的併發數量,通過變數 slave_parallel_workers 的值來獲得,這個變數用來決定併發處理的執行緒數
配置遠端主機可連線資料庫
grant all privileges on *.* to 'myuser'@'%' identified by 'mypassword' with grant option;
flush privileges;
完成之後開始mysql的配置
配置步驟
1. 修改配置檔案 my.cnf
master:
slave:[mysqld] log-bin=MySQL-bin //[必須]啟用二進位制日誌 server-id=222 //[必須]伺服器唯一ID,預設是1,一般取IP最後一段
[mysqld]
log-bin=mysql-bin
server-id=226
2. 重新啟動兩臺伺服器的mysql3. master建立授權使用者
登陸主伺服器mysql命令列,建立一個用於從伺服器複製的使用者
GRANT REPLICATION SLAVE ON *.* to '使用者名稱'@'%' identified by '密碼';
"*.*"表示對所有庫的所有操作,“%”表示所有客戶端都可能連,也可用具體客戶端IP代替,如192.168.145.226,加強安全4. 檢視master狀態
登陸主伺服器mysql命令列
show master status;
+-------------------------+----------+| File | Position |
+-------------------------+----------+
| mysql-bin.000002 | 1308 |
+-------------------------+----------+
mysql-bin.000004 是用於主從複製的檔名
1308 是日誌檔案內的最新位置
5. slave指向master
登陸從伺服器mysql命令列,使用之前建立的使用者和master的日誌檔案及其位置
6. 啟動slavechange master to master_host='master ip',master_user='使用者名稱',master_password='密碼', master_log_file='mysql-bin.000002',master_log_pos=1308; #注意不要斷開,“1308”無單引號。
start slave;
7. 檢視slave狀態show slave status\G;
結果中有兩個重要資料項:常見的問題是SQL執行緒沒有正常工作 Slave_SQL_Running: No
通常是兩邊的資料庫不是完全對應的,需要確保master上的庫及到目前為止的最新記錄都複製到slave上了
8. 測試
當IO執行緒和SQL執行緒都正常後,到master中隨意測試下插入、修改、刪除操作,同時到slave中檢查
1) Slave_IO_Running: Yes
IO執行緒狀態,必須YES
2) Slave_SQL_Running: Yes
SQL執行緒狀態,必須YES
在start slave 後發現 Slave_IO_Running=NO
show variables like 'log_error.log'
查詢錯誤日誌檔案位置,經過查日誌後提示master and slave have equal mysqlserver uuid,才想起我的系統是直接複製的,mysql-server 的uuid一樣了,
#find / -name auto.cnf
開啟隨意修改幾個字元,注意要保持UUID格式,然後重啟mysql完成Mysql 5.7 主從複製的多執行緒複製配置方式,資料庫複製的主要效能問題就是資料延時,為了優化複製效能,Mysql 5.6 引入了 “多執行緒複製” 這個新功能,但 5.6 中的每個執行緒只能處理一個數據庫,所以如果只有一個數據庫,或者絕大多數寫操作都是集中在某一個數據庫的,那麼這個“多執行緒複製”就不能充分發揮作用了,Mysql 5.7 對 “多執行緒複製” 進行了改善,可以按照邏輯時鐘的方式來分配執行緒,大大提高了複製效能,下面看一下在5.7中如何配置 “多執行緒複製”
1、對兩個mysql 例項配置好主從複製配置成功後,在從庫上使用
show processlist;
檢視現在的狀態可以看到只有一個複製執行緒在執行
2、在從庫上停止複製
stop slave;
3、設定併發同步型別為邏輯時鐘方式,先看下現在 slave 的併發型別,通過變數 slave_parallel_type 的值來獲得,這個變數用來決定如何使用多執行緒複製show variables like 'slave_parallel_type';
預設是datebase,每個執行緒只能處理一個數據庫配置成基於邏輯時鐘的方式
set global slave_parallel_type='logical_clock';
4、設定複製執行緒的數量先看下當前的併發數量,通過變數 slave_parallel_workers 的值來獲得,這個變數用來決定併發處理的執行緒數
show variables like 'slave_parallel_workers';
現在是 0,我們把他改成 4set global slave_parallel_workers=4;
5、啟動複製start slave;
6、驗證配置結果show processlist;
可以看到已經有4個IO執行緒了,配置完成