[Demo示例]Docker構建本地Mysql主從庫——手動建立。
阿新 • • 發佈:2021-02-05
緣起:
想在本地使用Docker建立Mysql主從庫,後續要實現全自動化,本次先手動實現功能。
步驟:
- 下載映象
docker pull mysql
- 啟動兩個mysql容器。
此處MYSQL_ROOT_PASSWORD是重點,設定密碼為root否則無法啟動
第一個:m1
docker run -p 3306:3306 --name m1 -e MYSQL_ROOT_PASSWORD=root -d mysql
第二個:slave1
docker run -p 3307:3306 --name slave1 -e MYSQL_ROOT_PASSWORD=root -d mysql
- 修改mysql配置檔案 /etc/mysql/my.cnf
主要追加3行(可以用linux的sed命令):sed '$a第一行\n第二行' my.cnf.bak > my.cnf # $表示最後,a表示追加內容,\n表示換行,>表示輸出到文字
# 主庫的配置 log-bin=mysql-bin #開啟日誌,mysql從庫通過日誌來更新自己的資料。 server-id=1 binlog-do-db=dbName #這裡就是指定要同步的資料庫
# 從庫的配置 log-bin=mysql-bin #一樣的,同上 server-id=2 #id不能相同 replicate-do-db=dbName #唯一區別
分割線:到此就配置完了,下面執行mysql語句就可以完成了。
- 主庫建立使用者,授權。
注:-- 建立使用者 create user 'sync'@'172.17.0.3' identified WITH 'mysql_native_password' BY '123'; -- 授權 grant replication slave on *.* to 'sync'@'172.17.0.3'; -- 使生效 flush privileges;
容器的ip可以通過 cat /etc/hosts 檢視;
mysql_native_password可以避免訪問時對密碼加密的要求;
mysql8之後的版本,使用者建立、授權不能同時進行,必須先建立再授權。 - 從庫開啟同步。
注:-- 下面的master_log_file和master_log_pos在主庫show master status命令獲得。 -- 這兩個標識檔案和偏移,決定了我們從哪開始同步 change master to master_host='172.17.0.2',master_user='sync',master_password='123',master_log_file='mysql-bin.000005',master_log_pos=865; -- 開啟 start slave; -- 檢視狀態 show slave status;
show master status;後面可能會有\G,它是把結果旋轉90度,在navicate中會報錯,沒法用。
show slave status;結果中有錯誤資訊,有問題可以根據它的提示來修改。只要Slave_IO_Running和Slave_SQL_Running是Yes,那就表示正常運行了~
未完待續,下次要做成一鍵全自動的,問題有:
- 建立容器時,修改my.cnf檔案
- 分配不同的server-id ,容器名帶id
- 啟動容器時,獲取容器ip,授權