1. 程式人生 > 其它 >通過Docker搭建Mysql主從複製

通過Docker搭建Mysql主從複製

1. 更新yum映象倉庫

yum-utils 提供了 yum-config-manager ,並且 device mapper 儲存驅動程式需要 device-mapper-persistent-data 和 lvm2,這兩個是 devicemapper 必要依賴包

yum install -y yum-utils device-mapper-persistent-data lvm2

設定docker的源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

2. 搭建Docker環境

安裝docker

#檢視docker版本
yum
list docker-ce --showduplicates
#安裝預設的docker-ce
yum install docker-ce

# 獲取自己的阿里雲映象加速器地址地址 https://cr.console.aliyun.com/
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["映象加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3.嘗試拉取並啟動MySQL映象

docker pull mysql:5.7  #拉取MySQL5.7版本
docker images #檢視映象檔案

docker run -d -e MYSQL_ROOT_PASSWORD=mysql -p 13306:3306 c20987f18b13 #啟動MySQL映象,並將埠繫結到13306
mysql -h127.0.0.1 -u root -P3306 -pmysql  #登入mysql,前提本地裝有MySQL客戶端

docker run -d -e MYSQL_ROOT_PASSWORD=mysql -p 13305:3306 c20987f18b13 #啟動另一個mysql容器,並將埠繫結到13305

目前已經有兩的mysql容器執行起來了

4.配置主從複製MySQL

4.1 修改MySQL的Master節點的配置

  • 進入到master容器中 : docker exec -it a35bf635eabf /bin/bash
  • 為容器安裝vim工具: apt-get update && apt install vim procps
  • 在my.cnf中新增如下配置(在容器中修改)

[mysqld]
log-bin = master-bin
log-bin-index = master-bin.index
server-id = 1

  • 在master上建立一個複製使用者,並對此使用者賦予複製的許可權
mysql> create user repl_user;
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to repl_user identified by 'passwd';
Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 重啟mysql,即重啟docker容器即可

4.2 修改MySQL的Slave節點的配置

  • 在my.cnf中新增如下配置(在容器中修改)

[mysqld]
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index

  • server-id = 2

 

  • 重啟mysql,即重啟docker容器即可

4.3 將slave指向master

下邊的命令要在slave的MySQL中執行

mysql -h 127.0.0.1 -u root -P13305 -ppasswd
mysql> change master to MASTER_HOST='192.168.226.101',MASTER_PORT=13306,MASTER_USER='repl_user',MASTER_PASSWORD='passwd';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status;

5. 資料同步結果檢視

5.1 主節點mysql寫入資料

mysql -h 127.0.0.1 -u root -P13306 -p
mysql> create database myTestDB -> ; Query OK, 1 row affected (0.00 sec) mysql> use myTestDB; Database changed mysql> create table myTestTable (id int ,name char(20) ); Query OK, 0 rows affected (0.00 sec) mysql> insert into myTestTable values (1,'zhangsan'),(2,'lisi'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0

5.2 從節點mysql查詢資料

 

 

6. 將容器儲存為映象

[root@hd1 ~]# docker commit a35bf635eabf mysql_master
sha256:bf6f17a24929449a075558ad917f81f163366efb93c94542490bd64ef2c3fc66
[root@hd1 ~]# docker commit 235b9e1de859 mysql_slave
sha256:b59e4b5f2071f8be86dd94106dd06aa5c083ac795d4acf51f66fe9646f5a7f7a

[root@hd1 ~]# docker images
REPOSITORY                TAG       IMAGE ID       CREATED          SIZE
mysql_slave               latest    b59e4b5f2071   7 seconds ago    500MB
mysql_master              latest    bf6f17a24929   23 seconds ago   500MB
mysql                     5.7       c20987f18b13   3 months ago     448MB
centos/mysql-57-centos7   latest    f83a2938370c   2 years ago      452MB