当业务繁多的时候,会不断的给单个mysql数据库进行读写操作,为了能让数据库减轻压力,我们会实现读写分裂,而读写分离的基础是基于主从复制。主数据库做写的操作,而从数据库做读的操作。
Mysql是默认支持主从复制的,不需要其他技术。
一、安装Mysql:
(1)在window上面安装:
1-1、材料准备
直接打开当前连接下载:MySQL :: Begin Your Download
当前MySQl的版本号为8.0,下载完解压之后,我们来看一下目录
这里是没有配置文件的。
所以我们需要手动去创建配置文件。my.ini
![]()
里面对应的参数为:

此时,现在只是安装前对所需要的材料进行准备,还不是真正的安装。
1-2、安装mysql
在mysql的bin目录下执行mysqld --initialize --console
该命令主要是对数据库进行一个初始化操作。此时,会显示最原始的账户以及密码:

然后再执行mysqld --install 服务名,这里的服务名可写可不写,默认名称为mysql,只是为了之后在服务上面进行区分那一个数据库而已。此时mysql安装完毕!
1-3、开启mysql服务
开启mysql服务:
net start mysql
关闭mysql服务:
net stop mysql
进入mysql服务的命令模式:
在bin目录下使用mysql -u root -p 然后输入密码就进入mysql服务里面去了。
(2)在Linux上面安装:


(3) 在docker上安装。
3-1、使用docker pull mysql命令,来获取mysql的镜像。

3-2、建立三个文档,复制存储对应的配置文件,以及日志文件和数据库文档

3-3、使用docker来启动mysql容器
首先我们需要知道的是docker的mysql容器内部文件对应的位置:
log日志文件:/var/log/mysql————————日志文件存放点
conf配置文件:/etc/mysql——————————配置文件存放点。
/etc/mysql/my.cnf————————主配置文件!
/etc/mysql/conf.d ————————配置文件目录,可以更加精细化配置
/etc/mysql/mysql.conf.d ————————配置文件目录,可以更加精细化配置
data数据文件:/var/lib/mysql——————数据库的数据表存放点。
所以我们需要把宿主机文档与其挂载在一起,从而获得对应的文档信息。

我们此时来看以下宿主机的文档,此时data的数据为:

这里其实就是docker的mysql容器里面的信息!那为很么conf文件夹是空的咧?因为mysql原本启动的时候也是空的。所以就是空的。我们需要往里面放入配置文件。

而配置文件应该是放在mysql/conf.d(这里本来也是空的,其实是两个文件配置目录里面的信息结合在一起变为my.cnf),此时我们需要把宿主机的挂载卷放在/etc/mysql/conf.d上面去。

此时只需要修改宿主机里面的hmy.cnf就可以了。
3-4、安装普通mysql参见问题。
问题一:
docker里面的mysql是开启了,但是宿主机测试连接的时候连接不上。出项下列情况

原因: 新旧版本mysql加密方式不同导致Navicat无法连接mysql
解决方案:
(1)进入mysql容器内部,查询当前mysql的用户名以及用户密码:
select host,user,plugin,authentication_string from mysql.user;

注意:host为%的话,也就是任意的地址都可以连接到mysql
(2)此时就需要修改对应的转换类型:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
其实这里是转换root的%的密码的数据类型为字符串类型。
然后就连接得上了。
二、部署主从关系:
首先部署好两个mysql容器先,分别是mysql-master(7001),mysql-slave(7002)
(1)、配置文件
分别修改对应的配置文件(宿主机里面的,因为使用了挂载卷。)

然后docker重启mysql容器。
(2)、主从关系建立
2-1、进入主库,创建给从库连接的用户名信息以及权限:
GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
![]()
2-2、查看主库的同步情况:

2-3、进入从库,配置连接主库的信息。

2-4 、从库开启读取主库的日志信息,从而同步
![]()
2-5、查看以下从库的状态:

我们来看一下那里出项了问题:

因为我们是使用docker,并且我们指定的端口位置是7001.所以我们需要在创建master的时候来把端口号也修改上。
![]()
一定要全部写全,不能单独添加,单独添加的话,其他参数会恢复为默认数据。
再次查看状态:

现在就可以了。
测试是否成功,我们使用navicat来在主表上面进行表格创建,查看以下是否同步!

完成同步!
三、整合到springboot:
(1)导入依赖
新的技术Sharding-JDBC,这个是使用客户端直连数据库,然后再返回数据给sprinboot。

(2)修改application.yml-----定义主从数据库信息。
也是通过调整配置文件来规定主库是那个,从库是那个:

(3)修改application.yml文件

开启如果项目中存放同名的bean,后定义的bean会覆盖先定义的bean。

本文详细介绍了如何在Windows、Linux和Docker环境下安装MySQL,以及如何实现主从复制进行读写分离。在Docker中遇到连接问题时,由于新旧版本加密方式差异,需转换用户认证类型。部署主从关系涉及配置文件修改、权限设置及日志同步。最后,文章提到将这一设置整合到SpringBoot应用中,利用Sharding-JDBC进行数据库访问。
1710

被折叠的 条评论
为什么被折叠?



