mysql主从架构相关文章与信息, 故障处理, 主主, 读写分离, 高可用

使用 Xtrabackup 在线对MySQL做主从复制

  • http://seanlook.com/2015/12/14/mysql-replicas/
文章信息整理与其他信息补充:

假如你的读操作压力特别大,甚至要做一主多从,还可以不同的slave扮演不同的角色,例如使用不同的索引,或者不同的存储引擎,或使用一个小内存server做slave只用于备份。(当然slave太多也会对master的负载和 络带宽造成压力,此时可以考虑级联复制,即 A->B->C );

一主一从,一旦做了主从切换,不通过其它HA手段干预的话,业务访问的还是原IP,而且原主库很容易就作废了。于是 主-主 复制就产生了,凭借各自不同的 server-id ,可以避免 “A的变化同步到B,B应用变化又同步到A” 这样循环复制的问题。但建议是,主主复制,其中一个主库强制设置为只读,主从切换后架构依然是可用的。

复制过程是slave主动向master拉取,而不是master去推的,所以理想情况下做搭建主从时不需要master做出任何改变甚至停服,slave失败也不影响主库。

复制类型
  • 基于语句的复制:STATEMENT,在主服务器上执行的SQL语句,在从服务器上执行同样的语句,有可能会由于SQL执行上下文环境不同而是数据不一致,例如调用NOW()函数。MySQL在5.7.7以前默认采用基于语句的复制,在 5.7.7 及以后版本默认改用 row-based。

  • 基于行的复制:ROW,把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从mysql5.0开始支持,能够严格保证数据完全一致,但此时用mysqlbinlog去分析日志就没啥意义。因为任何一条update语句,都会把涉及到的行数据全部set值,所以binlog文件会比较大。grand alter create rename等管理语句会强制使用statement-based方式。

  • 混合类型的复制: MIXED,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

  • 可以在slave机器上记录日志,即把master的操作记录再记上一份,可以在slave上灵活的修改binlog类型

复制类型还可以分为 异步复制和半同步复制
  • 通常没说明指的都是异步,即主库执行完Commit后,在主库写入Binlog日志后即可成功返回客户端,无需等等Binlog日志传送给从库,一旦主库宕机,有可能会丢失日志。

  • 而半同步复制,是等待其中一个从库也接收到Binlog事务并成功写入Relay Log之后,才返回Commit操作成功给客户端;如此半同步就保证了事务成功提交后至少有两份日志记录,一份在主库Binlog上,另一份在从库的Relay Log上,从而进一步保证数据完整性;半同步复制很大程度取决于主从 络RTT(往返时延),以插semisync_master/semisync_slave 形式存在。

  • 如何使用半同步复制
    https://www.cnblogs.com/zero-gg/p/9057092.html

注意
  • 从库一般作为只读库使用,所以为安全起见,设置只读 set global read_only=1;
    可以在从服务器的 my.cnf 里加入read-only参数来实现这一点,唯一需要注意的一点事read-only仅对没有super权限的用户有效。所以最好核对一下连接从服务器的用户,确保其没有super权限;

  • skip-slave-start
    主从创建完成后,默认情况下次启动从库,会自动启动复制进程,一般这也正是我们需要的,但在维护阶段时你可能不想从库启动后立即开始复制,–skip-slave-start选项可以帮到你;

  • log-slave-updates
    正常情况从库是不需要写回放日志产生的binlog,无形中增加服务器压力。但如果你想要实现级联复制即 A -> B -> C ,B同时是A的从库,也是C的主库,就需要开启 log-bin 和 log-slave-updates ;

  • Read_Master_Log_Pos:本机I/O线程读取主服务器二进制日志位置
    与在主库执行show master status;看到的值如果基本接近,说明从库IO线程已经赶上了主库的binlog;

  • Exec_Master_Log_Pos: SQL线程执行来自master的二进制日志最后一个事件位置;

  • mysql将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的(并行),slave上是串行操作;

Mysql主从不同步解决方法

  • http://www.rfyy.net/archives/2309.html
    应该是主MYSQL上建表时,主键有重复的值 错,造成从不能同步。

  • sql_slave_skip_counter可能省事,但极有可能跳过其他events,导致主从数据不一致。对于1032、1062错误尽量修补数据,让复制进程在从库应用变更。
    https://www.cnblogs.com/Uest/p/7941329.html

MYSQL主从同步故障一例及解决过程!

  • https://blog.csdn.net/weixin_33857230/article/details/93063899

我需要把格式改为 mixed格式
修改从库的 my.cfg
在[mysqld]下面加入下面这行
binlog_format=mixed

为什么不是修改主库的binlog格式呢p>

MySQL auto_increment_increment,auto_increment_offset 用法

https://blog.csdn.net/leshami/article/details/39779509

  • auto_increment_increment控制列中的值的增量值,也就是步长。

  • auto_increment_offset确定AUTO_INCREMENT列值的起点,也就是初始值。

  • 变量范围:可以在全局以及session级别设置这2个变量

  • mysql中database、instance、session:

    mysql中建立一个会话,不是和具体的数据库相连接,而是跟某个instance建立会话(每个会话可以使用不同的用户身份)。

    而一个实例可以操作多个数据库,故一个会话(在操作系统概念里,会话即是线程)可以操作一个实例上的多个数据库。
    https://blog.csdn.net/rwangnqian/article/details/80087381

MySQL双主(主主)架构方案

  • https://www.cnblogs.com/ygqygq2/p/6045279.html

  • cmake

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。

  • GTID模式介绍!
    https://blog.csdn.net/weixin_33804990/article/details/91697873

  • 配置内容需要加深研究。

  • 设计 MySQL 数据表的时候一般都有一列为自增 ID,这样设计原因是什么,有什么好处r> https://www.cnblogs.com/zhhtao/p/7687361.html

配置Mysql-proxy,实现读写分离

  • https://blog.51cto.com/zzclinux/1980487
  • mysql-proxy

mysql-proxy是mysql官方提供的mysql中间件服务。
它使用mysql协议,任何使用mysql-client的上游无需修改任何代码,即可迁移至mysql-proxy上,具备良好的扩展性,可以用来完成:
sql拦截与修改;

性能分析与监控;

读写分离;

请求路由;

  • 文章有很多配置细节;

什么是MYCAT

  • http://www.mycat.io
  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

MySQL分布式中间件MYCAT解析

  • https://my.oschina.net/ruoli/blog/1789370

学会数据库读写分离、分表分库——用Mycat,这一篇就够了!

  • https://www.cnblogs.com/joylee/p/7513038.html

MySQL + Atlas 部署读写分离

  • https://blog.csdn.net/AnPHPer/article/details/80566385
  • 不维护不更新了

mysql环形主从配置

  • http://ask.apelearn.com/question/11437

mysql架构由小变大的演变过程

  • http://ask.apelearn.com/question/8025

Step By Step 搭建 MySql MHA 集群

  • http://blog.51cto.com/xiaoshuaigege/2060768

  • 虚IP。何为虚IP那,就是一个未分配给真实主机的IP,也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的 任意一个都可以连接到这台主机,所有项目中数据库链接一项配置的都是这个虚IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。

蔡猛芝同学的mysql双主+双从+keepalived+lvs架构

  • http://ask.apelearn.com/question/17026 需要登陆

文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树内置函数锁相关33031 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年10月4日
下一篇 2019年10月4日

相关推荐