实时数据的MySql复制问题

实时数据的MySql复制问题,mysql,Mysql,我目前有一个mysql 5.1.45的主控(比如a和B,其中a是主控)复制设置。数据超过15GB。每当我看到重复密钥错误时,我总是将sql_slave_skip_计数器设置为1,然后重新启动slave。在过去的几个月里,这项工作已经完成,现在a和B之间存在很多差异,由于数据量巨大,我无法解决不一致的问题 这就给了我一个重新创建服务器B的选项,我就是这么做的。我从a取了一个垃圾并复制到B。a是生产,我不能承受停机时间。A的二进制日志文件位于bin.001115附近,其中转储后的二进制日志为bin.

我目前有一个mysql 5.1.45的主控(比如a和B,其中a是主控)复制设置。数据超过15GB。每当我看到重复密钥错误时,我总是将sql_slave_skip_计数器设置为1,然后重新启动slave。在过去的几个月里,这项工作已经完成,现在a和B之间存在很多差异,由于数据量巨大,我无法解决不一致的问题

这就给了我一个重新创建服务器B的选项,我就是这么做的。我从a取了一个垃圾并复制到B。a是生产,我不能承受停机时间。A的二进制日志文件位于bin.001115附近,其中转储后的二进制日志为bin.000012

在这一步之后,我对如何更改这两台服务器上的主日志位置感到困惑。我已经设置了A的主日志文件和位置(从B的显示主状态)和B的主日志文件和位置(从A的显示主状态)

有人能告诉我我是否遵循了正确的方法吗

即使在这之后,我仍然看到重复键错误?是否有任何方法,我可以遵循,以避免这种重复的关键错误。或者是否有任何机制使我可以执行原始数据复制


非常感谢您的回复。

关于日志位置和将服务器B与a同步的问题:不幸的是,在服务器处于活动状态时进行SQL转储最终不会为您提供一个干净的快照,因为某些表可能在添加到转储之后,转储完成之前就被写入了。您已经声明无法执行完全锁定或停止服务器以复制数据文件,因此可以尝试以下方法:

1) 停止B上的复制/日志记录

2) 在一个平面上获取日志位置

3) 进行SQL转储

4) 从转储还原B

5) 使用配置选项slave\u skip\u errors=all启动B(请参阅:)

6) 在2)中的位置开始B的复制

7) 让B赶上A

8) 阅读注意事项re:防止将来出现重复的密钥错误,如果适用,请更改设置

9) 重新启动B而不出现从属\u跳过\u错误

10) 启动B到A的日志记录

要帮助避免将来出现重复的密钥错误,请执行以下操作:

以您拥有的服务器数量为例(在本例中为2) 设置每个服务器的自动增量=[该数字] 设置每台服务器的自动增量偏移量,从1开始,每台服务器递增1

例如:

A的配置

auto_increment_increment=2
auto_increment_offset=1
B的配置

auto_increment_increment=2
auto_increment_offset=2
A将生成自动增量ID,如1,3,5,7,。。。 B将生成2,4,6,8


请记住,如果A和B都在插入可能重复且不是自动增量的密钥(即由代码生成的主键),则从属\u skip\u errors=all或自定义自动增量都不会帮助您保持数据一致.

对于日志位置和将服务器B与A同步:不幸的是,在服务器处于活动状态时进行SQL转储最终不会为您提供一个干净的快照,因为某些表可能在添加到转储后、转储完成之前被写入。您已经声明无法执行完全锁定或停止服务器以复制数据文件,因此可以尝试以下方法:

1) 停止B上的复制/日志记录

2) 在一个平面上获取日志位置

3) 进行SQL转储

4) 从转储还原B

5) 使用配置选项slave\u skip\u errors=all启动B(请参阅:)

6) 在2)中的位置开始B的复制

7) 让B赶上A

8) 阅读注意事项re:防止将来出现重复的密钥错误,如果适用,请更改设置

9) 重新启动B而不出现从属\u跳过\u错误

10) 启动B到A的日志记录

要帮助避免将来出现重复的密钥错误,请执行以下操作:

以您拥有的服务器数量为例(在本例中为2) 设置每个服务器的自动增量=[该数字] 设置每台服务器的自动增量偏移量,从1开始,每台服务器递增1

例如:

A的配置

auto_increment_increment=2
auto_increment_offset=1
B的配置

auto_increment_increment=2
auto_increment_offset=2
A将生成自动增量ID,如1,3,5,7,。。。 B将生成2,4,6,8


请记住,如果A和B都在插入可能重复且不是自动增量的密钥(即,由代码生成的主键),则从属\u skip\u errors=all和自定义自动增量都不会帮助您保持数据的一致性。

在这里附加我的过程

在(主服务器)上:

  • 停止奴隶
  • 复位主机;(我不需要重置,但这将有助于重新开始,就像新的一样,从而消除混乱)
  • 复位从机
  • 使用
    --主数据进行转储
  • 关于B:

  • 使用
    --跳过从机启动
    选项重新安装并重新启动mysqld
  • 创建复制用户名和密码
  • 从转储恢复
  • 复位主机;(不要重置从机。如果我们重置从机,来自B的数据将不会复制到A)
  • 启动从机(这将同步与A的差异)
  • 重新启动mysql而不使用
    --跳过从属启动
    选项
  • 关于:

  • 启动从机
    我同意
    auto\u increment\u increment
    选项。我的两台服务器都是这样设置的。

    在此附加我的过程

    在(主服务器)上:

  • 停止奴隶
  • 复位主机;(我不需要重置,但这将有助于重新开始,就像新的一样,从而消除混乱)
  • 复位从机
  • 使用
    --主数据进行转储
  • 关于B:

  • 使用
    --跳过从机启动
    选项重新安装并重新启动mysqld
  • 创建复制用户名和密码
  • 从转储恢复
  • 复位主机;(不要重置从机。如果我们重置从机,来自B的数据将不会复制到A)
  • 启动从机(这将同步与A的差异)
  • 重新启动mysql而不使用
    --跳过从属启动
    选项
  • 关于:

  • 启动从机 <