重启后,Mysql slave会被破坏

时间:2015-04-28 08:43:13

标签: mysql database-replication master-slave gtid

请帮忙!

我基于GTID机制设置了主从复制。 复制工作正常,直到从服务器上发生mysqld重启。一团糟开始......

重启后,我无法恢复复制。 发出“START SLAVE”命令时,我收到以下错误消息:

  

第1行的错误1794(HY000):未配置或未配置从站   正确初始化。您必须至少设置--server-id才能启用   无论是主人还是奴隶。可以在中找到其他错误消息   MySQL错误日志。

毋庸置疑,我在my.cnf中设置了server-id(见下文)。

在/var/log/mysqld.log文件中,我发现了以下错误消息:

  

[ERROR]创建主信息时出错:多个复制元数据   找到包含数据的存储库实例。无法决定哪个   是正确的选择。

     

[ERROR]无法创建或恢复复制信息存储库。

我无法理解我做错了什么。

主站和从站之间的通信是通过stnnel进行的,但我不认为这是一个相关的事实,因为直到重新启动一切正常。

我发现重新建立复制的唯一方法(在mysql重启之后)是手动删除mysql数据文件,然后再次加载从主服务器导入的转储文件。 (我使用mysqldump)。这当然是不合理的。

以下是my.cnf文件:

在奴隶上:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
server-id=2
log-bin=mysql-bin
binlog_format=ROW
relay_log=relay-log
skip-slave-start
enforce-gtid-consistency
gtid-mode=ON
log-slave-updates
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

关于主人:

[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW
gtid-mode=on
enforce-gtid-consistency
log-slave-updates
innodb_buffer_pool_size = 1G
query_cache_size = 32M

奴隶机:Centos 6.6,mysql 5.6.24。

主机:RHEL 6.6,mysql 5.6.10。

非常感谢任何帮助!

由于

Nadav Blum

3 个答案:

答案 0 :(得分:1)

在主人 -

mysql> reset master;

[此命令将清除master的二进制日志并以new开头。如果你愿意,可以保存。]

启动从属mysqld时,运行以下命令

mysql> stop salve;
mysql> reset slave;
mysql> change master to master_host='192.168.10.116', master_user='root', master_password='root', master_auto_position=1;
mysql> start slave;
mysql> show slave status \G

现在如果一切顺利的话,你可以重启奴隶(如果它提交了所有的事务,那么没有问题,它将开始在你的主二进制日志中执行transection。你可以检查你的中继日志文件)

答案 1 :(得分:1)

嗯,神秘解决了。

还记得我写过这个问题与我对stunnel的使用无关,作为主从通信隧道通信的意思吗? 好吧,我错了。

问题是,我使用localhost端口3307作为与主站的从站通信的终点。 (stunnel监听此端口并将数据转发到主服务器ip)。所以"改变主人"通过以下方式完成:

change master to master_host="localhost", master_port=3307, master_user="XXX", master_password="XXX", MASTER_AUTO_POSITION = 1;'

那个" localhost"事情造成了混乱。我将其更改为" 127.0.0.1",现在重新启动不会造成任何伤害!

感谢Hitech和Jaydee的帮助!

答案 2 :(得分:0)

昨天遇到了同样的问题。

Oracle支持doc有所帮助。

适用于不支持Oracle的人。

原因

The cause is that both TABLE and FILE replication repository metadata exist at the same time,  but only one form should.

解决方案

Before setting up replication,  remove the files specified by the my.cnf variables relay_log_info_file and master_info_file .

默认情况下,它们的名称映射到relay-log.info和master.info,它们位于datadir中。 (我必须删除master.info文件)

并通过执行以下操作删除所有剩余配置:

STOP SLAVE;
SET SQL_LOG_BIN=0;
DELETE FROM mysql.slave_master_info ;
DELETE FROM mysql.slave_relay_log_info ;
SET SQL_LOG_BIN=1;