一、Docker安裝MYSQL
說明: 系統為阿里雲伺服器,作業系統為CentOS7.6。MYSQL版本 8.0.22
1、安裝Docker
2、拉取MySQL的鏡像
運行完以上命令之後,鏡像就已經下載下來了,可以用 docker images命令查看是否已經下載成功
3、第一次啟動MySQL
參數說明
之後的第二次啟動直接用 docker start MYSQL8即可。
4、連接navicat
新裝了MYSQL8.0後再用navicat連接就會報2059的錯誤。上網查了發現是8.0之後MYSQL更改了密碼的加密規則,只要在命令窗口把加密方法改回去即可。
1) 首先使用以下命令進入MySQL的Docker容器
2)然後登錄MySQL
3)最後運行以下SQL即可
添加完後保存,同時退出當前Docker容器。因為修改了配置文件,所以要重啟下該MYSQL,這裡重啟下該Docker容器就好了。
這樣就可以通過navicat工具連接當前資料庫了。這裡順便看下當前MYSQL的版本,通過 select version();
明顯可以看到當前MYSQL的版本是 8.0.22
注意:
我這邊Master庫和Slave庫不在同一個伺服器,所以Slave安裝MYSQL的步驟和Master一樣就可以了。一定要記住Msater庫和Slave庫的MYSQL版本號要一致。
二、配置Master和Slave
這裡假設主從伺服器的IP如下
1、配置Master
因為是通過Docker部署的MYSQL,所以要進入Docker內部修改MYSQL配置文件
進入容器後,切換到 /etc/mysql目錄下,使用vim命令編輯 my.cnf 文件。
注意:
此時用vim 命令會報 vim: command not found,因此我們需要在Docker內部安裝vim工具。
在my.cnf添加如下配置
添加完後保存,同時退出當前Docker容器。因為修改了配置文件,所以要重啟下該MYSQL,這裡重啟下該Docker容器就好了。
這個時候我們通過工具連接該MYSQL伺服器,你可以通過navicat或者Sequel pro等等,連接登上後。
創建用戶並授權
至此,Master配置完成。
2、配置從庫
和上面一樣進入到 etc/mysql路徑,使用vim命令編輯 my.cnf 文件:
配置完成後也需要重啟Docker容器。
3、開啟Master-Slave主從複製
上面兩步Master和Slave都配置成功了,而且Master也為Slave讀取Master數據專門設置了一個帳號,下面就來實現同步。
進入Master庫查看Master狀態
記住File和Position,後面Slave庫會在這個文件這個位置進行同步數據。此時一定不要操作Master庫,否則將會引起Master狀態的變化,File和Position欄位也將會進行變化。
進入Slave庫執行SQL
啟動之後我們來看下有沒有成功。
show slave status命令
從這張圖很明顯看出,對於Slave的兩個線程都成功了,那就說明整個MYSQL主從搭建成功了。如果有一個為NO,那就需要到後面看錯誤日誌,是什麼原因出錯了,解決下就好了。
三、測試
這裡簡單做一個測試
1、只在Mater 創建一張User表
現在 只在Mater 創建一張User表,如果現在Slave也同樣生成這張User表,那就說明成功了。
實際測試結果是成功的。
注意:
這裡如果我們先手動在Slave創建這張User表,然後再到Master創建User表那就出事情了。我們按照上面的步驟創建完後,去Slave通過 show slave status 查看
發現 SQL線程都變NO了。原因很簡單,錯誤日誌也說明了(Error 'Table 'user' already exists')。因為你在Master創建User表的SQL會記錄到bin-log日誌中,然後Slave
去讀取這個操作,然後寫入Slave中的時後發現這個SQL執行失敗,因為你Slave已經存在該User表,然後這整個主從複製就卡在這裡了。這是個很嚴重的問題。
所以一旦搭建主從複製成功,只要在Master做更新事件(update、insert、delete),不要在從數據做,否則會出現數據不一致甚至同步失敗。
2、Master插入一條數據
再去Slave資料庫查看
發現從資料庫已經寫入成功了。
總結:在搭建的過程可能還有其它的問題出現 你只要在Slave伺服器,通過show slave status,如果兩個IO是否為YES就代表是否成功,如果有為NO的,後面有欄位說明是什麼原因導致的,你再根據相關錯誤信息去查詢下解決方案,那就可以了。