ITPub博客

首页 > 数据库 > > 从库重放错误真实案例Last_SQL_Error Unknown column

从库重放错误真实案例Last_SQL_Error Unknown column

作者:zcs0237 时间:2019-05-07 14:05:46 0 删除 编辑

2019年5月7日上午故障处理记录(以下内容已作脱敏处理)


第一部分、与客户沟通

一、前期沟通

1、客户主动介绍了以下情况

从库做了这些事加索引、建新表、向新表中插入数据

2、动力小刚答复

不会影响主从同步


二、客户提供的信息

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 10.x.x.x

                  Master_User: slave_account

                  Master_Port: 3306

              Master_Log_File: edu-mysql-bin.000028

          Read_Master_Log_Pos: 5245953

               Relay_Log_File: localhost-relay-bin.000002

                Relay_Log_Pos: 324

        Relay_Master_Log_File: edu-mysql-bin.000028

             Slave_IO_Running: Yes

            Slave_SQL_Running: No

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 3861260

              Relay_Log_Space: 1385609

               Last_SQL_Errno: 1054

               Last_SQL_Error: Error 'Unknown column 'custrelation' in 'field list'' on query. Default database: 'newerp'. Query: 'INSERT INTO tbus_insured_p  (  ) VALUES( 

             Master_Server_Id: 840

                  Master_UUID: 2abeaffc-6158-11e7-8222-00163e03196b

             Master_Info_File: /var/lib/mysql/master.info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State:

      Last_IO_Error_Timestamp:

     Last_SQL_Error_Timestamp: 190507 10:27:49

                Auto_Position: 0




第二部分、分析处理过程


一、初步巡检

1、Waiting for master to send event # io线程全部接收了

2、Slave_SQL_Running: No        # sql重放线程中止

3、Last_SQL_Error_Timestamp: 190507 10:27:49 # sql重放线程中止的时间

4、Retrieved_Gtid_Set:

  Executed_Gtid_Set:

  Auto_Position: 0 # 没配gtid,建议以后改成基于gtid的主从

5、Skip_Counter: 0 # 近期没忽略过错误,之前是数据是高度一致的

6、Relay_Log_File: localhost-relay-bin.000002 relaylog # 序号是2(slave刚创建、或做过reset)


二、根据关键日志分析

1、关键日志

Last_SQL_Errno: 1054

Last_SQL_Error: Error 'Unknown column 'custrelation' in 'field list'' on query. 

Default database: 'newerp'. 

Query: 'INSERT INTO xxxxxxxx_del  (  ) VALUES( 

2、desc newerp.xxxxxxxx_del对比master-slave

错误原因是从库上对应的表上缺少字段

3、初步认为在主库更新表结构的时候直接使用了以下语句

alter table newerp.xxxxxxxx_del add custrelation varchar(4) ;

(缺少use newerp, slave无法区别custrelation字段是哪张表的)

4、经过客户经与开发人员确认:

对以上判断得到了印证


三、解决方法(以slave操作)

1、根据主库上表结构,在从库对应表上添加缺少的字段

use newerp

alter table xxxxxxxx_del add custrelation varchar(4) ;

2、start slave sql_thread; 

3、show slave status\G;



第三部分、补充


一、其它可能原因1

1、很多人在用 php+MySQL 做网站往数据库插入数据时发现如下错误:

注册失败!Unknown column '1a' in 'field list'

2、原始sql

$sql="INSERT INTO user(user,pass) values($user,$pass)";

3、需改为(即:char型要加''符号 )

$sql="INSERT INTO user(user,pass) values('".$user."','".$pass."')";


二、其它可能原因2

数据库使用的是gbk格式,加了个字段是utf8编码格式的.


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/210154/viewspace-3146516/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-01-25

  • 博文量
    42
  • 访问量
    495562