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/ ,如需转载,请注明出处,否则将追究法律责任。