使用 Docker 建立 Mysql 叢集

來源:互聯網
上載者:User

標籤:問題   不用   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
  • 1
  • 2
  • 3
刪除安裝包
$ sudo yum -y remove docker-engine.x86_64
  • 1
刪除鏡像/容器等
$ 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 叢集

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.