mysql主从复制错误sql-running no

故障现象:
进入slave服务器,运行:
mysql> show slave status\G
        .......
            Relay_Log_File:
localhost-relay-bin.000535
            Relay_Log_Pos: 21795072
    Relay_Master_Log_File: localhost-bin.000094
Slave_IO_Running: Yes
Slave_SQL_Running: No
          Replicate_Do_DB:
      Replicate_Ignore_DB:
      ......
解决办法一、
Slave_SQL_Running: No
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.

一般是事务回滚造成的:
解决办法:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
解决办法二、
首先停掉Slave服务:slave stop
到主服务器上查看主机状态:
记录File和Position对应的值
进入master
mysql> show master status;
+----------------------+----------+--------------+------------------+
| File                | Position |
Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| localhost-bin.000094 | 33622483 |           
  |                  |
+----------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
然后到slave服务器上执行手动同步:

mysql> change master to
> master_host=‘master_ip‘,
> master_user=‘user‘,
> master_password=‘pwd‘,
> master_port=3306,
> master_log_file=localhost-bin.000094‘,
> master_log_pos=33622483 ;
1 row in set (0.00 sec)
mysql> slave start;
1 row in set (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
........
          Master_Log_File: localhost-bin.000094
      Read_Master_Log_Pos: 33768775
            Relay_Log_File:
localhost-relay-bin.000537
            Relay_Log_Pos: 1094034
    Relay_Master_Log_File: localhost-bin.000094
          Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
          Replicate_Do_DB:
手动同步需要停止master的写操作!
查看mysql主从配置的状态及修正 slave不启动问题
1、查看master的状态
show master status;  //Position不应该为0
show processlist; 
//state状态应该为Has sent all binlog to slave; waiting for
binlog to be updated
2、查看slave状态
show slave status;
//Slave_IO_Running 与 Slave_SQL_Running 状态都要为Yes
show processlist;
//应该有两行state值为:
Has read all relay log; waiting for the slave I/O thread to update it
Waiting for master to send event

3、错误日志
MySQL安装目录 /usr/local/mysql
MySQL日志目录 /usr/local/mysql/data/  形如,Hostname.err

4、Change master to
如果从库的Slave未启动,Slave_IO_Running为NO。
可能是主库是的master的信息有变化,
查看主库show master status;
记录下File,Position字段,假设为‘mysql-bin.000004’,98;
在从库执行:

mysql>stop slave;
mysql>change master to master_log_file=‘mysql-bin.000004‘,master_log_pos=98;
mysql>start slave;

5、SET global sql_slave_skip_counter=n;
如果从库的slave_sql_running为NO。
Err文件中记录:
Slave:Error "Duplicate entry ‘1‘ for key 1" on query.....
可能是master未向slave同步成功,但slave中已经有了记录。造成的冲突可以在从库上执行
set global sql_slave_skip_counter=n;
跳过几步。再restart slave就可以了。

6、同步错误处理
发现mysql slave服务器经常因为一些特殊字符或者符号产生的更新语句报错,整个同步也会因此而卡在那,最初的办法只是手动去出错的机器执行下面三条SQL语句,跳过错误即可。

mysql>slave stop;
mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql>slave start;

PS:本人多次遇到从数据库的同步进程自动停掉的问题,有时简单通过slave stop,slave start即可解决。有时slave start启动后又会自动停掉,这时使用 change master重设主数据库信息的方式解决了问题。

说明:
Slave_IO_Running:连接到主库,并读取主库的日志到本地,生成本地日志文件
Slave_SQL_Running:读取本地日志文件,并执行日志里的SQL命令。

时间: 2024-10-10 15:38:21

mysql主从复制错误sql-running no的相关文章

MySQL主从复制中常见的3个错误及填坑方案

一.问题描述 主从复制错误一直是MySQL DBA一直填不完的坑,如鲠在喉,也有人说mysql主从复制不稳定云云,其实MySQL复制比我们想象中要坚强得多,而绝大部分DBA却认为只要跳过错误继续复制就好啦,接下来不发生错误就好了,其实跳过错误就会有数据不一致的风险,数据不一致可能还会越来越严重,而我就复制错误中反复出现的1045.1032和1062错误引起的数据库主从不一致的的现象进行深入分析及给出一套完善的解决方案. (1) [ERROR]1452:无法在外键的表插入参考主键没有的数据 (2)

Mysql主从复制以及常见错误问题分析

Mysql主从复制以及常见错误问题分析 一.主从复制简介: 1.mysql主从复制原理: Mysql主从复制的实现,主要依赖于二进制日志来实现,过程主要是根据把主的MySQL 的数据复制到其它主机( Slave )上.在复制过程中,可以理解为一台mysql服充当服务器,而其他的mysql服务器充当从服务器,而这种从服务器可以是一个或者是多个.在主从复制过程中,mysql-master会将更新写入二进制日志,并维护文件的一个索引以跟踪日志循环.开启的二进制,mysql主服务器就会安装你配置的二进制

mysql 主从复制常见错误

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always

mysql主从复制跳过错误

mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续跳过错误有两种方式:1.跳过指定数量的事务:mysql>slave stop;mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1        #跳过一个事务mysql>slave start 2.修改mysql的配置文件,通过slave_skip_errors参数来跳所有错误或指定类型的错误vi /etc/my.cnf[mysqld]#slave

mysql主从复制1236错误

今天监控显示mysql主从复制出错了,信息如下: mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Master_Host: 192.168.33.230 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000774 R

解决mysql的错误 CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 1300 Invalid utf8 character string: '\xBF\xA5'

报错: CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 1300 Invalid utf8 character string: '\xBF\xA5' 解决方法: $currentPrice = $currentPrice * 1; => $currentPrice 原本是字符串的 数字,导致插入数据库失败. =>所以只要改成 数字 即可. =>字符串的 数字 ,乘以 1 就会变

MySQL主从复制中断,报“Error on master: message (format)='Cannot delete or update a parent row: a foreign key constraint fails' error code=1217” 错误

前几天,发现从库挂了,具体报错信息如下: 分析思路 1. 因为我采用的是选择性复制,只针对以下几个库进行复制: card,upay,deal,monitor,collect.所以,不太可能出现对于sas_basic的操作能复制到该从库上. 2. 整个架构是1主2从,且都是选择性复制,上面这个从库是直接复制card,upay,deal,monitor,collect这几个数据库的数据,而另外一个从库则是忽略上述库,如下所示: 怀疑是在上述schema下,执行了DROP TABLE IF EXIST

mysql 主从复制 忽略错误

mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续跳过错误有两种方式:1.跳过指定数量的事务:mysql>slave stop;mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1        #跳过一个事务mysql>slave start 2.修改mysql的配置文件,通过slave_skip_errors参数来跳所有错误或指定类型的错误vi /etc/my.cnf[mysqld]#slave

mysql主从复制跳过错误项

mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续 1 跳过错误有两种方式: 1.1 跳过指定数量的事务: mysql>stop slave; mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; #跳过一个事务 mysql>start slave; 1.2 修改mysql的配置文件,通过slave_skip_errors参数来跳所有错误或指定类型的错误 vi /etc/my.cnf [mysql