13、SpringBoot-读写分离环境搭建
2019-11-02 本文已影响0人
唯老
一、环境准备
docker-compose.yml
version: "3"
services:
mysql-master:
image: mysql:5.7.22
restart: always
hostname: mysql-master
container_name: mysql_master
ports:
- 3316:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
volumes:
- /opt/master/mysql/data:/var/lib/mysql
- /opt/master/mysql/log:/var/log/mysql
command:
--server_id=100
--log-bin=mysql-master-bin
--sync_binlog=1
--binlog-ignore-db=mysql
--binlog_format=mixed
--expire_logs_days=7
--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
links:
- mysql-slave-read
mysql-slave-read:
image: mysql:5.7.22
restart: always
hostname: mysql-slave-read
container_name: mysql-slave-read
ports:
- 3317:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
volumes:
- /opt/slave/mysql/data:/var/lib/mysql
- /opt/slave/mysql/log:/var/log/mysql
command:
--server_id=200
--read_only=1
--binlog-ignore-db=mysql
--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
mysql-slave-back:
image: mysql:5.7.22
restart: always
hostname: mysql-slave-back
container_name: mysql-slave-back
ports:
- 3318:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
volumes:
- /opt/slave-back/mysql/data:/var/lib/mysql
- /opt/slave-back/mysql/log:/var/log/mysql
command:
--server_id=300
--log-bin=slave-back-bin
--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,一般设置为IP,注意在一个局域网唯一
server_id=101
# =============== 非必要配置 ===============
#复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
# 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
# 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7
# 只读模式
read_only=1
# relay_log配置中继日志
当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启
relay_log=mysql-relay-bin
relay_log_recovery=1
# og_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
二、配置从数据库
主服务器相关操作
-
在主库创建一个用于同步的用户,赋予REPLICATION SLAVE的权限(直接用已有的)
grant replication slave on *.* to 'slave'@'%' identified by '123456';
也可以设置从局域网 192.168.1.%
-
执行以下命令锁定数据库以防止写入数据
FLUSH TABLES WITH READ LOCK;
-
主库执行:show master status; 记下 **Position 和 File **的值,等下进行从库配置要用到
| File | Position | | mysql-master-bin.000003 | 154 |
-
解锁数据表(从服务器配置完成之后别忘记解锁主数据库)。
UNLOCK TABLES;
flush tables with read lock show master status; grant replication slave on *.* to 'slave'@'%' identified by '123456'; UNLOCK TABLE
从服务器操作
-
执行如下命令(先停止同步,然后设置同步信息,master_log_file 和 master_log_pos就是我们主库上面的)
change master to master_host='127.0.0.1',master_user='slave',master_password='123456',master_port=3316,master_log_file='mysql-master-bin.000006', master_log_pos=438;
MASTER_HOST:主服务器的IP。
MASTER_USER:配置主服务器时建立的用户名
MASTER_PASSWORD:用户密码
MASTER_PORT:主服务器mysql端口
-
从库执行:show slave status 查看是否正常
CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-master-bin.000007', MASTER_LOG_POS=154; show slave status start slave STOP SLAVE set global sql_slave_skip_counter =1 reset slave
mysql> change master to -> master_host="ip地址", -> master_user="授权时指定的用户名", -> master_password="用户密码", -> master_log_file="binlog日志", -> master_log_pos=偏移量;
三、效果图

