mysql 报错记录

The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement

向aliyun 写入数据,报错。阿里云的一个保护策略,空间剩余不足时,禁止数据写入

 

如果想知道数据库容量和表空间的大小。打开mysql的information_schema数据库。在该库中有一个tables表,这个表主要字段分别是:

table_schema:数据库名

table_name:表名

table_rows:记录数

data_length:数据大小

index_length:索引大小查看所有数据库的容量剩余大小

engine:所使用的存储引擎

select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),'MB') as data_size,
concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size
from information_schema.tables
group by TABLE_SCHEMA
order by data_length desc;

 

1205, 'Lock wait timeout exceeded; try restarting transaction'

执行DML操作没有commit,再执行其他操作导致锁表, 找到对应的ID kill 。

 

Mysql造成锁的情况有很多,下面我们就列举一些情况:

  1. 执行DML操作没有commit,再执行删除操作就会锁表。
  2. 在同一事务内先后对同一条数据进行插入和更新操作。
  3. 表索引设计不当,导致数据库出现死锁。
  4. 长事物,阻塞DDL,继而阻塞所有同表的后续操作。

但是要区分的是Lock wait timeout exceededDead Lock是不一样。

  • Lock wait timeout exceeded:后提交的事务等待前面处理的事务释放锁,但是在等待的时候超过了mysql的锁等待时间,就会引发这个异常。
  • Dead Lock:两个事务互相等待对方释放相同资源的锁,从而造成的死循环,就会引发这个异常。

还有一个要注意的是innodb_lock_wait_timeoutlock_wait_timeout也是不一样的。

  • innodb_lock_wait_timeout:innodb的dml操作的行级锁的等待时间
  • lock_wait_timeout:数据结构ddl操作的锁的等待时间

问题现象

  • 数据更新或新增后数据经常自动回滚。
  • 表操作总报 Lock wait timeout exceeded 并长时间无反应

解决方法

  • 应急方法:show full processlist; kill掉出现问题的进程。 ps.有的时候通过processlist是看不出哪里有锁等待的,当两个事务都在commit阶段是无法体现在processlist上
  • 根治方法:select * from innodb_trx;查看有是哪些事务占据了表资源。 ps.通过这个办法就需要对innodb有一些了解才好处理

 

https://ningyu1.github.io/site/post/75-mysql-lock-wait-timeout-exceeded/

 

1264, "Out of range value for column 'first_page' at row 38"

first_page  : `first_page` smallint NOT NULL DEFAULT '0' COMMENT '起始页'

int

从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。

smallint

从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。

tinyint

从 0 到 255 的整型数据。存储大小为 1 字节。

 

1265, "Data truncated for column 'longitude' at row 1"

注意 

  1. 数据超出类型精度

  2. 数据类型与表中的类型不一致

 

1292, "Incorrect date value: '' for column 'abstract_registration_date' at row 1"

INSERT INTO table_name(today) 
VALUES(STR_TO_DATE('05-25-2021' or null,'%m-%d-%y'));  

today : date DEFAULT NULL COMMENT '日期'

插入 “” 空字符串失败, '' or null  (python 直接用None)

 

posted @ 2020-07-24 13:06  薄荷味日记  阅读(1941)  评论(0编辑  收藏  举报