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造成锁的情况有很多,下面我们就列举一些情况:
- 执行DML操作没有commit,再执行删除操作就会锁表。
- 在同一事务内先后对同一条数据进行插入和更新操作。
- 表索引设计不当,导致数据库出现死锁。
- 长事物,阻塞DDL,继而阻塞所有同表的后续操作。
但是要区分的是Lock wait timeout exceeded
与Dead Lock
是不一样。
Lock wait timeout exceeded
:后提交的事务等待前面处理的事务释放锁,但是在等待的时候超过了mysql的锁等待时间,就会引发这个异常。Dead Lock
:两个事务互相等待对方释放相同资源的锁,从而造成的死循环,就会引发这个异常。
还有一个要注意的是innodb_lock_wait_timeout
与lock_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"
注意
-
数据超出类型精度
-
数据类型与表中的类型不一致
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)