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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: 基于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的写操作


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
存储 监控 数据库
Django 后端架构开发:高效日志规范与实践
Django 后端架构开发:高效日志规范与实践
80 1
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
137 3
Mysql高可用架构方案
|
2月前
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
133 1
|
3月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
1天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1月前
|
SQL 存储 缓存
【赵渝强老师】MySQL的体系架构
本文介绍了MySQL的体系架构,包括Server层的7个主要组件(Connectors、Connection Pool、Management Service & Utilities、SQL Interface、Parser、Optimizer、Query Caches & Buffers)及其作用,以及存储引擎层的支持情况,重点介绍了InnoDB存储引擎。文中还提供了相关图片和视频讲解。
【赵渝强老师】MySQL的体系架构
|
14天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
3月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
175 9
|
4月前
|
SQL 关系型数据库 MySQL
(二十五)MySQL主从实践篇:超详细版读写分离、双主热备架构搭建教学
在上篇《主从原理篇》中,基本上把主从复制原理、主从架构模式、数据同步方式、复制技术优化.....等各类细枝末节讲清楚了,本章则准备真正对聊到的几种主从模式落地实践,但实践的内容通常比较枯燥乏味,因为就是调整各种配置、设置各种参数等步骤。
637 3
|
5月前
|
SQL 存储 关系型数据库
(一)全解MySQL之架构篇:自顶向下深入剖析MySQL整体架构!
无论你是前端还是后端,只要是一个合格的开发者,对于MySQL这个名词相信都不陌生,MySQL逐渐成为了最受欢迎的关系型数据库,无论你是大前端,亦或是Java、Go、Python、C/C++、PHP....等这些语言的程序员,对于MySQL是必然要掌握的核心技术之一,程序员不能没有MySQL,就像西方不能失去耶路撒冷一般。
895 0