前言
在生产环境中,为了保障数据安全性,一般都会对数据库进行多重备份,其中最常见的莫过于主从同步架构。而主从同步天生适用于读写分离,极大提升了数据读写的效率。
主从同步
主从同步至少需要部署两个数据库,一个主库(master),一个从库(slave)。主库会将数据操作记录在二进制日志文件,从库通过读取和执行二进制日志文件进行同步,这个同步操作是异步进行的,意味着主从库可以暂时断开连接,主库写入时也无需等待从库同步完成再响应。
动手实践
示例版本
工具 | 版本 |
---|---|
MySQL | 8.0.15 |
Windows | 10 |
主库(master)配置
1、修改配置文件 my.ini,主库端口这里设为 3306
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=C:\Server\MySQL
# 设置mysql数据库的数据的存放目录
datadir=C:\Server\MySQL\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 允许最大包
max_allowed_packet=100M
# 服务端使用的字符集默认为utf8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
# 设置一个唯一id,避免循环同步
server_id=1
# 忽略的数据库(多个逗号分割)
binlog-ignore-db=mysql
# 开启二进制日志功能
log-bin=today-master1-bin
# 日志格式(statement:日志量小,部分场景从库数据不一致 row:日志量大,稳定性高 mixed:前面两种模式混合)
binlog_format=mixed
# 日志过期清理时间(0表示不清理,也是默认值)
expire_logs_days=7
# 跳过主键重复错误,避免同步中断
slave_skip_errors=1062
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
2、重启 MySQL 服务(Windows 下命令)
net stop mysql-master
net start mysql-master
3、进入 MySQL 创建同步用户给从库连接
CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
4、查看日志状态(标记的值后面要用到)
从库(master)配置
1、修改配置文件 my.ini,从库端口这里设为 3307
[mysqld]
# 设置3307端口
port=3307
# 设置mysql的安装目录
basedir=D:\MySQL
# 设置mysql数据库的数据的存放目录
datadir=D:\MySQL\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 允许最大包
max_allowed_packet=100M
# 服务端使用的字符集默认为utf8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
# 设置一个唯一id,避免循环同步
server_id=2
# 忽略的数据库(多个逗号分割)
binlog-ignore-db=mysql
# 开启二进制日志功能
log-bin=today-slave1-bin
# 日志格式(statement:日志量小,部分场景从库数据不一致 row:日志量大,稳定性高 mixed:前面两种模式混合)
binlog_format=mixed
# 日志过期清理时间(0表示不清理,也是默认值)
expire_logs_days=7
# 跳过主键重复错误,避免同步中断
slave_skip_errors=1062
# 配置中继日志
relay_log=today-relay-bin
# 将复制事件写进自己的二进制日志
log_slave_updates=1
# 只读权限
read_only=1
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=utf8
2、重启 MySQL 服务(Windows 下命令)
net stop mysql-slave
net start mysql-slave
3、进入 MySQL 与主库建立连接(日志的文件名和位置就是上面的标记值)
change master to master_host='192.168.1.123', master_user='slave', master_password='slave', master_port=3306, master_log_file='today-master1-bin.000009', master_log_pos=336, master_connect_retry=30;
4、开启同步
start slave;
5、查看同步状态(都为 Yes 就成功了)
show slave status;
简简单单的几步主从同步就已经配置好了,暂时先不急着测试,先来根据MySQL 主从同步结合 MyBatis Plus 读写分离,企业级数据层架构分分钟搞定(二)! - 掘金 (juejin.cn)中的教程搭建读写分离,最后再两者结合做一个完整测试吧!