MySQL主从同步复制实现
2021/11/3 19:09:44
本文主要是介绍MySQL主从同步复制实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MySQL主从同步复制实现
一.概念
1.数据库一主多从
高性能: 单点分散到多台机器上。
备份: 等同于实现Backup。
负载均衡: 若主挂掉,切换一台Slave机器作为Mater。若Slave挂掉,还有其他Slave支持。
二.实现原理
1.Mater将变更记录到二进制日志BinaryLog中,Mysql根据事物提交顺序依次记录
2.Slave从库 两个线程 (I/O thread 、SQL thread),IO请求主库获取Log日志最新位置,读取变更到从库,SQL线程 实施执行变更记录。
3.复制方式 —— mysql 两种模式动态切换 默认语句复制
3.1 基于语句复制 Log日志记录SQL操作语句,从库进行执行,日志空间占用小,宽带传输较高。插入更新日期函数 尽量放在代码逻辑层。
3.2 基于行复制 Log日志记录更新每行数据,非SQL,日志空间占用大,宽带传输大,但数据更精确,忽略上面提到日期函数
三. 延迟问题
1. 网络方面:将从库分布在相同局域网内或网络延迟较小的环境中
2. 硬件方面:从库配置更好的硬件,提升随机写的性能
3. 根据业务场景 选择复制策略(上述提到过),延迟没有最好解决方案,只是根据业务不同而选择
4. 主从复制达到瓶颈采用 — 分库分表方式
-------------------------------------------------------- 开 始 实 操 --------------------------------------------
主库 Master
my.cnf配置
[mysqld] # 端口 port=3306 # 数据库引擎 default-storage-engine=INNODB # Master的id,唯一,在主从中唯一 server-id=1 # 配置要给Slave同步的数据库 binlog-do-db=demo_0 # 启用二进制日志 log-bin=master-bin # 不用给Slave同步的数据库,Mysql自带的数据库就不用给Slave同步了 binlog-ignore-db=information_schema binlog-ignore-db=mysql binlog-ignore-db=performance_schema binlog-ignore-db=sys # 清理30天以前记录 expire_logs_days=30
创建设置同步库、重启主库服务、查看Log_bin是否开启、查看Mater状态
# 有数据库就忽略 create database demo_0 default character set utf8mb4 collate utf8mb4_general_ci; #重启Mysql docker restart (容器ID) # 查看Log_bin是否开启 show variables like '%log_bin%'; # 查看Master状态 File和Position要记住 配置Slave要使用 show master status;
登录Master数据库 创建一个用于同步数据
# 创建用户名backup 密码backup create user 'backup'@'%' IDENTIFIED BY 'backup'; # 分配权限 grant file on *.* to 'backup'@'%'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%'; # 刷新权限 flush privileges;
从库Slave
my.cnf 配置
[mysqld] # 端口 port=3306 # Slave的id,唯一,在主从中唯一 server-id=2 #加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。 read_only = 1 master_info_repository=TABLE relay_log_info_repository=TABLE
重启从库服务、停止Slave、添加Master、启动Slave、查看Slave状态
# 重启Mysql docker restart (容器ID) # 停止Slave stop slave # 添加Master master_log_file和master_log_pos就是配置之前查看show master status状态时显示的File和Position信息 CHANGE MASTER TO master_host = '主库服务器IP', master_port = 3306, master_user = 'backup', master_password = 'backup', master_log_file = 'mysql-bin.000001', master_log_pos = 1513; # 启动Slave start slave # 查看Slave状态 保证Slave_IO_Running和Slave_SQL_Running 值YES show slave status
注意:
1. Slave_SQL_Running 为NO 检测添加Master中master_log_file 和master_log_pos 与主库show master status 结果是否一致。
2. 添加Master信息 一定要执行stop slave 。
3. 主库登录用户名 使用创建的同步数据库 账户 上述是backup 其他账户不会触发复制
这篇关于MySQL主从同步复制实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01如何部署MySQL集群:新手入门教程
- 2024-11-01部署MySQL集群学习:新手入门教程
- 2024-11-01部署MySQL集群入门:新手必读指南
- 2024-10-23BinLog入门:新手必读的MySQL二进制日志指南
- 2024-10-23Binlog入门:MySQL数据库的日志管理指南
- 2024-10-22MySQL数据库入门教程:从安装到基本操作
- 2024-10-22MySQL读写分离入门教程:轻松实现数据库性能提升
- 2024-10-22MySQL分库分表入门教程
- 2024-10-22MySQL慢查询的诊断与优化指南
- 2024-10-22MySQL索引入门教程:快速理解与应用指南