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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM