简介:java系列技术分享(持续更新中…)
初衷:一起学习、一起进步、坚持不懈
如果文章内容有误与您的想法不一致,欢迎大家在评论区指正
希望这篇文章对你有所帮助,欢迎点赞 收藏 ⭐留言更多文章请点击
压力大
提高数据库的并发性能,
提高数据库的可用性。
Mysql主从复制是一个异步的复制过程,底层是基于Myslq自带的二进制日志
功能,就是一台或多台(从库
)Mysql数据库从另一台数据库(主库
)进行二进制日志的复制然后再解析应用于自身,最终实现从库的数据和主库数据一致。
从库可以有多台
,这里使用一主一从模式
数据库 | ip |
---|---|
Master |
192.168.100.101 |
Slave |
192.168.100.102 |
检查各自防火墙是否对数据库指定端口进行开放
修改Mysql数据库的配置文件: /etc/my,cnf
# 开启binlog【必须】
log-bin=mysql-bin
# 服务器唯一ID,唯一即可【必须】
server-id=101
# 需要同步的数据库,如果不配置则同步全部数据库
binlog-do-db=test_demo
# binlog日志保留的天数,清除超过10天的日志
# 防止日志文件过大,导致磁盘空间不足
expire-logs-days=10
配置完成后,重启mysql:
systemctl restart mysqld
创建数据库同步用户并进行授权
mysql -u root -p
GRANT REPLICATION SLAVE ON *.* to 'zhangsan'@'%' identified by 'Java@123456';
注意:
要求密码组成为:数字,大,小写字母,特殊字符,至少8位
登录数据库查看master状态
show master status;
File | Position |
---|---|
mysql-bin.000001 | 367 |
执行完后master不要执行任何操作(此时的Position 数值已经获取,从库要使用一旦操作Position 会改变)
修改Mysql数据库的配置文件: /etc/my,cnf
# 不要和其他mysql服务id重复即可
server-id=102
配置完成后,重启mysql:
systemctl restart mysqld
设置主库地址及同步位置
使用命令行进入mysql:
mysql -u root -p
执行以下语句
CHANGE MASTER TO
MASTER_HOST='192.168.100.101',//主机IP
MASTER_USER='zhangsan',//之前创建的用户账号
MASTER_PASSWORD='Java@123456',//之前创建的用户密码
MASTER_LOG_FILE='mysql-bin.000001',//master主机的binlog日志名称
MASTER_LOG_POS=367,//binlog日志偏移量
master_port=3306;//端口
设置完之后需要启动:
start slave;
查看slave状态
show slave status\G;
\G:sql语句后加\G,表示将查询结果进行按列打印,也就是结构旋转90度变成纵向
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.100.101
Master_User: zhangsan
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 247
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 374
Relay_Master_Log_File: mysql-bin.000001 //binlog日志文件名称
Slave_IO_Running: Yes //Slave_IO线程、SQL线程都在运行
Slave_SQL_Running: Yes
Slave_IO_Running和Slave_SQL_Running都是Yes,则表示同步完成。
主从复制完成后,我们还需要实现读写分离,master负责写入数据,slave负责读取数据。
<dependency>
<groupId>org.apache.shardingspheregroupId>
<artifactId>sharding-jdbc-spring-boot-starterartifactId>
<version>4.1.1-RC1version>
dependency>
这是使用druid连接池的配置
spring:
shardingsphere:
datasource:
names:
master,slave1 # 配置了几个则写几个,和下面名字一致即可
# 主数据源
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.100.101:3306/test_demo?characterEncoding=utf-8
username: root
password: 123456
# 从数据源
slave1:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.100.102:3306/test_demo?characterEncoding=utf-8
username: root
password: 123456
# slave2:
# type: com.alibaba.druid.pool.DruidDataSource
# driver-class-name: com.mysql.jdbc.Driver
# url: jdbc:mysql://192.168.0.110:3306/test_demo?characterEncoding=utf-8
# username: root
# password: 123456
masterslave:
# 读写分离配置
load-balance-algorithm-type: round_robin #轮询
# 最终的数据源名称
name: dataSource
# 主库数据源名称
master-data-source-name: master
# 从库数据源名称列表,多个逗号分隔
slave-data-source-names: slave1
props:
sql:
show: true #开启SQL显示,默认false
main:
allow-bean-definition-overriding: true
load-balance-algorithm-type是路由策略,round_robin表示轮询策略。
可以添加如下添加配置
spring
main:
allow-bean-definition-overriding: true