当客户端操作主库时,主库会产生binlog日志文件
从库通过复制主库的binlog日志文件,然后解析成相应的 SQL 语句在从库执行,实现主从一致的效果。
在主库做的增删改都会影响到从库,实现主从同步。
有两台服务器,并且都装有mysql
# /etc/my.cnf
[mysqld]
log-bin=mysql-bin # 启用二进制日志
server-id=1000 # 唯一ID
重启mysql服务
# replication slave 允许用户使用复制从站从主机读取二进制日志事件
# *.* 表示所有数据库中的所有表
# 在mysql数据库中的user表中 新增了一个用户xiaoming,IP任意 密码是 root
# 对用户 xiaoming 进行授权
grant replication slave on *.* to 'xiaoming'@'%' identified by 'root';
# 查看 master 的状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 446 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
# /etc/my.cnf
[mysqld]
server-id=1001 # 唯一ID
重启mysql服务
change master to master_host='主库服务器IP地址',master_user='xiaoming',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=446;
start slave;
# 查看从库状态
show slave status \G
# 看到这些信息基本就说明成功了
Slave_IO_State: Waiting for master to send event
Master_Host: 10.34.110.47
Master_User: xiaoming
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 446
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
先搭建好两个mysql之间的主从复制关系。
如果主库中之前已经有数据库数据了,先将主库中的数据库转储为 SQL文件,然后在从库中建同名数据库,之后执行SQL文件。
这样,主从库的环境就一致了。
<dependency>
<groupId>org.apache.shardingspheregroupId>
<artifactId>sharding-jdbc-spring-boot-starterartifactId>
<version>4.1.1version>
dependency>
spring:
shardingsphere:
datasource:
names: db1,db2
# 数据源 1
db1:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ruiji?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password:
type: com.alibaba.druid.pool.DruidDataSource
# 数据源 2
db2:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.44.128:3306/ruiji?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: xxxxxxxx
type: com.alibaba.druid.pool.DruidDataSource
masterslave:
load-balance-algorithm-type: round_robin # 从库负载均衡策略
master-data-source-name: db1 # 主库
slave-data-source-names: db2 # 从库
name: ruiji # 不可为空,任意取即可
props:
sql:
show: true # 终端 SQL日志
对从库:
stop slave;
reset slave all; # 清除 slave 信息
show slave status \G
对主库:
reset master;
如果想彻底清除主从的机制,可以将配置文件中主从相关的配置项删除,然后重启即可。
MySQL用户授权(GRANT)
Mysql取消主从复制