MySQL slow_log日志表出现非法字段值
背景
从mysql.slow_log 获取慢查询日志很慢,该表是csv表,没有索引。
想添加索引来加速访问,而csv引擎不能添加索引(csv引擎存储是以逗号分割的文本来存储的),只能改存储引擎来添加索引了
MySQL 中日志表slow_log和general_log主要特点
- 日志表只能是CSV和MYISAM存储引擎
- 更改日志表的存储引擎必须先停止使用该日志表
- 日志表中的数据不记录binlog
- 锁表语句FTWRL和lock tables、read_only对日志表无效
- 用户不能对日志表进行DML操作,只能被mysql自己写入数据
CREATE TABLE slow_log (start_time timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),user_host mediumtext NOT NULL,query_time time(6) NOT NULL,lock_time time(6) NOT NULL,rows_sent int(11) NOT NULL,rows_examined int(11) NOT NULL,db varchar(512) NOT NULL,last_insert_id int(11) NOT NULL,insert_id int(11) NOT NULL,server_id int(10) unsigned NOT NULL,sql_text mediumblob NOT NULL,thread_id bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
ALTER TABLE mysql.slow_log ENGINE = MyISAM;
ERROR 1292 (22007) at line 1: Incorrect time value: '838:59:59.305999' for column 'query_time' at row 320264n
slow_log.csv 文件
"2019-03-05 15:29:56.102276","xxxx[xxxx] @ [10.230.123.134]","838:59:59.305999","00:00:00.000000",0,0,"",0,0,2112034892,"Binlog Dump GTID",413317
无法访问该记录
mysql> select * from mysql.slow_log where query_time like '838:59:59%';
ERROR 1194 (HY000): Table 'slow_log' is marked as crashed and should be repaired
mysql>
mysql> check table mysql.slow_log;
+----------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+----------------+-------+----------+----------+
| mysql.slow_log | check | status | OK |
+----------------+-------+----------+----------+
能正常访问其它记录
select * from mysql.slow_log limit 1\G
*************************** 1. row ***************************
start_time: 2018-09-08 13:14:51.688722
user_host: universe_op[universe_op] @ [127.0.0.1]
query_time: 00:00:01.501843
lock_time: 00:00:00.000000
rows_sent: 0
rows_examined: 0
db:
last_insert_id: 0
insert_id: 0
server_id: 2112034892
sql_text: COMMIT
thread_id: 6
尝试复现
mysql> create table test_time6(time time(6) not null) engine=csv;
Query OK, 0 rows affected (0.23 sec)
mysql>
mysql>
mysql> insert into test_time6 values('838:59:59.305999');
ERROR 1292 (22007): Incorrect time value: '838:59:59.305999' for column 'time' at row 1
mysql>
mysql>
mysql>
无法复现,提示插入的该time值非法。mysql自身是怎么把该值插入slow_log表中的了?sql_mode也没有修改过
修改sql_mode后尝试复现
mysql> show global variables like '%sql_mode%';
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
mysql>
mysql> set global sql_mode ="ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql>
mysql> insert into test_time6 values('838:59:59.305999');
ERROR 1292 (22007): Incorrect time value: '838:59:59.305999' for column 'time' at row 1
mysql>
mysql> show global variables like '%sql_mode%';
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode | ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
修改sql_mode,去掉STRICT_TRANS_TABLES后,也无法插入该非法time值
MySQL slow_log日志表出现非法字段值的更多相关文章
- MySQL为数据表的指定字段插入数据
username not null 没有默认值/有默认值 insert不插入username字段 均不报错 2014年07月23日21:05 百科369 MySQL为数据表的指定字段插入数据 ...
- MySQL获取Schema表名和字段信息
MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,U ...
- mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it"
mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it" 现 ...
- mysql关联表更改表多个字段值
关联表更改某一个字段值:更改部分数据,外层where条件控制更改记录的数量 BEGIN; " ; "; ROLLBACK; -- COMMIT; 关联表更改某一个字段值:更改全部记 ...
- mysql下sql语句令某字段值等于原值加上一个字符串
MYSQL在一个字段值后面加字符串,如下: member 表名 card 字段名 update member SET card = '00' || card; (postgreSQL 用 || 来连贯 ...
- mysql数据库之表操作及字段约束条件
目录 一.存储引擎 二.表介绍 三.创建表 四.查看表结构 五.数据类型 一.介绍 二.数值类型 整数类型 浮点型 三.字符串类型 四.日期类型 五.枚举类型与集合类型 六.约束条件 七.修改表 al ...
- mysql,user表中各字段的含义
1.查询user表 select * from mysql.user 2.修改用户密码 ALTER user ' 3.user表中各字段的含义 Select_priv:用户可以通过SELECT命令选择 ...
- MySQL向数据库表的某字段追加数据
使用CONCAT()函数 mysql向表中某字段后追加一段字符串(field为字段名): update table_name set field=CONCAT(field,'str',) mysql ...
- mysql 多日志表结果集合拼接存储过程
通常单天的日志 仅仅记录当天的日志信息,假设须要查看一月内的日志信息须要对每天的日志表结果集合进行拼接,通经常使用到 union . 储存过程: drop PROCEDURE if EXISTS un ...
随机推荐
- mysql 表结构
1.登录数据库>mysql -u root -p 数据库名称 2.查询所有数据表>show tables; 3.查询表的字段信息>desc 表名称; 4.1添加表字段 alter t ...
- HTTPS SSL/TLS协议
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...
- EasyUI自动消失的弹框
$.messager.show( { title : "系统提示", msg : "请选择提供商!!!" });
- SQLLDR导入乱码问题的解决
SQLLDR导入乱码问题的解决 处理过程: 1.本地建立控制文件 load data infile 'd:\TMP_KAITOUSHUJU.csv' into table TMP_KAITOU ...
- np.cumsum()函数和正则表达式的含义
- CSS如何作小于1PX的边
小于1PX的边能使页面变得更加精致,那么具体怎么做呢? 主要思路就是设置伪元素先放大再通过变换缩小. 代码如下 .border { position: relative;//如果有圆角 } .bord ...
- Nginx(二)
利用include功能优化nginx的配置文件 [root@lnmp conf]# cat nginx.conf worker_processes 1; events { worker_con ...
- blockchain[z]
https://medium.com/programmers-blockchain/creating-your-first-blockchain-with-java-part-2-transactio ...
- centos关机与重启命令 shutdown -r now 立刻重启
centos关机与重启命令详解与实战 Linux centos重启命令: .reboot .shutdown -r now 立刻重启(root用户使用) .shutdown -r 过10分钟自动重启( ...
- Ubuntu部署可视化爬虫Portia2.0环境以及入门
http://www.cnblogs.com/kfpa/p/Portia.html http://brucedone.com/archives/986