Binlog日志(主服务器) => 中继日志(从服务器 运行一遍,保持一致)。从服务器是否要二进制日志取决于架构设计。如果二进制保存足够稳定,从性能上来说,从服务器不需要二进制日志。默认情况下,mysql主从复制是异步的。

异步:命令写操作是在内存中完成的。同步:在磁盘完成才认定写操作是完成的。

异步:主服务器执行10条命令,主服务器不等待从服务器,从服务器才复制3条命令道中继日志。这叫做从服务器的延迟delay。异步延迟是难免的。

Mysql是多用户的,多个用户进来并发 发起 写操作,同时进行的,写到写到二进制语句是一条一条的,从服务器一次执行一条,是单线程的。比主服务器慢是难免的。

整个复制架构:3个线程,主服务器dump线程,发送到从服务器上。从服务器上IO线程,接受主服务器上dump线程发送过来的数据,写入到中继日志中去。而后一旦中继日志有心内容,SQL线程一句一句执行内容。

以上,所以配置就是:主服务器启用bin log日志,从服务器启用relay log,建立身份标示server id,每台服务器需要唯一的server id。

负载均衡集群

高可用集群:冗余

高性能集群:完成复杂运算

AXFR:AXFR请求,是从DNS服务器请求在主DNS服务器上更新信息的一类域名系统的请求。AXFR请求经常导致全区域传输。如果区域文件很大的话,它需要花费很多的时间并消耗可观的带宽。

IXFR:增量区域传输,增量区域传输协议。

权限:

主服务器建立账户,从服务器使用账户。mysql有一些特殊的权限允许复制进程运行,运行在从服务器上的I/O线程创建了到master的连接,这就意味着必须在主服务器上创建一个用户并且需要授予特殊的权限。

这样I/O线程就会一特定的身份连接到主服务器上并且读取二进制日志。但是需要说明的一点是,复制用户在主服务器上实际只需要 replication  client 权限就可以运行的,这里授予replication  slave的原因是用于监视和管理复制账号需要这个权限,并且这两个功能(复制需要的权限,监视和管理复制账号权限)通常是一个账号在管理,而不是为了达 到这两个目标而分别设置2个账号。

replication slave

replication client

主服务器和从服务器双双互相认证,SSL认证。

基于逻辑,Mysql Dump从主服务器复制到从服务器。Mysql有一个选项master data,从什么地方读取二进制数据。主服务器放在逻辑卷上,从服务器基于备份也可以放逻辑卷上。

CHANGE MASTER TO master_def[,master_def] ...

可以更改从属服务器用于与主服务器进行连接和通讯的参数。

mysql>CHANGE MASTER TO
    ->    MASTER_HOST='master2.mycompany.com',
    ->    MASTER_USER='replication',
    ->    MASTER_PASSWORD='bigs3cret',
    ->    MASTER_PORT=,
    ->    MASTER_LOG_FILE='master2-bin.001',
    ->    MASTER_LOG_POS=,
->  MASTER_CONNECT_RETRY=;

show slave status,检查以下两项是否启动:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

如何让从服务器的mysql服务在启动时候不要自动启动从服务线程?
在从服务器上
[mysqld]
skip-slave-start=1

数据库复制过滤:
主服务器:
binlog_do_db
binlog_ignore_db

无论怎么过滤,都不在主服务器上做过滤。任何不涉及到的数据库相关的写操作都不会记录到二进制中。

从服务器:
replicate_do_db
replicate_ignore_db
replicate_do_table
replicate_ignore_db
基于通配符的匹配
replicate_wild_ignore_db = mysql.%
replicate_wild_do_db = magedu.%

浪费额外的网络带宽,复制过来的数据没用。

主服务器崩溃:事务已经提交-->写入二进制日志:
在主从架构上建议使用的配置:
主服务器:
sync_binlog=1
innodb_flush_logs_at_trx_commit=1

从服务器
skip_slave_start=1
read_only=1

使用mysql的sharding,多台服务器写操作。切分主要有两种方式:水平切分(Horizental Sharding)和垂直切分(Vertical Sharding)。水平切分所指的是通过一系列的切分规则将数据水平分布到不同的DB或table中,在通过相应的DB路由 或者table路由规则找到需要查询的具体的DB或者table以进行Query操作,比如根据用户ID将用户表切分到多台数据库上。垂直切分指的是按业务、产品切分,将不同类型的数据且分到不同的服务器上,通过数据库代理疏通程序与多个数据库的通讯、降低应用的复杂度。

读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作,这样既避免了主数据库服务器(Master)的过载,也有效地利用了从数据库服务器(Slave)的资源。

