• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL简单主从方案暴露问题

MySQL简单主从方案暴露问题

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了MySQL,MySQL方法,主从方案等相关知识,希望本文的分享对您有所帮助

1、概述

从本篇文章开始我们将向读者介绍mysql的各种服务集群的搭建方式。大致的讨论思路是从最简的MySQL主从方案开始介绍,通过这种方案的不足延伸出更复杂的集群方案,并介绍后者是如何针对这些不足进行改进的。

2、MySQL最简单主从方案及工作原理

我们讲解的版本还是依据目前在生产环境上使用最多的version 5.6进行,其中一些特性在Version 5.7和最新的Version 8.0中有所改进,但这不影响读者通过文章去理解构建MySQL集群的技术思路,甚至可以将这种机制延续到MariaDB。例如马上要提到的MySQL自带的日志复制机制(Replicaion机制)。

MySQL自带的日志复制机制称为MySQL-Replicaion。从MySQL很早的 Version 5.1版本就有Replicaion技术,发展到现有版本该技术已经非常成熟,通过它的支持技术人员可以做出多种MySQL集群结构。当然,后文我们还会介绍一些由第三方软件/组件支持的MySQL集群方案。

2-1、MySQL-Replicaion基本工作原理

Replicaion机制从技术层面讲,存在两种基本角色:Master和Salve。Master节点负责在Replicaion机制中,向一个或者多个目标输出数据,而Salve节点负责在Replicaion机制中接受Master节点传来的数据。在实际业务环境下,Master节点和Salve节点还分别有另外一个名字:Write节点和Read节点——是的,利用Replicaion机制我们可以搭建以读写分离为目标的MySQL集群服务。但是为了保证读者在阅读文章内容时不会产生歧义,在本文(和后续文章)中我们都将使用Master节点和Salve节点这样的称呼。Replicaion机制依靠MySQL服务的二进制日志同步数据:

14785751481.png

如上图所示,Salve在启动后会建立一个和Master节点的网络连接,当Master节点的二进制日志发生变化后,一个或者多个MySQL Salve服务节点就会通过网络接监听到这些变化日志。接着Salve节点会首先在本地将这些变化写入中继日志文件(Relay Log),这样做是为了尽量避免MySQL服务在出现异常时同步数据失败,其原理和之前介绍过的InnoDB Log的工作原理相似。当中继日志文件发生完成记录后,MySQL Salve服务会将这些变化反映到对应的数据表中,完成一次数据同步过程。最后Salve会更新重做日志文件中的更新点(Position),并准备下一次Replicaion操作。

在这个过程中多个要素都可以进行配置,例如可以通过sync_binlog参数配置Master节点上数据操作次数和日志写入次数配比关系、可以通过binlog_format参数配置日志数据的信息结构、可以通过sync_relay_log参数配置Salve节点上系统接收日志数据与写入中继日志文件次数的配比关系。这些参数和其它一些在示例中使用的参数会在本文后续小节进行介绍。

2-2、MySQL一主多从搭建方式

介绍完MySQL Replicaion机制的基本工作方式后,我们紧接着就来快速搭建由一个Master节点和一个Salve节点构成的MySQL集群。读者可以从这个一主一从的MySQL集群方案扩展出任何一主多从的集群方案:

14785751482.png

这个实例我们使用Version 5.6版本进行设置,当然version 5.7版本的安装也是类似的。另外,在linux 操作系统上(Centos 5.6/5.7/6.X)安装MySQL服务和进行基本设置的过程,由于篇幅和文章定位原因这里就不再进行赘述。我们将分别在如下ip的Linux操作安装集群的Master节点和Salve节点:

MySQL Master服务:192.168.61.140

MySQL Salve服务:192.168.61.141

2-2-1、设置Master服务器

首先需要更改MySQL Master服务my.cnf主配置文件的信息,主要目的是开启Master节点上的二进制日志功能(注意这里说的日志并不是InnoDB引擎日志)。

# my.cnf文件中没有涉及Replicaion机制的配置信息,
就不在这里列出了
......
# 开启日志
log_bin

# 以下这些参数会在后文进行说明

sync_binlog=1

binlog_format=mixed

binlog-do-db=qiang

binlog_checksum=CRC32

binlog_cache_size=2M

max_binlog_cache_size=1G

max_binlog_size=100M

# 必须为这个MySQL服务节点设置一个集群中唯一的 server id信息

server_id=140

......

在Master节点的设置中,有很多参数可以对日志的生成、存储、传输过程进行控制。具体可以参见MySQL官网中的介绍:http://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html。这里我们主要对以上配置示例中出现的参数进行概要介绍:

sync_binlog:该参数可以设置为1到N的任何值。该参数表示MySQL服务在成功完成多少次不可分割的数据操作后(例如InnoDB引擎下的事务操作),才进行一次二进制日志文件的写入操作。设置成1时,写入日志文件的次数是最频繁的,也会造成一定的I/O性能消耗,但同时这样的设置值也是最安全的。

