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

文章作者: Administrator
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 欲念
喜欢就支持一下吧