如何利用docker快速建置MySQL主從複製環境的詳情介紹

黄舟
發布: 2017-03-04 14:51:58
原創
1174 人瀏覽過

在學習MySQL的過程中,常常會測試各種參數的作用。這時候,就需要快速建構出MySQL實例,甚至是主從。

考慮以下場景:

譬如我想測試mysqldump在指定--single-transaction參數的情況下,對於myisam表的影響。

本來想在現成的測試環境中進行,但測試環境中,有大量的數據,執行mysqldump進行全備,產生的SQL文件,很難基於表進行搜索。

這個時候,就特別渴望能有一套乾淨的實例來測試。


此刻,快速建立能力就顯得特別必要,許多童鞋可能會問,透過腳本不就能實現麼?為什麼要用docker?

個人感覺:腳本太重,會涉及很多額外的工作,譬如創建用戶,相對較長的數據庫初始化過程,MySQL啟動過程,而我需要的是一種快速構建,快速銷毀的能力。

而這,正是Docker的強項。

 

如下,是利用docker啟動一個實例的時間,不到1s,如果使用腳本來做的話,絕對不會這麼快。


# time  docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v //lib/mysql/slave://lib/mysql -p3307:-e MYSQL_ROOT_PASSWORD= -d mysql:
登入後複製


於是基於docker寫了個腳本,可在30s左右新建一套MySQL主從複製環境

#!/bin/=/var/lib/mysql/=/var/lib/mysql/ - - - ---name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  
--net=host -e MYSQL_ROOT_PASSWORD= -d mysql:.--name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v $SLAVE_DIR:/var/lib/mysql --net=host -e 
MYSQL_ROOT_PASSWORD= -. -it master mysql -S /var/lib/mysql/mysql.sock -e LAVE ON *.* TO @;=`docker exec -it master mysql 
-S /var/lib/mysql/mysql.sock -e =`  |   =`  |  =-it slave mysql -S /var/lib/mysql/mysql.sock -e eplrepldocker exec -it slave mysql 
-S /var/lib/mysql/mysql.sock -e   /etc/ [ $? -eq  ];
      >> /etc/  >> /etc/  >> /etc//etc/
登入後複製

腳本本身沒有太多需要說明的地方,主從容器起來後,遵循的還是常見的主從複製建立流程。

主要是說說建立容器所涉及的選項。

docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  
--net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
登入後複製


 -v /etc/master.cnf:/etc/mysql/my.cnf:將本機的設定檔對應成容器的設定文件,這樣,可以透過修改本機設定文件,來達到修改容器設定檔的效果。

 -v $MASTER_DIR:/var/lib/mysql :將本機目錄對應成容器的資料目錄,這樣,方便查看資料目錄的內容,不然的話,就預設儲存在/var/lib/docker /volumes目錄下,實在不方便查看。

 --net=host:共享宿主機的網絡,大幅降低容器之間的通訊複雜度。

 

注意

#在腳本剛開始的時候,會刪除先前的容器,這包含兩步驟操作

1. 透過docker指令刪除容器

2. 透過作業系統指令刪除之前容器的資料目錄。

    如果不刪除的話,再次透過如下指令建立容器時,並不會清空先前的資料目錄,而是直接載入,相當於新啟了一個mysqld行程啟動之前的實例。


docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  
--net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
登入後複製

    這也給我們提供了一個思路,如果只是想測試參數的作用,並不想新建實例的話,只需透過docker命令刪除容器,修改設定文件,透過上述命令建立容器即可。

在啟動實例後,執行了重啟實例的操作,因為在測試的過程中,發現如果執行docker exec -it master bash之類的操作,會導致容器down掉(具體down的原因還未分析),但是重啟實例後就沒問題。

docker stop master slave
docker start master slave

sleep 3
登入後複製


設定快速鍵

#mysql:mysql客戶端,可以透過該客戶端連接其它主機上的MySQL伺服器。

master:執行master即可登入本機的master實例,省掉了指定主機名稱和連接埠的操作。

salve:執行slave即可登入本機的slave實例。

 以上就是如何利用docker快速建構MySQL主從複製環境的詳情介紹的內容,更多相關內容請關注PHP中文網(www.php.cn)!


#
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!