Docker 安装MySQL8.0并实现主从复制以及Springboot项目读写分离
Docker 安装MySQL8.0并实现主从复制以及Springboot项目读写分离
Docker安装MySQL8.0
docker pull mysql:8.0 # 拉取镜像
docker run --name mysql -e MYSQL_ROOT_PASSWORD=your_password -p 3306:3306 -d mysql:8.0 #运行容器
docker ps # 查看容器是否运行
docker inspect mysql # 查看docker详细信息
# --name 容器名称 docker inspect <容器名称>
cd /var/lib/docker/overlay2/a978f6da7c5a8e241af627abcbe94cc83fe048cf7610c1cf897497e085c321ac/merged #进入镜像所在的目录
cd /etc
vim my.cnf #修改配置文件
主从复制实现
主服务器
# 开启binlog
log-bin=mysql-bin
server-id=104
# 需要同步的数据库,如果不配置则同步全部数据库
binlog-do-db=dahe_edu_development
# binlog日志保留的天数,清除超过10天的日志
# 防止日志文件过大,导致磁盘空间不足
expire-logs-days=10
按Esc,wq 保存退出
docker restart <容器名称> #重启容器
docker restart mysql
进入容器,进行配置
docker exec -it mysql mysql -uroot -p
# 输入密码 启动容器时配置的密码
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password'; #创建用户
GRANT REPLICATION SLAVE ON . TO 'replication_user'@'%';
GRANT ALL PRIVILEGES ON . TO 'chen'@'%' WITH GRANT OPTION; #赋予用于管理员权限
FLUSH PRIVILEGES;
请将`replication_user`替换为您要创建的实际复制用户的用户名,`password`替换为您要设置的密码。
在主服务器上执行以下命令获取二进制日志的位置(File和Position):
SHOW MASTER STATUS;
从服务器
跟上面相同方法进入对docker的my.cnf配置文件
# 不要和其他mysql服务id重复即可
server-id=101
保存,重启
进入容器进行配置
docker exec -it mysql mysql -uroot -p
# 输入密码 启动容器时配置的密码
CHANGE MASTER TO
MASTER_HOST='192.168.0.104',//主机IP
MASTER_USER='chen',//之前创建的用户账号
MASTER_PASSWORD='Java@1234',//之前创建的用户密码
MASTER_LOG_FILE='mysql-bin.000001',//master主机的binlog日志名称
MASTER_LOG_POS=443680,//binlog日志偏移量
master_port=3306;//端口 (运行时去掉注释)
# 启动slave服务
start slave;
show slave status\G;
Slave_IO_Running: Yes //Slave_IO线程、SQL线程都在运行
Slave_SQL_Running: Yes
这两行也Yes就可以了。
Springboot读写分离实现
添加maven依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>5.2.1</version>
</dependency>
springboot yml数据源配置
spring:
shardingsphere:
mode:
type: Standalone
repository:
type: JDBC
datasource:
names:
master,slave
# 主数据源
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.1:3306/dahe_edu_development?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true
username: root
password: root
# 从数据源
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.2:3306/dahe_edu_development?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true
username: root
password: root
rules:
readwrite-splitting:
dataSources:
read-write-datasource:
static-strategy:
# 写库数据源名称
write_data_source_name: master
# 读库数据源列表,多个从数据源用逗号分隔
read_data_source_names: slave
# 负载均衡算法名称
load-balancer-name: round_robin
# 负载均衡算法配置
load-balancers:
round_robin:
# 负载均衡算法类型
type: ROUND_ROBIN
props:
sql:
show: true #开启SQL显示,默认false
main:
allow-bean-definition-overriding: true
完成读写分离配置,运行程序即可,可能出现idea包参数过长的报错信息
显示无法找到主类
点击下载markdown笔记Docker 安装MySQL8.0并实现主从复制以及Springboot项目读写分离.pdf
本文链接:
/archives/1690771543707
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
欲念!
喜欢就支持一下吧