MySQL主从架构
主从架构
- 主从架构分为很多种:一主一从、双主架构、一主多从、多主多从等模式;通常主库可读可写,从库只读。
- MySQL最常见的主从架构的实现就是'主从复制(MySQL Replication)'模式,其可以实现读写分离,即写操作连接主库,读操作连接从库
基本原理
- 主库的数据发生了变更,将日志写入到主库的binlog中;
- 主库的LogDump线程,将binlog文件传输到从库的IO线程;
- 从库的IO线程将接收到的binlog写入到relay log中;
- 从库的SQL线程读取relay log中的日志,并操作重演,将结果同步到从库中;
实现步骤
前提
需要先完成一次全量同步
配置master数据库
修改my.cnf 配置文件
[mysqld]
log-bin=mysql-bin #[必须]启用二进制日志
server-id=100 #[必须]服务器唯一ID
重启msyql服务
略
创建主从复制权限账号
CREATE USER '用户名' IDENTIFIED WITH 'mysql_native_password' BY '密码';//第一步
GRANT REPLICATION SLAVE ON *.* TO '用户名';//第二步
flush privileges;//第三步刷新立刻生效
验证master是否配置成功
show master status;
配置slaver数据库
修改my.cnf 配置文件
[mysqld]
server-id=101 #[必须]服务器唯一ID
重启msyql服务
略
slaver连接master
change master to master_host='主数据库地址',MASTER_PORT=端口号,master_user='主数据创建的权限账号',master_password='密码',master_log_file='主数据里面的File',master_log_pos=主数据库里面的Position;
// 示例
change master to master_host='142.21.56.322',MASTER_PORT=3317,master_user='slaver',master_password='root',master_log_file='mysql-bin.000005',master_log_pos=743;
启动连接
start slave;
验证主从复制是否配置成功
show slave status;
Sharding-JDBC
读写分离
spring:
shardingsphere:
datasource:
names:
master,slave
# 主数据源
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.31.16.32:3317/activiti?characterEncoding=utf-8
username: root
password: root
# 从数据源
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.31.16.32:3316/activiti?characterEncoding=utf-8
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 #开启SQL显示,默认false
main:
allow-bean-definition-overriding: true
主主复制-基本原理
主从复制中,只能做到数据分流,但无法解决单点故障的问题;即若主库节点宕机,此时对从库进行的操作并不会同步到主库中,也就会导致数据库无效;为此引入主主复制方案:将两台MySQL之间互为彼此的主库,同时又互为对方的从库;此时任何的一台节点故障,另外的一台都可以继续提供服务;
区别:一主一从故障后需人为手动介入,而双主模式下能够自动切换。
参考文章
【1】主从复制-实战
【2】主从复制-实战
【3】主从复制-修改端口号