MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
MySQL主从复制是一个异步的复制过程,底层是基于MySQL数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。
- 概述
- @[TOC](文章目录)
- 一、MySQL复制过程分成三步
- 二、使用步骤
- 配置-前置条件(master主库)
- 配置--从库Slave
- 在java配置文件application.yml添加如下代码就可以使用该技术了。
一、MySQL复制过程分成三步
- master将改变记录到二进制日志(binary log)
- slave将master的binary log拷贝到它的中继日志(relay log)
- slave重做中继日志中的事件,将改变应用到自己的数据库中
准备好两台服务器,并都安装MySQL同时启动服务成功
- 主库Master IP地址
- 从库Slave IP地址
该操作是Linux系统上操作的
在主库Master开启日志功能,需要在它的配置文件/etc/my.cnf 添加如下代码
[mysqld] log-bin=mysql-bin #[必须]启用二进制日志 server-id=100 #[必须]服务器唯一ID
不要忘了修改配置文件需要重启服务让其生效
systemctl restart mysqld
在Linux系统上登录MySQL数据库,执行下面SQL
GRANT REPLICATION SLAVE ON *.* to '用户名'@'%' identified by '密码';
执行下面的SQL语句,找到日志二进制文件
show master status;
如图
mysql-bin.000005是主库的二进制文件,441日志文件的位置
注:上面SQL的作用是创建一个用户,密码,并且给用户授予REPLICATION SLAVE权限。常用于建立复制时需要用到的用户权限,也就是slave必须被master授予具有该用户权限的用户,才能通过该用户复制。
在Linux修改MySQL数据库的配置文件/etc/my.cnf
[mysqld] server-id=101 #[必须]服务器唯一ID
该操作是Linux系统上操作的
不要忘了修改配置文件需要重启服务让其生效
systemctl restart mysqld
登录MySQL数据库,执行下面SQL
change master to master_host='主库IP地址',master_user='在主库创建的用户名',master_password='在主库创建的用户密码',master_log_file='主库的二进制文件',master_log_pos=主库二进制文件的位置;
然后开始slave进程
start slave;
查看从数据库的状态
show slave status;
看到两个yes就是配置好了。
##### mysql主从复制配置
spring:
shardingsphere:
datasource:
names:
master,slave
#主数据源
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://主ip:3306/reggie?characterEncoding=utf-8
username: ****
password: ****
# =从数据源
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://从ip:3306/reggie?characterEncoding=utf-8
username: ****
password: ****
##########读写分离配置
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
不用动任何Java代码就可以用该技术。



