標籤:問題 不用 adb grep root import soft 命令 連結
軟體環境介紹
作業系統:Ubuntu server 64bit 14.04.1
Docker 版本 1.6.2
資料庫:Mariadb 10.10 (Mariadb 是 MySQL 之父在 MySQL 被 Oracle 收購之後建立的分支,效能上優於 MySQL 開源版本)
第一步 安裝 Docker
對於 Ubuntu,建議直接連網安裝 Docker 最新版本,apt-get 中版本較老。首先擷取安裝指令碼:
下下來的雖然名字是 index.html,但其實是指令檔,所以我們
chmod +x index.html
這樣我們就可以執行這個檔案:
sudo ./index.html
安裝完成後根據提示,可以將目前使用者加到 docker 使用者組裡,這樣就不用每次執行 docker 都需要 sudo 了。
sudo usermod -aG docker <你的使用者名稱>
對於 Centos6,首先要把企業常用軟體包的軟體源安裝上
yum install epel-release
然後再
yum install docker-io
卸載列出你安裝過的包
$ yum list installed | grep dockeryum list installed | grep dockerdocker-engine.x86_64 1.7.1-1.el7 @/docker-engine-1.7.1-1.el7.x86_64.rpm
刪除安裝包
$ sudo yum -y remove docker-engine.x86_64
刪除鏡像/容器等
$ rm -rf /var/lib/docker
第二步 運行 Mariadb 容器
首先要將資料鏡像拉下來
docker pull mariadb:latest
注意,如果不加:latest 標籤,docker 會把所有的鏡像版本都拉下來。
然後我們就可以啟動鏡像了,參數方面需要注意的有一下幾點:
1,-name <給容器取個好記的名稱>
2,-e MYSQL_ROOT_PASSWORD =‘<給資料庫一個 root 使用者密碼>’
3,-p <映射到原生連接埠>:3306
4,-v <原生資料庫存放目錄>:/var/lib/mysql
5,設定 MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE 環境變數可以使容器在
運行時同時建立你所需要的資料庫和帶有全部許可權的使用者及其對應密碼
6,設定 TERM 環境變數的值可以解決容器不能進入 mysql 控制台的問題。 對於不是自己建立的鏡像,建立出來的容器未必能一次達到要求,建議是將 run 命令寫成指令碼,建立後使用
docker inspect <容器名>
仔細查看容器資訊,關注鏡像公開的連接埠和檔案目錄。如果發現達不到要求,使用
docker rm -r <容器名>
刪除容器後修改 run 指令碼再次運行,直到滿意為止。
下面是我的 run 命令:
docker run --name mdb1 \
-p 13306:3306 \
-v /home/wonders/docker_mdb1_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=wondersgroup \
-e MYSQL_USER=medical_waste \
-e MYSQL_PASSWORD=medical_waste \
-e MYSQL_DATABASE=medical_waste \
-e TERM=linux \
-d mariadb
第三步 配置一主一從叢集
3.1
接下來啟動另一個容器作為從資料庫,因為鏡像不支援在容器內進入 mysql 控制台,所以依然需要把連接埠暴露出來以供區域網路訪問,但主要資料庫容易可以連結進來作為一個可訪問的主機 master_db。
docker run --name <從資料庫名> -e MYSQL_ROOT_PASSWORD=<從資料庫 root密碼> --link <從資料庫容器名>:master_db -d mariadb
3.2
接下來就需要配置兩個資料庫了,前提工作是鏡像中並沒有內建 vi,所以在兩
個容器內都需要:
apt-get update
apt-get install vim
這樣我們才能在容器內修改設定檔。
還有一種方法,就是我們在主要資料庫容器中操作,之後,使用
docker commit <主要資料庫容器名> mariadb
這樣再建立的容器就包含 vi 了。
3.3
為講述方便,現在假設:我們有了連個資料庫,mdb1 和 mdb2, mdb1 我們作為主要資料庫,mdb2 作為從資料庫。
首先修改主要資料庫:
docker exec -it mdb1 /bin/bash
進入主要資料庫容器內之後,
把“server-id = 1”行的注釋去掉即可,儲存,退出容器,然後
docker restart mdb1
同樣的,把從資料庫的 my.cnf 修改“server-id = 2”,需要是比主 server-id大的數字,mdb2 同樣需要重啟。
3.4
使用用戶端串連上主要資料庫,這裡我使用的是 mysql workbench,從資料庫因為安全考慮並沒有公開連接埠給主機,只能進入容器的 mysql 控制台進行操作。
在主要資料庫中執行 SQL 指令碼:
/*設定用於同步的帳號、密碼*/
grant replication slave on *.* to ‘sync‘@‘%‘ identified by ‘sync‘;
/*儲存許可權設定*/
flush privileges;
/*查看主要資料日誌狀態,需要記住查詢結果 File 和 Position 值,是從資料庫複寫的日誌起點*/
show master status;
在從資料庫中執行 SQL 指令碼:
/*如果已經開啟了同步,停止同步*/
stop slave;
/*設定主要資料庫*/
chanage master to
master_host=‘master_db‘,
master_user=‘sync‘,
master_password=‘sync‘,
master_port=3306,
master_log_file=‘<主要資料庫查詢得到的File值>‘,
master_log_pos=<主要資料庫查詢得到的Positions值>;
下面是我的指令碼例子:
change master tomaster_host=‘master_db‘,master_user=‘sync‘,master_password=‘sync‘,master_port=3306,master_log_file=‘mariadb-bin.000004‘,master_log_pos=789;/*開啟從資料庫複寫*/
start slave;
最後可以通過
show slave status;
查看同步情況。
至此我們就建立了一個基於 Docker 的 Mariadb 資料庫叢集。
使用 Docker 建立 Mysql 叢集