mysql的主从复制+springboot实现读写分离
-mysql的主从复制:为了解决单台数据库的压力,一般需要两台数据库来分担压力。需要解决两台数据库之间的数据一致性问题。解决过程可以理解为从库在主库那里得到日志文件,之后运行日志,得到新库。
-配置主库:
1、修改mysql配置文件/etc/my.cnf,添加配置项:

2、重启服务: systemctl restart mysqld
3、执行sql语句:GRANT REPLICATION SLAVE ON . to ‘xiaoming’@‘%’ identified by ‘Root@123456’;(用于复制日志文件时的相应权限。)
4、查看主库状态:show master status;

-配置从库:
1、修改mysql配置文件/etc/my.cnf,添加配置项:

2、重启服务: systemctl restart mysqld
3、执行sql命令:
change master to master_host= ‘192.168.157.100’,master_user=‘xiaoming’,master_password=‘Root@123456’ ,master_log_file=‘mysql-bin.000001’,master_log_pos=441;
start slave;
4、查看从库状态:show slave status;
-测试:略,可以看到,从库的建库建表以及数据相关操作和主库会保持一致。
-在项目中实现读写分离:
1、导入maven坐标:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
2、修改配置:
spring:
# datasource:
# druid:
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
# username: root
# password: root
shardingsphere:
datasource:
names: master,slave
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.157.100:3306/db1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: root
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.157.101:3306/db1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: root
masterslave:
load-balance-algorithm-type: round_robin
name: dataSource
master-data-source-name: master
slave-data-source-names: slave
props:
sql:
show: true
main:
allow-bean-definition-overriding: true
注意:如果连接的是虚拟机上的数据库,需要加参数useSSL=false,即jdbc:mysql://192.168.157.101:3306/db1useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
说明:useSSL=true是进行安全验证,一般通过证书或者令牌,useSSL=false就是通过账号密码进行连接,通常使用useSSL=false。
3、运行项目测试:略。
更多推荐
所有评论(0)