相关文件10bet官方网站 本手册下载 从本手册中摘录

MySQL 5.7参考手册/mysql 5.7常见问题MySQL 5.7常见问题解答:复制

A.14 MySQL 5.7 FAQ: Replication

在以下部分中,我们为最常见的问题提供了关于MySQL复制的问题的答案。

A.14.1。副本必须一直连接到源吗?
A.14.2。必须在源和副本上启用网络才能启用复制吗?
A.14.3。我如何知道副本与来源的迟到程度如何?换句话说,如何知道副本复制的最后一个语句的日期?
A.14.4。如何强制源来阻止更新,直到副本赶上?
A.14.5。在设置双向复制时,我应该注意哪些问题?
A.14.6。如何使用复制来提高系统的性能?
A.14.7。我该如何做准备在我自己的应用程序中的客户端代码来使用性能增强复制?
A.14.8。MySQL Replication的何时以及多么能力提高我系统的性能?
A.14.9。如何使用复制来提供冗余或高可用性?
A.14.10。如何判断复制源服务器是否使用基于语句的或基于行的二进制记录格式?
A.14.11。如何讲述副本使用基于行的复制?
A.14.12。如何防止授予和撤消对副本计算机复制的陈述?
A.14.13。在混合操作系统上是否对复制工作(例如,源在Linux上运行,而副本在OS X和Windows上运行)?
A.14.14。是否对混合硬件架构进行复制工作(例如,源在64位计算机上运行,​​而副本在32位机器上运行)?

A.14.1。

副本必须一直连接到源吗?

不,不是的。副本可以下降或停止断开数小时甚至几天,然后重新连接并追赶更新。例如,您可以通过拨号链路设置源/副本关系,其中链接仅均匀地均匀,并且短时间内。这意味着,在任何给定的时间,除非采取一些特殊措施,否则副本不保证与源同步。

为了确保能够对已断开连接的副本进行捕获,您一定不能从包含尚未复制到副本的信息的源中删除二进制日志文件。只有当副本能够从上次读取事件的位置继续读取二进制日志时,异步复制才能工作。

A.14.2。

必须在源和副本上启用网络才能启用复制吗?

是的,必须在源和副本上启用网络。如果未启用网络,则副本无法连接到源并传输二进制日志。验证这一点skip_networking.尚未在任一服务器的配置文件中启用系统变量。

A.14.3。

我如何知道副本与来源的迟到程度如何?换句话说,如何知道副本复制的最后一个语句的日期?

检查Seconds_Behind_Master输出中的列显示副本|.奴隶状态。看到第16.1.7.1节“检查复制状态”

当复制SQL线程执行从源读取的事件时,它会将其自行修改到事件时间戳。(这就是为什么时间戳复制。)在时间输出中的列显示PROCESSLIST,复制SQL线程显示的秒数是最后一个复制事件的时间戳到复制机的实时时间之间的秒数。您可以使用它来确定最后一个复制事件的日期。请注意,如果您的副本已从源断开一个小时,然后重新连接,您可能会立即看到大时间用于复制SQL线程的值(如3600)显示PROCESSLIST。这是因为副本正在执行一个小时前的语句。看到第16.2.3节“复制线程”

A.14.4。

如何强制源来阻止更新,直到副本赶上?

使用以下步骤:

  1. 在源上,执行这些语句:

    mysql>用读锁冲洗表;MySQL>显示主状态;

    从输出中记录复制坐标(当前二进制日志文件名和位置)表演陈述。

  2. 在副本上,发出以下陈述,其中的参数master_pos_wait()功能是在上一步中获得的复制坐标值:

    mysql>选择master_pos_wait('log_name.',log_pos.);

    选择语句阻塞,直到副本到达指定的日志文件和位置。此时,副本与源处于同步状态,语句返回。

  3. 在源中,发出以下语句以使源头开始处理更新:

    mysql >解锁表;

A.14.5。

在设置双向复制时,我应该注意哪些问题?

MySQL Replication目前不支持源和副本之间的任何锁定协议,以保证分布式(交叉服务器)更新的原子性。换句话说,客户端A可以使更新成为共同源1,并且在此期间,在传播到Co-Source 2之前,客户端B可以对具有更新的CO-Source 2进行更新客户端的工作与CO-Source 1不同1.因此,当客户端A的更新使其成为共源2时,它会产生与您在CO-Source 1中拥有的表不同的表,即使在所有更新之后来自共源2也传播。这意味着您不应该以双向复制关系将两个服务器一起连锁,除非您确定您的更新可以在任何顺序中安全地发生,或者除非您在客户端代码中以某种方式处理错误订购的更新。

您还应该认识到,就更新而言,双向复制实际上并没有极大地提高性能(如果有的话)。每个服务器必须执行相同数量的更新,就像单个服务器所做的那样。惟一的区别是锁争用较少,因为来自另一个服务器的更新在一个复制线程中序列化。甚至这一好处也可能被网络延迟所抵消。