主主(互为主从)架构
1、双方都要建立有复制权限的用户;2、不同的server id;3、双方都要开启二进制日志和中继日志;4、在启动之前必须知道左服务器的二进制日志文件名和位置、右服务器的二进制日志文件名和位置。

主从分离(实现分层)

读写分离(代理),常用的由mysql官方提供的mysql proxy 和阿里巴巴开源的Amoeba。

已经听完第八讲。。。

马老师 生产环境mysql主从复制、架构优化方案的更多相关文章

  1. Kubernetes 在生产环境中常用架构

    Kubernetes 在生产环境中常用架构 首先,我们来梳理下Kubernetes生产架构,其设计适用于绝大多数环境.如下图所示 在该架构中,我们可以将其分为四层,如下: Client层:即Kuber ...

  2. (8) MySQL主从复制架构使用方法

    一. 单个数据库服务器的缺点 数据库服务器存在单点问题 数据库服务器资源无法满足增长的读写请求 高峰时数据库连接数经常超过上限 二. 如何解决单点问题 增加额外的数据库服务器,组建数据库集群 同一集群 ...

  3. 在线建立或重做mysql主从复制架构方法(传统模式和GTID模式)【转】

    mysql主从复制架构,是mysql数据库主要特色之一,绝大多数公司都有用到. 而GTID模式是基于事务的复制模式的意思,发展到现在也是越来越多人用. 以前很多文章,介绍搭建mysql主从复制架构,是 ...

  4. MySQL主从复制架构使用方法

    原文:MySQL主从复制架构使用方法 一. 单个数据库服务器的缺点 数据库服务器存在单点问题 数据库服务器资源无法满足增长的读写请求 高峰时数据库连接数经常超过上限 二. 如何解决单点问题 增加额外的 ...

  5. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

    本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

  6. 生产环境MySQL数据库集群MHA上线实施方案

    生产环境MySQL数据库集群MHA上线实施方案 一.不停库操作 1.在所有节点安装MHAnode所需的perl模块(需要有安装epel源) yum install perl-DBD-MySQL -y ...

  7. Linux企业生产环境用户权限集中管理项目方案案例

    企业生产环境用户权限集中管理项目方案案例: 1 问题现状 当前我们公司里服务器上百台,各个服务器上的管理人员很多(开发+运维+架构+DBA+产品+市场),在大家登录使用Linux服务器时,不同职能的员 ...

  8. 理解Docker(6):若干企业生产环境中的容器网络方案

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  9. MySQL 大表优化方案(长文)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

随机推荐

  1. Solution Explorer 和 Source Control Explorer 的 View History 异同

    如果查看别人对代码的修改,你可能会非常烦恼与在 Solution Explorer 中看历史版本看不全,如下: 实际上,你想看到的是对于整个解决方案,全部的历史版本,那应该跑去 Source Cont ...

  2. mysql的TABLE_SCHEMA的sql和information_schema表, MySQL管理一些基础SQL语句, Changes in MySQL 5.7.2

    3.查看库表的最后mysql修改时间, 如果第一次新建的表可能还没有update_time,所以这里用了ifnull,当update_time为null时用create_time替代 select T ...

  3. Redis中对Key进行分类

    使用":"体现层次 >set key1:key2:key4 value1 "OK" >set key1:key2:key5 value2 " ...

  4. LZO 使用和介绍

    LZO说明 摘要 LZO 是一个用 ANSI C 语言编写的无损压缩库.他能够提供非常快速的压缩和解压功能.解压并不需要内存的支持.即使使用非常大的压缩比例进行缓慢压缩出的数据,依然能够非常快速的解压 ...

  5. 详解Spring Boot集成MyBatis的开发流程

    MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...

  6. MongoDB Sort op eration used more than the maximum 33554432 bytes of RAM. Add an index, or speci fy a smaller limit.

    最近在获取mongodb某个集合的数据过程中,在进行排序的过程中报错,具体报错信息如下: Error: error: { , "errmsg" : "Executor e ...

  7. Android -- SDcard文件读取和保存

    背景                                                                                            一些东西可以 ...

  8. 如何利用SQL语句求日期的时间差值,并汇总网上的一些信息

    MySQL本身提供了 DATEDIFF 函数,用来计算时间差. 手册:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.ht ...

  9. 读取Mat文件中的汉字代码

    拿到一种元数据,格式为*.mat,但Access打不开,百度也没看到比较好的解决方案. 但是用文本文档可以打开,那估计它和txt类似了,于是想自己写代码来处理了,立马写了读取的丑陋工具.读取是没什么问 ...

  10. 栅格计算器函数之Con

    Con函数是condition(条件)的缩写,其作用 语法是: Con(条件,条件为真执行语句,条件为假执行语句[可选]) 或Con(输入栅格,条件为真执行语句,条件为假执行语句[可选],逻辑表达式) ...