我已经为 MySQL 服务器设置了复制。我可以使用复制用户/密码从从机连接到主服务器。我已经让从属 SQL 线程运行,但是从属 输入/输出 使用“显示从属状态”检查时,线程未运行并且从属 I/O 状态为空。可能是什么问题呢?

我该如何解决这个问题?重新启动从站没有帮助。

这是我的坏处:而不是给予“复制从属”特权 *.*, ,我只是为了 my_db.*.

有帮助吗?

解决方案

  

而不是给一个“复制   从”特权,我才   给它为MY_DB。*。

复制从属只是一个全局权限(即,每个用户只),这意味着,如

的命令
GRANT REPLICATION SLAVE on mydb.* TO 'someuser'@'%';

具有如你不能授予它每个数据库/列/表中没有效果。

需要运行的命令是:

GRANT REPLICATION SLAVE on *.* TO 'someuser'@'%';

然后做一个START SLAVE。您可能还会发现它在MySQL错误日志寻找有用的。

我建议的复制设置的一个良好的阅读文档,因为它详细解释了所有这一切。

其他提示

我遇到了同样的问题并使用以下步骤修复了。完整的线程链接是 http://www.percona.com/forums/questions-discussions/percona-xtrabackup/11842-backup-stopped-working-slave-sql-running-no

除步骤 2 外,步骤与@Luxknight007 提到的相同。然而,该线程包含更多细节,这非常有帮助。以下是我使用过并且有效的解决方案。

“第一个问题是您更改了复制位置而不是修复错误,并且使用了不正确的二进制日志文件名格式(我猜您可能只是使用了您链接的帖子中的格式)。要回到开始的位置,您需要找到从属sql_thread停止的binlog文件和位置。根据您的从属状态输出,看起来从属正在从新的二进制日志文件读取(您可以看到 Read_Master_Log_Pos 值小于 Exec_Master_Log_Pos 值,这意味着它必须读取比从属 sql_thread 所在位置更新的二进制日志文件停止于),因此您需要找到从属sql_thread实际失败的binlog文件。因此,请在错误日志中查找类似以下内容的内容:

代码:

2013-10-08 12:48:51 37545 [ERROR] Slave SQL: Error 'Table 'testdb.test2' doesn't exist' on query. Default database: 'testdb'. Query: 'insert into test1 select * from test2', Error_code: 1146
2013-10-08 12:48:51 37545 [Warning] Slave: Table 'testdb.test2' doesn't exist Error_code: 1146
2013-10-08 12:48:51 37545 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000001' position 3427

这是我重新创建的示例,因此您的示例会有所不同。请注意,错误与您在从属状态中看到的错误类似。因此,在错误日志文件中找到特定的错误消息,然后找到为您提供文件名和位置的末尾部分(在我的示例中,“我们停在日志'mysql-bin.000001'位置3427”)。根据您的显示从属状态,该位置应为 315098143,因为此时从属 sql_thread 停止执行事件( Exec_Master_Log_Pos ),但 io_thread 继续读取新事件( Read_Master_Log_Pos )。

找到正确的二进制日志文件名和位置后,使用您在错误日志中找到的信息在从属设备上重新运行更改主语句。请注意,您的文件名应该类似于“newcrmdb1-bin.XXXXXX”,而不是 mysql-bin.XXXXXX(您可以在上面的显示从属状态中看到此命名约定)。

代码:

mysql> change master to MASTER_LOG_FILE='newcrmdb1-bin.XXXXXX', Master_Log_Pos=315098143;

change master to MASTER_LOG_FILE='mysql-bin.000082' , Master_Log_Pos=47914844;

一旦您被指向从属 sql_thread 失败的原始复制位置,您就需要修复它开始抱怨的错误。

初始复制错误似乎告诉您该表 asteriskcdr.bpleadcf 从属设备上不存在该数据,因此当尝试从该表中选择数据时,插入语句会失败。所以问题是你的从站似乎已经与你的主站不同步了。如果主服务器上的相关表是静态的或大部分是静态的,您可以通过使用 mysqldump 从主服务器上的该表导出数据并将其加载到从服务器中来解决此问题。如果这是不可能的,或者您不关心该数据,您总是可以使用 sql_slave_skip_counter 跳过复制语句,但随后从服务器将与主服务器进一步不同步。

如果所有其他方法都失败了,作为最后的手段,您也可以随时从主服务器重建从服务器。=)”

我也遇到同样的问题,我尝试此步骤

首先在my.cnf或my.ini的slave-skip-errors=1046添加此代码下面某处的[mysqld] 这将跳过所有重复条目,因为我们将执行整个二进制日志文件,其中复制停止,你可以成功复制后发表评论此代码。

1.STOP从属;

2.RESET从属;

3.CHANGE MASTER TO MASTER_LOG_FILE = '的MySQL-bin.000049';

Note: MASTER_LOG_FILE must be the last file where it stop from replicating

4.CHANGE MASTER TO MASTER_LOG_POS = 98;

5.启动从属;

检查,如果你成功了

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top