• ADADADADAD

    3:添加一个slave到已有的复制环境(基于二进制日志文件位置)[ mysql数据库 ]

    mysql数据库 时间:2024-12-24 19:13:32

    作者:文/会员上传

    简介:

    服务器 192.168.1.2 (master) ,服务器 192.168.1.3 (old slave)服务器 192.168.1.4 (new slave) 您可以将另一个slave添加到现有复制配置,而无需停止master。为此,您可以通过

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

      服务器 192.168.1.2 (master) ,服务器 192.168.1.3 (old slave)服务器 192.168.1.4 (new slave) 您可以将另一个slave添加到现有复制配置,而无需停止master。为此,您可以通过复制现有slave的数据目录并为新slave提供不同的server ID (由用户指定)和服务器UUID(在启动时生成)来设置新slave。在old slave#停止复制mysql> stop slave;Query OK, 0 rows affected (0.00 sec)#查看主二进制日志文件和中继日志文件位置mysql> show slave status\G#关闭old slave的mysql服务[root@iZ2zee8t2icu340bpmaw23Z ~]# service mysqld stopRedirecting to /bin/systemctl stop mysqld.service[root@iZ2zee8t2icu340bpmaw23Z ~]# ps -ef |grep mysqlroot 14618 144740 21:33 pts/000:00:00 grep --color=auto mysql#将old slave的数据目录打包[root@iZ2zee8t2icu340bpmaw23Z ~]# cat /etc/my.cnf | grep datadirdatadir=/var/lib/mysql[root@iZ2zee8t2icu340bpmaw23Z ~]# cd /var/lib/mysql[root@iZ2zee8t2icu340bpmaw23Z mysql]# tar -zcvf /tmp/file.tar.gz *#启动mysql[root@iZ2zee8t2icu340bpmaw23Z mysql]# service mysqld start#开始复制mysql> start slave;Query OK, 0 rows affected, 1 warning (0.00 sec)在new slave上#先关闭mysql[root@iZ2ze7skefrz53o5o1at5hZ ~]# service mysqld stopRedirecting to /bin/systemctl stop mysqld.service#复制old slave的数据目录,进入本机的mysql数据目录[root@iZ2ze7skefrz53o5o1at5hZ ~]# cat /etc/my.cnf | grep datadirdatadir=/var/lib/mysql[root@iZ2ze7skefrz53o5o1at5hZ ~]# cd /var/lib/mysql#利用scp把数据给拿过来[root@iZ2ze7skefrz53o5o1at5hZ mysql]# scp root@192.168.1.3:/tmp/file.tar.gz /tmp#这时候我们需要先把本机的数据给备份一下[root@iZ2ze7skefrz53o5o1at5hZ mysql]#tar -zcvf /tmp/mysql_back.tar.gz *#然后将old slave的数据给压缩[root@iZ2ze7skefrz53o5o1at5hZ mysql]# tar -zxvf /tmp/file.tar.gz#从当前机器上的数据目录副本中删除auto.cnf文件,以便使用不同的生成server UUID启动新slave服务器。 server UUID必须是唯一的。[root@iZ2ze7skefrz53o5o1at5hZ mysql]# rm auto.cnfrm: remove regular file ‘auto.cnf’? y#为服务器配置server_id和--skip-slave-start选项,指定了--skip-slave-start的话,那么mysql启动的时候复制就不会启动#启动mysql服务器并登陆,查看有关信息(这里要注意,因为你直接复制的old slave的数据目录,所以登录mysql的时候要输入old slave对应的用户密码,最后需要修改过来)mysql> show slave status\G#如果跟step4可以对应的上,那就没有啥问题,然后启动复制mysql> start slave;ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository#1872 错误 这个时候我们查看一下错误日志[root@iZ2ze7skefrz53o5o1at5hZ ~]# tail -f /var/log/mysqld.log意思是从./iZ2ze7skefrz53o5o1at5hZ-relay-bin.index找不到./iZ2zee8t2icu340bpmaw23Z-relay-bin.000004 relay log 文件,原因是由于我使用的是冷备份文件恢复的实例,在mysql库中的slave_relay_log_info表中依然保留之前relay_log的信息,所以导致启动slave报错。解决方法如下mysql> reset slave;Query OK, 0 rows affected (0.02 sec)mysql> start slave;Query OK, 0 rows affected (0.02 sec)mysql> show slave status\G
      *那么就说明成功了添加一下测试数据,看下数据是否同步

    注意事项:

    在新的slave上,一定要查看错误日志以及对比新slave和现有slave的show slave status内容,查看Master_Log_File和Read_Master_Log_Pos是否有差异因为你直接复制的old slave的数据目录,所以登录new salve的mysql的时候要输入old slave对应的用户密码,最后需要修改过来

    reset slave讲解:

    参考链接:https://dev.mysql.com/doc/refman/5.7/en/reset-slave.htmlRESET SLAVE makes the slave forget its replication position in the master's binary log. This statement is meant to be used for a clean start: It clears the master info and relay log info repositories, deletes all the relay log files, and starts a new relay log file. It also resets to 0 the replication delay specified with the MASTER_DELAY option to CHANGE MASTER TO. RESET SLAVE does not change the values of gtid_executed or gtid_purged.RESET SLAVE会让slave忘记master的二进制文件的复制位置。主要用于干净的启动一个复制,它会清除主信息和中继日志信息库(就是清除mysql.slave_master_info和slave_relay_log_info这两个表),删除所有的中继日志文件,并且启动一个新的中继日志文件。会将CHANGE MASTER TO的 MASTER_DELAY选项指定的值重置为0,RESET SLAVE 不会更改gtid_executed或gtid_purged的值。

    参考链接:https://dev.mysql.com/doc/refman/5.7/en/binlog-replication-configuration-overview.html

    PREV:2:基于二进制日志文件位置的复制https://blog.51cto.com/itzhoujun/2351367
    NEXT:4:GTID简单介绍https://blog.51cto.com/itzhoujun/2352688