業務背景
唉,最近和同事吃飯,大家都覺得每天吃飯路上都在討論一些八卦,既沒營養,又無聊!於是乎,有個開發大牛想了想提出了一個問題:最近服務器單機mysql怕有問題,所以想搭建主從,但又不想再另外一臺服務器上直接裝mysql(裝太多太亂)!樊***,你不是會docker嘛!麻煩你用docker在我的兩臺服務器上搭建一個主從唄!
難點分析
- MYSQL 容器裏不能使用vim
- 兩臺服務器跨區,需要使用公網IP
安裝步驟
一、主庫安裝
- 參照dockerhub描述創建一個mysql基礎容器
方法一:
可以創建一個最簡單myql容器,然後再修改配置
docker run --name fanrui_mysql_master -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
方法二:
創建一個帶映射配置文件的容器(請注意下面在一行執行)
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-
注: 之所以介紹兩種方式是因爲第一種方法需要進入容器內編輯配置文件,從而導致not foud vim
解決方法:1 apt-get update 2 apt-get install vim
這兩個步驟都有可能會失敗,而且特別慢,只能耐心等待,或者去喝杯咖啡了,
失敗的話,重新執行一次或幾次還是可以成功的(我暫時沒有加速的辦法) -
注:第二種方法需要重點注意映射的的宿主機路徑與容器路徑的關係,可能導致映射失敗
解決方法:1 映射前宿主機chmod 777 宿主機目錄
2 目錄一定要映射到足夠深的目錄 -
注:下圖1是我按照dockehub上的介紹,映射到1的位置,編輯mysql配置文件mysql.cnf不生效
下圖2是我按照dockehub上的介紹,映射到2的位置,編輯mysql配置文件mysqld.cnf可生效
-
編輯mysqld.cnf
在[mysqld]下添加
# 這裏的 server-id 相對於從庫唯一即可
server-id = 1
log-bin = mysql-bin -
重啓mysql服務,停止容器,再重啓動容器即可
docker stop mysql容器
docker start mysql容器 -
進入主mysql,查看master信息
二、從庫安裝
1.從庫容器創建:參照主庫容器
2. 修改配置文件
路徑:/etc/mysql/mysql.cnf.d/mysql.cnf
在[mysqld]下添加
# 這裏的 server-id 相對於主庫唯一即可
server-id = 13
log-bin = mysql-slave-bin
relay-log =edu-mysql-replay-bin
3. 重啓mysql服務,停止容器,再重啓動容器即可
docker stop mysql容器
docker start mysql容器
4. 進入mysql從庫,執行下面語句
該語句功能爲給從庫指定同步目標
change master to master_host=‘公網IP’, master_user=‘root’, master_password=‘123456’, master_port=3306, master_log_file=‘mysql-bin.000003主庫剛纔查到的’, master_log_pos= 2830同步位置, master_connect_retry=30;
- 注:正常情況不應該用root去同步,爲了試驗方便就暫時用root吧
5.檢查配置狀態
執行:show slave status \G;
在沒有執行start slave的時候,兩個yes,應該是兩個No,不過沒有問題,不是錯誤
執行:start slave,再執行 show slave status \G;
如果一個yes,一個一直是connectioning,那麼恭喜你,只差最後一步了!
三、公網配置
-
關閉主從庫容器,並打包成新的鏡像
鏡像打包請參照:鏡像打包 -
創建新的主從容器,並分別將2375端口映射到3306
docker run -d --name new_main -p 2375:3306 新主庫鏡像:tag
docker run -d --name new_slave -p 2375:3306 新從庫鏡像:tag -
重新進入從庫容器,執行步驟二的第4,5操作
執行:start slave,再執行 show slave status \G;之後如果兩項都是yes,則說明已經可正常同步!
- 如果是雲服務器,一定要在安全組打開2375端口
- 如果是雲服務器,一定要在安全組打開2375端口
- 如果是雲服務器,一定要在安全組打開2375端口
四、測試
- 通過工具主庫創建一個測試數據庫,刷新從庫
create database testDockerPublic;
總結:這種方式其實並不是可以上生產環境的,因爲2375本身存在安全隱患,如果哪位博友對docker網絡比較熟悉,也希望能再評論區留下您的地址,不剩感激!
相關參考
https://www.cnblogs.com/songwenjie/p/9371422.html
https://www.jianshu.com/p/3eb1e178f51b
https://blog.csdn.net/qq_38423105/article/details/88385673
https://www.cnblogs.com/xiohao/p/9059256.html