Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL从属I/O线程未运行_Mysql_Replication_Slave - Fatal编程技术网

MySQL从属I/O线程未运行

MySQL从属I/O线程未运行,mysql,replication,slave,Mysql,Replication,Slave,我已经为MySQL服务器设置了复制。我可以使用复制用户/密码从从属计算机连接到主服务器。我已使从属SQL线程运行,但从属线程未运行,当使用“显示从属状态”进行检查时,从属I/O状态为空。有什么问题吗 我如何解决这个问题?重新启动从属服务器没有帮助 这是我的错:我没有给*.一个“复制从机”特权,而是给了我的\u db.* 而不是给"复制", 奴隶的特权,我只是 给我的_db.* 复制从机只是一个全局权限(即仅限每个用户),这意味着 GRANT REPLICATION SLAVE on mydb.*

我已经为MySQL服务器设置了复制。我可以使用复制用户/密码从从属计算机连接到主服务器。我已使从属SQL线程运行,但从属线程未运行,当使用“显示从属状态”进行检查时,从属I/O状态为空。有什么问题吗

我如何解决这个问题?重新启动从属服务器没有帮助

这是我的错:我没有给
*.
一个“复制从机”特权,而是给了
我的\u db.*

而不是给"复制", 奴隶的特权,我只是 给我的_db.*

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

GRANT REPLICATION SLAVE on mydb.* TO 'someuser'@'%';
没有效果,因为您不能按数据库/列/表授予它

您需要运行的命令是:

GRANT REPLICATION SLAVE on *.* TO 'someuser'@'%';
然后执行
启动从机
。您可能还发现查看mysql错误日志很有用


我建议好好阅读,因为它详细地解释了所有这些。

我遇到了同样的问题,我尝试了以下步骤

首先将此代码添加到my.cnf或my.ini中[mysqld]下方的某个位置
从属跳过错误=1046
这将跳过所有重复条目,因为我们将在复制停止的位置执行整个二进制日志文件,您可以在复制成功后对该代码进行注释

1.停止从站

2.复位从机

3.将MASTER更改为MASTER_LOG_FILE='mysql-bin.000049'

Note: MASTER_LOG_FILE must be the last file where it stop from replicating
4.将MASTER更改为MASTER\u LOG\u POS=98

5.启动从机


检查您是否成功

我遇到了相同的问题,并通过以下步骤进行了修复。完整的线程链接是

步骤与@Luxknight007提到的相同,只是他的步骤2不同。然而,这个线程包含更多的细节,这是非常有用的。下面是我使用的解决方案,它很有效

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

代码:

这是我重新创建的一个示例,因此您的示例将有所不同。请注意,错误与您在从属状态中看到的错误类似。因此,请在错误日志文件中查找您的特定错误消息,然后找到is为您提供文件名和位置的结尾部分(“在我的示例中,我们在日志'mysql bin.000001'位置3427'处停止)。该位置应为315098143,具体取决于显示从属状态,即从属sql_线程停止执行事件(Exec_Master_Log_Pos),但io_线程继续读取新事件(Read_Master_Log_Pos)

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

代码:

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

初始复制错误似乎告诉您,从机上不存在表
asteriskcdr
bpleadcf
,因此当insert语句尝试从该表中选择数据时失败。因此,问题在于从机似乎已与主机不同步。如果主机上的stion是静态的或大部分是静态的,您可以通过使用mysqldump从主机上的表导出数据并将其加载到从机来解决这个问题。如果不可能,或者您不关心该数据,您可以始终使用sql_slave_skip_计数器跳过复制语句,但从机将e与主机进一步不同步


如果所有其他方法都失败了,作为最后手段,您也可以从主设备重建从属设备。=”

步骤2非常危险,根本不需要。2.RESET SLAVE(不应运行此命令)RESET SLAVE使SLAVE忘记其在主机二进制日志中的复制位置。此语句用于干净启动:它删除master.info和relay-log.info文件、所有中继日志文件,并启动新的中继日志文件。
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> 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;