吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1937|回复: 5
收起左侧

[Java 转载] Sharding-JDBC实现读写分离,Springboot,docker,mysql8(一)

[复制链接]
奔跑的蜗牛119 发表于 2021-7-12 11:15

如有违规请管理删帖

1.前提

根据项目需要对数据库进行读写分离,主库负责处理事务性的增删改操作,从库负责处理查询操作,改善查询性能,使用 mysql的主从同步配置实现数据同步

2 首先说一下遇到的小问题,防止再次入坑。

2.1 mysql版本

使用docker拉去的是mysql8的版本,关于密码验证这部分有了较大变动,详见Mysql8,
创建用户的时候可以用

CREATE USER superadmin@'%' IDENTIFIED WITH mysql_native_password BY '123456';

mysql8有新的安全要求,不能像之前的版本那样一次性创建用户并授权需要先创建用户,再进行授权操作

3 步骤

3.1 使用docker拉取mysql,创建容器,这里使用3307(主数据库) 3308(从数据库)

docker run -itd --name mysql-3307 -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
docker run -itd --name mysql-3308 -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

docker-mysql.png

3.2修改数据库配置文件

1.进入容器

docker exec -it mysql-3307 /bin/bash

2.查看一下当前配置文件(截图是已经配置好了的)
mysql-1.png
主要添加以下内容

#开启 MySQL 日志
log-bin = mysql-bin
#设置服务 id  主从不能一致
server-id = 1
#设置需要主从同步的数据库名称
binlog-do-db = user_db
#屏蔽系统数据库同步
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema

3.相对应的修改从库数据库配置文件
/etc/mysql/my.cnf

docker exec -it mysql-3308 /bin/bash

mysql-2.png

#开启 MySQL 日志
log-bin = mysql-bin
#设置服务 id  主从不能一致
server-id = 2
#设置需要主从同步的数据库
binlog-do-db = user_db
#屏蔽系统数据库同步
binlog-ignore-db = mysql.%
binlog-ignore-db = information_schema.%
binlog-ignore-db = performance_schema.%

4.修改完后,退出容器,重启容器
退出:使用exit命令退出

exit

重启:

docker restart mysql-3307
docker restart mysql-3308

3.3 配置主从复制账号并授予权限

1.进入容器

docker exec -it mysql-3307 /bin/bash

2.使用root账号登入mysql,按照要求输入初始密码:123456(这是在启动镜像的时候设置的)

mysql -u root -p

3.创建一个用来主从同步的账号

CREATE USER sync_user@'%' IDENTIFIED WITH mysql_native_password BY '123456';

4.授予权限 REPLICATION SLAVE:允许用户使用复制从站从主机读取二进制日志事件
grant

GRANT REPLICATION SLAVE ON *.* TO sync_user@'%';

5.刷新权限

FLUSH PRIVILEGES;

6.查看位点
执行以下命令,并记住箭头指向的两个值

show master status;

3.4 配置从库,使从库可以向主库拉去操作日志

1.进入容器

docker exec -it mysql-3308 /bin/bash

2.使用root账号登入mysql,按照要求输入初始密码:123456(这是在启动镜像的时候设置的)

mysql -u root -p

3.修改从库指向主库配置,需要使用上面箭头指向的两个值,修改下面配置,并在mysql中执行

CHANGE MASTER TO 
        master_host = '172.17.0.2',  #指定主库 IP 地址,可以通过 docker inspect mysql-3307 命令查看主库 IPAdress
        master_port = 3306,  #这个端口为主库容器内的 mysql 端口,不是宿主机映射容器的端口
        master_user = 'sync_user',  #主库创建的复制用户
        master_password = '123456', #复制用户密码
        master_log_file = 'mysql?in.000005',  #主库文件名
        master_log_pos = 42854;  #主库位点

4.启动同步

start slave;

5.查看启动是否成功,查看Slave_IO_Runing和Slave_SQL_Runing都为Yes说明同步成功

show slave status;

如下表示已成功
mysql-3.png

在 Sharding-JDBC实现读写分离,Springboot,docker,mysql8(一)中主要介绍了数据库读写分离中关于数据库同步方面的问题,如果对此感兴趣,后续再发布shardingJDBC与SpringBoot整合

参考:

Sharding-JDBC实现读写分离,使用 mysql 配置主从同步

易百教程-mysql
菜鸟教程
知乎-mysql

mysql-4.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

打不过用嘴咬 发表于 2021-7-12 11:17
好高级啊,小白表示看不懂
csp3949160 发表于 2021-7-12 11:29
mz135135 发表于 2021-7-12 11:30
这不是主从同步么,下一步就该配置多数据源了
xcdSir 发表于 2021-7-13 15:33
又学到了知识,感谢楼主分享
5252pojie56 发表于 2021-7-13 15:38
没机会用上分库功能怎么办?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表