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)