17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment 引入额外的Slaves 到一个存在的复制环境: 如果添加另外的slave 到一个存在的复制配置,你可以这样做 不需要停止master. 代替的是,设置新的slave 通过 拷贝一份存在的slave,除了配置新的slave 使用不同的server-id值 复制现有的存在slave: 1.关闭存在的slave: shell> mysqladmin shutdown 2.将数据目录从存在的slave 复制到新的slave,你可以通过创建tar或者WinZip文件, 或者通过执行一个cp或者rsync,确保也包括log files和relay log files. 一个通用的问题是遇到 当增加新的复制slaves 是新的slaves 失败 一系列的警告和错误信息如下: 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 这是由于事实,如果--relay-log 选项没有被指定,relay log 文件包含了主机名作为文件名的部分 (这个对于relay log index 文件也是一样 如果 --relay-log-index 选项没有被指定 为了避免这个问题,使用 相同的值对于--relay-log 在新的slave,和用于存在的slave (如果选项没有被指定在存在的slave上,使用existing_slave_hostname-relay-bin.) 如果这个是不行的,复制存在的slave的relay log index file 到新的slave 设置 --relay-log-index 在新的slave 来匹配 在存在的slave上。(如果这个选项没有被指定在存在的slave上,使用existing_slave_hostname-relay-bin.index) 作为一种选择--如果你已经尝试启动新的slave(遵循下面存在的步骤) a.如果你没有这么做,执行stop slave 在新的slave上 如果 你已经启动存在的slave,执行一个stop slave 在存在的slave上 b. 复制存在的slave的relay log 文件的内容到新的slave的relay log index file,确保覆盖任何存在的文件的内容. c.继续在本节中其余步骤: 复制master info 和relay log info 信息库从存在的slave到新的slave. 那些保留当前的log的位置对于master的binary log和slave的relay log 4.启动存在的slave 5.在新的slave上, 编辑配置和给定新的slave 一个唯一的server-id 不被master和其他任何的slave使用 开始新的slave,slave使用信息在它的master info 信息库来开始复制