使用 Docker 建立 Mysql 集群


軟件環境介紹
操作系統:Ubuntu server 64bit 14.04.1
Docker 版本 1.6.2
數據庫:Mariadb 10.10 (Mariadb 是 MySQL 之父在 MySQL 被 Oracle 收購之后
創建的分支,性能上優於 MySQL 開源版本)
第一步 安裝 Docker
對於 Ubuntu,建議直接聯網安裝 Docker 最新版本,apt-get 中版本較老。
首先獲取安裝腳本:
wget https://get.docker.com
下下來的雖然名字是 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
第二步 運行 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 -f <容器名>
刪除容器后修改 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
進入主數據庫容器內之后,
vi /etc/mysql/my.cnf
把“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;
/*設定主數據庫*/
change 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 to
master_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 數據庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM