基于bin-log&position搭建主从架构MySQL (一)

本文涉及的产品
RDS AI 助手,专业版
RDS Agent(兼容OpenClaw),2核4GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 基于bin-log&position搭建主从架构MySQL (一)

一、MySQL主从搭建#


搭建主从架构的MySQL常用的有两种实现方式:


  1. 基于binlog的fileName + postion模式完成主从同步。
  2. 基于gtid完成主从同步搭建。


本篇就介绍如何使用第一种方式完成MySQL主从环境的搭建。


基于fileName和position去实现主从复制,所谓的fileName就是bin-log的name,position指的是slave需要从master的binlog的哪个位置开始同步数据。


这种模式同步数据方式麻烦的地方就是需要我们自己通过如下的命令去查找应该从哪个bin-log的哪个position去开始同步。


二、主库#


2.0、确定主库的binlog是否开启#


命令:


SHOW VARIABLES LIKE 'log_bin';


原因:了解MySQL中常见的三个日志:

  1. 单机MySQL的undolog日志中记录着如何将现有的数据恢复成被修改前的旧数据。
  2. 单机MySQL的redolog. 中记录事物日志。
  3. 主从模式的MySQL通过bin-log日志同步数据。


2.1、设置master的binlog#


重置


reset master;


查看binlog


show binary logs


2.2、骚气的命令#


grant replication slave on *.* to mysqlsync@"127.0.0.1" identified by "mysqlsync123";


这条命令是在干什么呢?


捋一下思路:我们做主从同步,在主库这边我们其实会单独创建一个账号用于实现主从同步。下面的命令其实就会帮我们创建出 username=mysqlsync password=mysqlsync123的账户专门用户主从同步使用。


执行完上面的命令后,执行如下的命令查看上面的grant执行结果:


select user,host from mysql.user where user like '%mysqlsync%';



2.3、记录主库的master状态#


注意主库的查看主库当前是第几个binlog,以及数据的position。


因为一会从库就是根据这两个信息知道自己该从主库的第几个binlog的什么positon开始同步。



三、从库#


3.1、从库和主库保持同步#


从库执行change语句,和主库保持同步


CHANGE MASTER TO
    MASTER_HOST='10.157.23.158',
    MASTER_USER='mysqlsync',
    MASTER_PASSWORD='mysqlsync123',
    MASTER_PORT=8882,
    MASTER_LOG_FILE='mysql-bin.000008',
    MASTER_LOG_POS=1013;
 CHANGE MASTER TO
  MASTER_HOST = '${new_master_ip}',
  MASTER_USER = '${user}',
  MASTER_PASSWORD = '${password}',
  MASTER_PORT = ${new_master_port},
  master_auto_position = 1; 
CHANGE MASTER TO
  MASTER_HOST = '10.157.23.123',
  MASTER_USER = 'mysqlsync',
  MASTER_PASSWORD = 'mysqlsync123',
  MASTER_PORT = 8882,
  master_auto_position = 1;


3.2、开启主从同步#


start slave
show slave status \G



当我们可以看到 io线程和sql线程的状态都是yes时,说明此刻主从同步已经搭建完成了。


3.3、从库:如何断开主从#


stop slave io_thread;
stop slave sql_thread;


3.4、主库:如何断开主从#


把用于进行主从同步的账号删除就好了


drop user ${user}@${slave_ip}


四、中断处理#


中断处理部分说的是,一开始我们搭建主从很可能并不是一番风顺的,就比如上面的Slave_IO_Running和Slave_SQL_Running很可能处于NO的状态。下面介绍一下常见的解决方式。


4.1、Slave_IO_Running异常#


Slave_IO_Running:no/connecting

这说明从库连接不上主库,或者是一直处于正在连接的状态。


可能是主库没有对从库进行授权,如果已经授权了那么重启一下salve。


另一种原因就是master和slave的mysqld相关配置文件中,配置了相同server_id。


还有可能你在执行change master命令时,输入的主库相关的信息本来就是错误的。


4.2、Slave_Sql_Running异常#


Slave_Sql_Running:no

一般这种情况是bin-log中的sql出问题了。


第一种情况:可能我们配置了slave只能读,但是却有写请求打过来了,导致slave不能继续往下执行。


第二种解决思路:让slave跳过有问题的这个事件,但是还是得把事件的原因查明白,不然不推荐直接跳过这个事件。


stop slave;
set global sql_slave_skip_counter=1;
start slave;


第三种思路:我们提前配置好错误号机制,当slave在同步的过程中,碰到我们配置的错误号采取自动跳过的机会而不再去默认的终止同步数据。


# 一般我们可以像下面这样,在my.cnf中的[MySQLd]的启动参数中添加如下内容
--slave-skip-errors=1062,1053  
--slave-skip-errors=all  
--slave-skip-errors=ddl_exist_errors
# 通过如下语句查看当前MySQL配置的变量
MySQL> show variables like 'slave_skip%';  
# 通过如下命令可以查看到出现的errorno
show slave status; # 观察Last_Errno
# 常见的errorno
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1050:数据表已存在,创建数据表失败
1051:数据表不存在,删除数据表失败
1054:字段不存在,或程序文件跟数据库有冲突
1060:字段重复,导致无法插入
1061:重复键名
1068:定义了多个主键
1094:位置线程ID
1146:数据表缺失,请恢复数据库
1053:复制过程中主服务器宕机
1062:主键冲突 Duplicate entry '%s' for key %d


第四种思路:手动给slave调整fileName和position的位置(如何允许放弃之前的一部分数据,而从当前最新的数据开始同步)


# 停掉slave
slave stop
# 进入master
# 停止master的写操作
# 查看master中当前bin-log和position
show master status;
# 切换回slave从新根据最新的position和bin-log进行同步
# 进入master,开启master的写操作


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
11月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
SQL 存储 缓存
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
579 3
|
SQL 缓存 NoSQL
MySQL架构与SQL的执行流程_2
MySQL架构与SQL的执行流程_2
276 0
MySQL架构与SQL的执行流程_2
|
SQL 缓存 网络协议
MySQL架构与SQL的执行流程_1
MySQL架构与SQL的执行流程_1
259 0
MySQL架构与SQL的执行流程_1
|
8月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
541 158
|
8月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
8月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1428 152

推荐镜像

更多