一、导入多数据源相关依赖
<properties>
<dynamic-datasource.version>2.5.4</dynamic-datasource.version>
<mybatis.version>2.1.1</mybatis.version>
</properties>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${dynamic-datasource.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
二、编写dockercompose.yml
version: '3'
services:
# 主服务器
master:
image: mysql:5.7.22
restart: always
container_name: master-6310
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
# 在编写多数据源的docker-compose.yml的基础上加上以下三条配置
# 设置server_id,一般设置为IP端口,注意在一个局域网唯一
--server-id=3310
# 指定log-bin
--log-bin=log-master
# 指定binlog格式
--binlog_format=mixed
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
MYSQL_DATABASE: db_test
volumes:
- ./master/data/:/var/lib/mysql
- ./master/log/:/var/log/mysql
ports:
- 6310:3306
# 从服务器
slave:
image: mysql:5.7.22
restart: always
container_name: slave-6311
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--server-id=6311
# 只读
--read_only=1
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
MYSQL_DATABASE: db_test
volumes:
- ./slave/data/:/var/lib/mysql
- ./slave/log/:/var/log/mysql
ports:
- 6311:3306
三、Linux系统下执行docker-compose.xml文件
生成相应的mysql容器
四、连接数据库,执行以下操作命令
一、> 主服务器相关操作
1. 在主库创建一个用于同步的用户,赋予REPLICATION SLAVE的权限(直接用已有的)
grant replication master on *.* to 'master'@'%' identified by '123456';
2.执行以下命令锁定数据库以防止写入数据
FLUSH TABLES WITH READ LOCK;
3.主库执行:show master status; 记下 Position 和 File 的值,等下进行从库配置要用到
show master status;
记录下File和Position的值.
4.解锁数据表(从服务器配置完成之后别忘记解锁主数据库)。
UNLOCK TABLE
二、>从服务器相关操作
- 执行如下命令(先停止同步,然后设置同步信息,master_log_file 和 master_log_pos就是我们主库上面的)
change master to master_host='主服务器ip',master_user='主库的username',master_password='主库的密码',master_port=主库的端口号,master_log_file='主库操作第三个命令查的File属性', master_log_pos=438;
MASTER_HOST:主服务器的IP。
MASTER_USER:配置主服务器时建立的用户名
MASTER_PASSWORD:用户密码
MASTER_PORT:主服务器mysql端口
- 从库执行:show slave status 查看是否正常
start slave
show slave status
以上三个属性的值分别如上图所示表示主从关系设置成功!
四、测试
去主数据库新建一个表插入数据,从数据库会同步更新生成一个相同的表和数据。