docker-compose部署mysql主从集群
要使用Docker Compose在主从MySQL上部署MySQL数据库,您可以按照以下步骤操作:
# 创建docker-compose.yaml文件
创建一个名为docker-compose.yaml的文件,使用以下配置:
version: "3.9"
services:
master:
image: mysql:latest
container_name: master
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
volumes:
- ./mysql-master/data:/var/lib/mysql
- ./mysql-master/conf.d:/etc/mysql/conf.d
ports:
- "3306:3306"
command: --server-id=1 --log-bin=mysql-bin --binlog-format=ROW
slave:
image: mysql:latest
container_name: slave
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_MASTER_HOST: master
MYSQL_MASTER_PORT: 3306
MYSQL_MASTER_USER: root
MYSQL_MASTER_PASSWORD: rootpassword
volumes:
- ./mysql-slave/data:/var/lib/mysql
- ./mysql-slave/conf.d:/etc/mysql/conf.d
ports:
- "3307:3306"
command: --server-id=2 --log-bin=mysql-bin --binlog-format=ROW --slave-skip-errors=all --slave-net-timeout=60 --relay-log-recovery=1 --relay-log=slave-relay-bin --log-slave-updates=1 --read-only=1 --slave-net-timeout=60 --skip-slave-start --skip-networking
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
在这个配置中,我们定义了两个服务,一个主服务和一个从服务。我们使用MySQL的最新版本,并指定了容器名称,重启策略和环境变量。我们还将MySQL的数据目录和配置文件目录挂载到本地的./mysql-master/data和./mysql-master/conf.d目录以及./mysql-slave/data和./mysql-slave/conf.d目录。我们还将主服务的端口映射到本地的3306端口,从服务的端口映射到本地的3307端口。最后,我们使用命令行参数设置主从服务器的配置。
# 创建关键目录
现在,我们需要创建本地目录以便挂载到容器中。我们需要创建以下目录:
mkdir -p ./mysql-master/data
mkdir -p ./mysql-master/conf.d
mkdir -p ./mysql-slave/data
mkdir -p ./mysql-slave/conf.d
1
2
3
4
2
3
4
这些目录将用于挂载MySQL的数据和配置文件。
# 启动容器
使用以下命令启动容器:
docker-compose up -d
1
这将启动主从MySQL容器,并将它们后台运行。
现在,您已经成功地使用Docker Compose在主从MySQL上部署了MySQL数据库,并挂载了关键目录。
# 一体化脚本
mkdir -p my-databases && cd $_
mkdir -p ./mysql-master/data
mkdir -p ./mysql-master/conf.d
mkdir -p ./mysql-slave/data
mkdir -p ./mysql-slave/conf.d
cat > ./docker-compose.yml << EOF
version: "3.9"
services:
master:
image: mysql:latest
container_name: master
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
volumes:
- ./mysql-master/data:/var/lib/mysql
- ./mysql-master/conf.d:/etc/mysql/conf.d
ports:
- "3306:3306"
command: --server-id=1 --log-bin=mysql-bin --binlog-format=ROW
slave:
image: mysql:latest
container_name: slave
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_MASTER_HOST: master
MYSQL_MASTER_PORT: 3306
MYSQL_MASTER_USER: root
MYSQL_MASTER_PASSWORD: rootpassword
volumes:
- ./mysql-slave/data:/var/lib/mysql
- ./mysql-slave/conf.d:/etc/mysql/conf.d
ports:
- "3307:3306"
command: --server-id=2 --log-bin=mysql-bin --binlog-format=ROW --slave-skip-errors=all --slave-net-timeout=60 --relay-log-recovery=1 --relay-log=slave-relay-bin --log-slave-updates=1 --read-only=1 --slave-net-timeout=60 --skip-slave-start --skip-networking
EOF
docker-compose up -d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
编辑 (opens new window)