Docker 部署MySQL集群

1. 拉取基础镜像

docker pull mysql:5.7

2. 创建目录

# 宿主机没创建用户组时 给工作目录满权限

# master 节点
mkdir -p /opt/mysql/mysql-master/conf.d
mkdir -p /opt/mysql/mysql-master/data
chmod -R 777 /opt/mysql/mysql-master/data

# slave1 节点
mkdir -p /opt/mysql/mysql-slave1/conf.d
mkdir -p /opt/mysql/mysql-slave1/data
chmod -R 777 /opt/mysql/mysql-slave1/data

# slave2 节点
mkdir -p /opt/mysql/mysql-slave2/conf.d
mkdir -p /opt/mysql/mysql-slave2/data
chmod -R 777 /opt/mysql/mysql-slave2/data

3. 编辑配置文件

# master 节点
vim /opt/mysql/mysql-master/my.cnf
[mysqld]
user=mysql
character-set-server=utf8
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
max_connections=200
server-id=1
gtid_mode=on
enforce_gtid_consistency
log-slave-updates
[client]
default-character-set=utf8


# slave 节点
vim /opt/mysql/mysql-slave/my.cnf
vim /opt/mysql/mysql-slave2/my.cnf
[mysqld]
user=mysql
character-set-server=utf8
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
#bind-address   = 127.0.0.1
max_connections=200
server-id=2
gtid_mode=on
enforce_gtid_consistency
log-slave-updates
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin
[client]
default-character-set=utf8

4.启动

# 版本不同建用先启动容器 查看容器目录结构
docker run --name mysql_mmaster -d -p 3310:3306 mysql:5.7

# master节点
docker run --name mysql_master -d -p 3310:3306 --restart=always -v /opt/mysql/mysql-master/data/:/var/lib/mysql -v /opt/mysql/mysql-master/conf.d:/etc/mysql/conf.d -v /opt/mysql/mysql-master/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql:5.7

# slave 节点1
docker run --name mysql_slave1 -d -p 3311:3306 --restart=always -v /opt/mysql/mysql-slave1/data/:/var/lib/mysql -v /opt/mysql/mysql-slave1/conf.d:/etc/mysql/conf.d -v /opt/mysql/mysql-slave1/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql:5.7

# slave 节点2
docker run --name mysql_slave2 -d -p 3312:3306 --restart=always -v /opt/mysql/mysql-slave2/data/:/var/lib/mysql -v /opt/mysql/mysql-slave2/conf.d:/etc/mysql/conf.d -v /opt/mysql/mysql-slave2/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql:5.7

5.查看虚拟IP

docker ps
# 查看分配随机分配IP
docker inspect 453e5c9c40b8 d5b3a5590432 05e948fe265a |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.4", # 从库
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.3", # 主库
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2", # 从库

6.配置主从

# 连接 mmaster
docker exec -it d5b3a5590432 /bin/bash
mysql -uroot -p
Enter password: 
mysql> grant replication slave on *.* to rep@'172.17.0.%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

# 连接 slave
docker exec -it d5b3a5590432 /bin/bash
mysql -uroot -p
Enter password:
mysql> change master to
    master_host='172.17.0.3',
    master_user='rep',
    master_password='123',
    master_port=3306,
    master_auto_position=1;
start slave;
show slave status\G
posted @ 2020-08-16 20:12  JoJoblog  阅读(146)  评论(0)    收藏  举报