binlog_format:该参数可以有三种设置值:row、statement和mixed。row代表二进制日志中记录数据表每一行经过写操作后被修改的最终值。各个参与同步的Salve节点,也会参照这个最终值,将自己数据表上的数据进行修改;statement形式是在日志中记录数据操作过程,而非最终的执行结果。各个参与同步的Salve节点会解析这个过程,并形成最终记录;mixed设置值,是以上两种记录方式的混合体,MySQL服务会自动选择当前运行状态下最适合的日志记录方式。

binlog-do-db:该参数用于设置MySQL Master节点上需要进行Replicaion操作的数据库名称。

binlog_checksum:该参数用于设置Master节点和Salve节点在进行日志文件数据同步时,所使用的日志数据校验方式。这个参数是在version 5.6版本开始才支持的新配置功能,默认值就是CRC32。如果MySQL集群中有MySQL 节点使用的是version 5.5或更早的版本,请设置该参数的值为none。

binlog_cache_size:该参数设置Master节点上为每个客户端连接会话(session)所使用的,在事务过程中临时存储日志数据的缓存大小。如果没有使用支持事务的引擎,可以忽略这个值的设置。但是一般来说我们都会使用InnoDB引擎,所以该值最好设置成1M——2M,如果经常会执行较复杂的事务,则可以适当加大为3M——4M。

max_binlog_cache_size:该值表示整个MySQL服务中,能够使用的binlog_cache区域的最大值。该值不以session为单位,而是对全局进行设置。

max_binlog_size : 该参数设置单个binlog文件的最大大小。MySQL服务为了避免binlog日志出错或者Salve同步失败,会在两种情况下创建新的binlog文件:一种情况是MySQL服务重启后,另一种情况是binlog文件的大小达到一个设定的阀值(默认为1GB)。max_binlog_size参数就是设置这个阀值的。

完成my.cnf文件的更改后,重启Linux MySql服务新的配置就生效了。接下来需要在Master节点中设置可供连接的Salve节点信息,包括进行Replicaion同步的用户和密码信息:

# 只用MySQL客户端,都可以进行设置:
# 这里我们直接使用root账号进行同步,
但是生产环境下不建议这样使用
> grant replication slave on *.* to root@192.168.61.141 identified by '123456'

# 通过以下命令,可以查看设置完成后的Master节点工作状态

> show master status;

+----------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+----------------+----------+--------------+------------------+-------------------+

| kp2-bin.000002 | 404 | qiang | | |

+----------------+----------+--------------+------------------+-------------------+

以上master节点状态的描述中,File属性说明了当前二进制日志文件的名称,它的默认位置在Linux操作系统下的var/lib/mysql目录下。Position属性说明了当前已完成日志同步的数据点在日志文件中的位置。Binlog_Do_DB属性是我们之前设置的,需要进行Replicaion操作的数据库名称,Binlog_Ignore_DB属性就是明确忽略的,不需要进行Replicaion操作的数据库名称。

2-2-2、设置Salve服务器

完成MySQL Master服务的配置后,我们来看看Salve节点该如何进行设置。这里我们只演示一个Salve节点的设置,如果您还要在集群中增加新的Salve节点,那么配置过程都是类似的。无非是要注意在Master节点上增加新的Salve节点描述信息。

首先我们还是需要设置Salve节点的my.cnf文件:

# my.cnf文件中没有涉及Replicaion机制的配置信息,就不在这里列出了
......
# 开启日志
log-bin

sync_relay_log=1

# 必须为这个MySQL服务节点设置一个集群中唯一的server id信息

server_id=140

......

在MySQL官方文档中也详细描述了中继日志的各种控制参数,这里我们只使用了sync_relay_log参数。这个参数说明了Salve节点在成功接受到多少次Master同步日志信息后,才刷入中继日志文件。这个参数可以设置为1到N的任意一个值,当然设置为1的情况下虽然会消耗一些性能,但对于日志数据来说却是最安全的。

Salve的设置相对简单,接下来我们需要在Salve端开启相应的同步功能。主要是指定用于同步的Master服务地址、用户和密码信息:

# 请注意这里
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05Oracle 查看表空间的大小及使用情况sql语句
  • 2018-12-05SQL Transcation的一些总结分享
  • 2018-12-05Mysql使用命令实现分级查找帮助的方法
  • 2018-12-05MySQL服务器连接过程分析
  • 2018-12-05MySQL SQL 语法参考
  • 2018-12-05sqlserver 存储过程分页(按多条件排序)
  • 2018-12-05mysql中“Access denied for user 'root'@'localhost'是什么意思
  • 2018-12-05Oracle 数据库 临时数据的处理方法
  • 2017-05-11MySQL 大数据量快速插入方法和语句优化分享
  • 2018-12-05关于mysql_free_result的10篇文章推荐

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySql命令行创建和删除触发器
    • mysql 编码设置命令
    • MySQL存储过程-创建智能存储过程和检查存储过程
    • mysql应用中常用到的优化
    • SQL Server Bulk Insert 只需要部分字段时的方法
    • MySQL视图的应用之修改视图
    • mysql5.6.33修改数据文件的实例教程
    • SQLServer 2008中的代码安全(五) 非对称密钥加密
    • 【MySQL】char和varchar的不同
    • SQL数据操作基础(中级)10

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有