我在两个 mysql 服务器之间设置了复制,一个是主服务器,另一个是从服务器。
除非主服务器因任何原因重新启动,否则此方法可以正常工作。当主服务器重新启动时,从服务器不会连接。在从服务器上,我执行了 start slave;然后它失败了,并显示
090922 17:49:59 [错误] 无法打开中继日志“/var/run/mysqld/mysqld-relay-bin.000009”(relay_log_pos 67391580) 090922 17:49:59 [错误] 中继日志初始化期间找不到目标日志
我不得不从主服务器获取所有数据并将其加载回从服务器并重新启动。
我怎样才能避免这种情况的发生,这样如果主服务器确实重新启动了,就不需要重新执行所有数据库了。
这是配置文件 Red Hat 5,mysql 5.0.45
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=1
server-id = 9180
slave_compressed_protocol=1
max_allowed_packet=16M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
答案1
听起来好像出于某种原因,重新启动主服务器会清除二进制日志。MySQL 不会自行执行此操作;它要么RESET MASTER
在某个时刻收到命令,要么在服务器启动时清除了某些内容/var/run
。
答案2
我以前见过这种情况,当时从服务器上的配置使用 DNS 名称连接到主服务器。在我的例子中,解决方案是改用 IP 地址。
顺便说一句,当您说“我启动从属;”时,您首先会停止它,不是吗?
答案3
我以前见过这种情况。不要将日志放在 /var/run 中。如果我没记错的话,系统会自动删除此目录中的文件。尝试将 binlog 放在另一个目录中,看看错误是否再次出现。