A.14.6。

如何使用复制来提高系统的性能?

将一个服务器设置为源,并将所有写操作直接写入该服务器。然后,根据预算和机架空间配置尽可能多的副本,并将读取分发到源和副本中。还可以使用——skip-innodb选项,启用low_priority_updates.系统变量,并设置delay_key_write.系统变量到全部在副本结束时获取速度改进。在这种情况下,副本使用非横向MyISAM表而不是桌子InnoDB通过消除事务开销来获得更多速度的表。

A.14.7。

我该如何做准备在我自己的应用程序中的客户端代码来使用性能增强复制?

请参阅使用复制作为扩展解决方案的指南,第16.3.4节“使用缩放的复制”

A.14.8。

MySQL Replication的何时以及多么能力提高我系统的性能?

MySQL Replication对处理频繁读取和不常写的系统最有利。从理论上讲,通过使用单源/多副本设置,可以通过添加更多副本来扩展系统,直到您的网络带宽耗尽,或者您的更新负载增长源无法处理它的点。

确定多少副本可以使用增加的好处开始之前水平,多少你可以提高你的网站的性能,你必须知道你的查询模式,确定基准测试吞吐量之间的关系经验的读和写在一个典型的源和一个典型的复制品。这里的示例显示了一个相当简化的计算,即通过复制一个假设系统可以得到什么。让写道分别表示每秒读取和写入的数量。

假设系统负载由10%的写和90%的读组成,我们已经通过基准测试确定了这一点1200 - 2写道。换句话说,在没有写操作的情况下,系统每秒可以执行1200次读操作,平均写操作的速度是平均读操作的两倍,而且这种关系是线性的。假设源和每个副本都有相同的容量,我们有一个源和N复制品。然后我们为每个服务器(源或副本)提供:

= 1200 - 2 *写道

= 9 *写道/ (N+ 1)(读取是拆分的,但写入所有副本的写入)

9 *写道/ (N+ 1) + 2 *写道= 1200

写道= 1200 /(2 + 9 /(N+ 1))

最后一个等式表示最大的写入次数NReporicas,给定最大可能的读取速率为每秒1,200,每次写入的九个读数比率。

分析得出以下结论:

  • 如果N= 0(这意味着我们没有复制),我们的系统可以处理大约1200/11 = 109次写入每秒。

  • 如果N= 1,我们每秒最多184个写入。

  • 如果N= 8时,我们达到每秒400次写入。

  • 如果N= 17,我们每秒最多可达480次写入。

  • 最终,N接近无限远(和我们的预算负极无限),我们每秒可以获得非常接近600编写,增加系统吞吐量约为5.5次。但是,只有八个服务器,我们将近四次增加。

这些计算假设无限的网络带宽,忽略了系统上可能很重要的其他因素。在许多情况下,您可能无法执行类似于刚刚显示的计算,该计算可以准确地预测系统在系统上发生的情况(如果添加)N复制品。但是,回答以下问题应该帮助您决定是否以及复制的复制可以提高系统性能:

  • 系统上的读/写比率是多少?

  • 如果减少读取,则为一个服务器句柄多得多?

  • 您的网络上有多少副本?

A.14.9。

如何使用复制来提供冗余或高可用性?

如何实现冗余完全取决于应用程序和环境。高可用性解决方案(具有自动故障转移)需要主动监控和自定义脚本或第三方工具来提供从原始MySQL服务器到副本的故障转移支持。

要手动处理这个过程,您应该能够将应用程序更改为与新服务器通信,或者将MySQL服务器的DNS从故障服务器调整到新服务器,从而从一个失败的源切换到预先配置的副本。

有关更多信息和一些示例解决方案,请参阅第16.3.7节“故障转移期间的切换来源”

A.14.10。

如何判断复制源服务器是否使用基于语句的或基于行的二进制记录格式?

检查的值binlog_format.系统变量:

mysql> SHOW VARIABLES LIKE 'binlog_format';

所示的值始终是其中一个声明,,或混合。为了混合模式,默认情况下使用语句的日志记录,但是在某些条件下自动以基于行的日志记录,例如不安全陈述。有关可能发生此操作的信息,请参阅第5.4.4.3节“混合二进制日志记录格式”

A.14.11。

如何讲述副本使用基于行的复制?

副本会自动知道要使用的格式。

A.14.12。

如何预防授予撤销从复制到副本机器的陈述?

使用——replicate-wild-ignore-table = mysql. %忽略表中的复制的选项mysql数据库。

A.14.13。

在混合操作系统上是否对复制工作(例如,源在Linux上运行,而副本在OS X和Windows上运行)?

是的。

A.14.14。

是否对混合硬件架构进行复制工作(例如,源在64位计算机上运行,​​而副本在32位机器上运行)?

是的。