主从同步复制模式(本篇讲得是异步复制)
异步复制:主库执行一次事务后,立即将结果返回给客户端,并不关心从库是否已经接收并处理
全同步复制模式:主库执行一次事务后,且所有从库都执行完该事务后才返回给客户端
半同步复制模式:主库执行一次事务后,等待至少一个从库接收到并写到relay log中才返回给客户端
无损复制:增强版的半同步复制,数据零丢失,性能好,mysql5.7诞生
面对主从同步延时:
1.从业务上改善: 对于时效性比较高 得业务可以强制从主库查询
2.采用半同步复制:兼顾异步、同步复制的优缺点
1.环境搭建
我是用的阿里云服务器数据库作为主库,本地数据库作为从库,mysql8安装可以参考[https://blog.csdn.net/weixin_46093894/article/details/106039926?spm=1001.2014.3001.5501]
2.主库配置(master),vim 编辑数据库配置文件,加上以下配置
server-id = 1 # 节点ID,确保唯一
# log config
log-bin = mysql-bin #开启mysql的binlog日志功能
sync_binlog = 1 #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
binlog_format = mixed #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 7 #binlog过期清理时间
max_binlog_size = 100m #binlog每个日志文件大小
binlog_cache_size = 4m #binlog缓存大小
max_binlog_cache_size= 512m #最大binlog缓存大
binlog-ignore-db=mysql #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行
auto-increment-offset = 1 # 自增值的偏移量
auto-increment-increment = 1 # 自增值的自增量
slave-skip-errors = all #跳过从库错误
3.从库数据库配置文件(slave)
server-id = 2
log-bin=mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%
4.重置主库从库mysql
service mysqld stop
service mysqld start
5.主库创建授权用户
CREATE USER repl_user IDENTIFIED BY 'repl_passwd';
-- 授权 可以指定IP ,也可以是所有ip地址均可访问 (用%号替代ip地址)
grant replication slave on *.* to 'repl_user'@'ip地址'
--刷新权限表
FLUSH PRIVILEGES;
查看主库状态
show master status;
6.从库登录数据库配置
mysql> CHANGE MASTER TO
MASTER_HOST = '172.17.0.3', #主库服务器地址
MASTER_USER = 'repl_user', #操作同步的账号
MASTER_PASSWORD = 'repl_passwd',
MASTER_PORT = 3307,
MASTER_LOG_FILE='mysql-bin.000005', # 和主库file保持一致
MASTER_LOG_POS=120, #和主库position 保持一致
MASTER_RETRY_COUNT = 60,
MASTER_HEARTBEAT_PERIOD = 10000;
**# MASTER_LOG_FILE='mysql-bin.000005',#与主库File 保持一致
**# MASTER_LOG_POS=120 , #与主库Position 保持一致****
7.启动slave进程
start slave;
关闭进程
stop slave;
8.在从库查询是否配置成功
show slave status;
以下两个参数都为yes则配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes