在不停主库的情况下向已有的主从环境添加新的从库。通过复制现有的从库来安装一个新的从库,但是要把新从库的server-id设置一个不同于原来从库的值。

  按如下步骤复制现有从库:

  1.停止现有从库:

    shell> mysqladmin shutdown

  2.将数据目录从现有从站复制到新从站。 可以通过使用tar或WinZip创建归档,或使用cp或rsync等工具执行直接复制。 确保也复制了日志文件和中继日志文件。

   这里经常遇到的一个问题,警告和错误信息如下:

071118 16:44:10 [Warning] Neither --relay-log nor --relay-log-index were used; so
replication may break when this MySQL server acts as a slave and has his hostname
changed!! Please use '--relay-log=new_slave_hostname-relay-bin' to avoid this problem.
071118 16:44:10 [ERROR] Failed to open the relay log './old_slave_hostname-relay-bin.003525'(relay_log_pos 22940879)
071118 16:44:10 [ERROR] Could not find target log during relay log initialization
071118 16:44:10 [ERROR] Failed to initialize the master info structure

  发生这种问题最可能的原因是启动mysql时没有指明--relay-log参数,在没有指定这个参数的情况下relay log会默认以主机名为前缀生成日志文件。如果不指定--relay-log-index,relay log index文件也是如此。

  要避免这个问题,把新从库的--relay-log的值设置为与原来的从库一致。如果原来的从库没有设置这个参数,那么把新从库的--relay-log参数设置为existing_slave_hostname-relay-bin。如果不能这样设置,把原来从库的relay log索引文件复制到新从库,并设置新从库的--relay-log-index与原来从库的这个参数一致。如果原来从库没有设置--relay-log-index,把新从库的--relay-log-index设置为existing_slave_hostname-relay-bin.index。如果已经执行了后边步骤,在启动新从库的时候遇到这个问题,请执行以下步骤:

  a.在新从库和原从库上执行stop slave

  b.复制原来的从库的relay log索引文件到新从库,确保覆盖新从库的relay log索引文件。

  c.执行后边的步骤。

  3.复制原来从库的master info和relay log info文件到新从库。(这两个也可能存在表里边,跟如何配置的有关)这两个文件保存了当前的主库binlog的坐标和从库relay log的坐标。

  4.start原来的从库

  5.编辑新从库的配置文件,给新从库配置一个不同于现在主从结构中服务器的server-id

  6.start新从库。