使用docker搭建mysql双主双从加读写分离详细到每一步
时间: 2024-01-14 18:04:37 浏览: 109
好的,以下是使用docker搭建mysql双主双从加读写分离的详细步骤:
1. 安装docker和docker-compose
2. 创建docker-compose文件
在本地创建一个目录,例如`/mysql_cluster`,在该目录下创建一个`docker-compose.yml`文件,并添加以下内容:
```
version: '3'
services:
mysql-master1:
image: mysql:5.7
container_name: mysql-master1
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
volumes:
- ./master1/conf:/etc/mysql/conf.d
- ./master1/data:/var/lib/mysql
ports:
- "3301:3306"
mysql-master2:
image: mysql:5.7
container_name: mysql-master2
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
volumes:
- ./master2/conf:/etc/mysql/conf.d
- ./master2/data:/var/lib/mysql
ports:
- "3302:3306"
mysql-slave1:
image: mysql:5.7
container_name: mysql-slave1
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- ./slave1/conf:/etc/mysql/conf.d
- ./slave1/data:/var/lib/mysql
ports:
- "3303:3306"
depends_on:
- mysql-master1
- mysql-master2
mysql-slave2:
image: mysql:5.7
container_name: mysql-slave2
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- ./slave2/conf:/etc/mysql/conf.d
- ./slave2/data:/var/lib/mysql
ports:
- "3304:3306"
depends_on:
- mysql-master1
- mysql-master2
```
3. 创建配置文件
在`/mysql_cluster`目录下创建四个文件夹`master1`、`master2`、`slave1`、`slave2`,分别用于存放四个mysql实例的配置文件和数据。
在`master1`文件夹下创建一个`my.cnf`文件,并添加以下内容:
```
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=testdb
replicate-do-db=testdb
```
在`master2`文件夹下同样创建一个`my.cnf`文件,并修改`server-id`为`2`。
在`slave1`文件夹下创建一个`my.cnf`文件,并添加以下内容:
```
[mysqld]
server-id=3
log-bin=mysql-bin
binlog-do-db=testdb
replicate-do-db=testdb
relay-log=slave-relay-bin
log-slave-updates=1
read-only=1
```
在`slave2`文件夹下同样创建一个`my.cnf`文件,并修改`server-id`为`4`。
4. 启动容器
在`/mysql_cluster`目录下运行以下命令启动容器:
```
docker-compose up -d
```
5. 配置主从复制
进入`mysql-slave1`容器,执行以下命令:
```
CHANGE MASTER TO
MASTER_HOST='mysql-master1',
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='root',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
```
进入`mysql-slave2`容器,执行以下命令:
```
CHANGE MASTER TO
MASTER_HOST='mysql-master2',
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='root',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
```
6. 配置读写分离
在`mysql-master1`和`mysql-master2`容器中执行以下命令:
```
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
```
7. 测试
现在我们已经成功搭建了mysql双主双从加读写分离的集群。我们可以使用以下命令测试:
在`mysql-master1`或`mysql-master2`中创建一个数据库:
```
create database testdb;
```
在`mysql-slave1`和`mysql-slave2`中查看是否同步成功:
```
show databases;
```
在`mysql-master1`或`mysql-master2`中创建一个表:
```
use testdb;
create table t1(id int, name varchar(20));
```
在`mysql-slave1`和`mysql-slave2`中查看是否同步成功:
```
use testdb;
show tables;
```
在应用程序中测试读写分离是否成功:
```
jdbc:mysql://localhost:3301,localhost:3302/testdb?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true
```
阅读全文