ERROR 1050 (42S01): Table xxx already exists

来源:https://www.cnblogs.com/kerrycode/archive/2018/04/02/8692417.html
-Advertisement-
Play Games

今天遇到一個關於MySQL求助的問題,修改表結構時遇到“ERROR 1050 (42S01): table xxx already exits" mysql> ALTER TABLE DAY_BOOK_REPORT ADD UNIT_PRICE_PCS DOUBLE(12,2) DEFAULT NU... ...


 

今天遇到一個關於MySQL求助的問題,修改表結構時遇到ERROR 1050 (42S01): table xxx already exits"

 

mysql> ALTER TABLE DAY_BOOK_REPORT  ADD UNIT_PRICE_PCS   DOUBLE(12,2) DEFAULT NULL;

ERROR 1050 (42S01): TABLE 'INVGSP/#SQL-IB379' ALREADY EXISTS

mysql>

 

檢查了後,發現表DAY_BOOK_REPORT確實不存在欄位UNIT_PRICE_PCS,但是給表加欄位時就報這個錯誤,遂咨詢了一下他具體的操作過程,反饋是當時在做大量數據更新,然後給這個表增加欄位時,突然報DB connect fail, 登錄MySQL伺服器檢查發現MySQL服務已經掛了,MySQL版本為5.6.20-enterprise-commercial-advanced-log,檢查錯誤日誌,發現有下麵錯誤信息:

 

2018-03-31 23:29:16 7f09c1830700 InnoDB: Error: Write to file ./INVOICE/#sql-ib379.ibd failed at offset 600834048.
InnoDB: 1048576 bytes should have been written, only 446464 were written.
InnoDB: Operating system error number 0.
InnoDB: Check that your OS and file system support files of this size.
InnoDB: Check also that the disk is not full or a disk quota exceeded.
InnoDB: Error number 0 means 'Success'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html
15:29:16 UTC - mysqld got signal 11 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed, 
something is definitely wrong and this may fail.
 
key_buffer_size=8388608
read_buffer_size=131072
max_used_connections=120
max_threads=151
thread_count=6
connection_count=6
It is possible that mysqld could use up to 
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 68245 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.
 
Thread pointer: 0x9ac95e0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 7f09c182fe10 thread_stack 0x40000
/usr/sbin/mysqld(my_print_stacktrace+0x35)[0x946155]
/usr/sbin/mysqld(handle_fatal_signal+0x3d8)[0x6a58c8]
/lib64/libpthread.so.0[0x3a6b60f710]
/usr/sbin/mysqld[0xa45a2b]
/usr/sbin/mysqld[0xa50f5a]
/usr/sbin/mysqld[0x9e1afd]
/usr/sbin/mysqld[0x9e55a5]
/usr/sbin/mysqld[0x96aec5]
/usr/sbin/mysqld[0x7790a5]
/usr/sbin/mysqld(_Z17mysql_alter_tableP3THDPcS1_P24st_ha_create_informationP10TABLE_LISTP10Alter_infojP8st_orderb+0x1e54)[0x77b204]
/usr/sbin/mysqld(_ZN19Sql_cmd_alter_table7executeEP3THD+0x4a5)[0x87fab5]
/usr/sbin/mysqld(_Z21mysql_execute_commandP3THD+0x3d4f)[0x72aa4f]
/usr/sbin/mysqld(_Z11mysql_parseP3THDPcjP12Parser_state+0x318)[0x72de48]
/usr/sbin/mysqld(_Z16dispatch_command19enum_server_commandP3THDPcj+0x11b6)[0x72f7f6]
/usr/sbin/mysqld(_Z10do_commandP3THD+0xd7)[0x7310a7]
/usr/sbin/mysqld(_Z24do_handle_one_connectionP3THD+0x116)[0x6f8856]
/usr/sbin/mysqld(handle_one_connection+0x45)[0x6f8935]
/usr/sbin/mysqld(pfs_spawn_thread+0x126)[0xb153e6]
/lib64/libpthread.so.0[0x3a6b6079d1]
/lib64/libc.so.6(clone+0x6d)[0x3a6b2e89dd]
 
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (7f095e93b2e0): is an invalid pointer
Connection ID (thread ID): 4237691
Status: NOT_KILLED

 

 

從錯誤提示看,MySQL在往./INVGSP/#sql-ib379.ibd文件寫入數據時,遇到了錯誤,但是最終寫入成功(InnoDB: Operating system error number 0.),按錯誤日誌裡面的信息提示排查問題:

 

InnoDB: Check that your OS and file system support files of this size.

InnoDB: Check also that the disk is not full or a disk quota exceeded.

 

最終檢查發現MySQL數據文件所在的分區已經爆了,看錯誤提示,很有可能是因為空間問題,導致MySQL進程Crash掉了,而MySQL在ALTER TABLE操作過程中崩潰,那麼最終可能會在InnoDB表空間中生成一個孤立的中間表(orphaned intermediate table)。 其實#sql-ib379.ibd就是在修改DAY_BOOK_REPORT時,由於MySQL進程Crash掉後生成的孤立中間表。檢查如下所示:

 

mysql> show variables like '%innodb_file_per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)
 
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE '%#sql%';
+----------+--------------------+------+--------+-------+-------------+------------+---------------+
| TABLE_ID | NAME               | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE |
+----------+--------------------+------+--------+-------+-------------+------------+---------------+
|      650 | INVOICE/#sql-ib379 |    1 |     65 |   636 | Antelope    | Compact    |             0 |
+----------+--------------------+------+--------+-------+-------------+------------+---------------+
1 row in set (0.04 sec)
 
mysql>

 

clip_image001

 

 

官方文檔https://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting-datadict.html關於孤立中間表的介紹如下:

 

Orphan Intermediate Tables

 

If MySQL exits in the middle of an in-place ALTER TABLE operation (ALGORITHM=INPLACE), you may be left with an orphan intermediate table that takes up space on your system. This section describes how to identify and remove orphan intermediate tables.

Intermediate table names begin with an #sql-ib prefix (e.g., #sql-ib87-856498050). The accompanying .frm file has an #sql-* prefix and is named differently (e.g., #sql-36ab_2.frm).

To identify orphan intermediate tables on your system, you can view Table Monitor output or query INFORMATION_SCHEMA.INNODB_SYS_TABLES. Look for table names that begin with #sql. If the original table resides in a file-per-table tablespace, the tablespace file (the #sql-*.ibd file) for the orphan intermediate table should be visible in the database directory.

 

 

找到對應的frm文件(這裡是#sql-71a_40a97b.frm ),然後將其命名為#sql-ib379.frm(數據文件為#sql-ib379.ibd), 然後刪除表(對應的文件會刪除)即可解決上面這個問題。

 

# mv "#sql-71a_40a97b.frm" "#sql-ib379.frm"

 

mysql>  DROP TABLE `#mysql50##sql-ib379`

    -> ;

Query OK, 0 rows affected (0.11 sec)

 

mysql>  SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE '%#sql%';

Empty set (0.01 sec)

 

mysql>

 

 

個人還測試了網上另外一種方法,就是首先先刪除#sql開頭的這些文件,然後拷貝源表數據到備份表,接著刪除原表,最後將備份表重命名為源表。添加相關索引。這種方法也能解決這個問題。

 

	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Oracle11.2.0.3資料庫通過rman備份到Oracle11.2.0.4上做還原,報需要升級的錯誤,具體處理步驟如下: 一、錯誤信息 SQL> alter database open resetlogs;alter database open resetlogs*ERROR at line ...
  • 內連接:只連接匹配的行 inner join select A.*,B.* from A,B where A.id = B.parent_id 外鏈接包括左外鏈接,右外鏈接,全外鏈接 左外鏈接:包含左表的所有行,右表不匹配的顯示null select A.*,B.* from A left join ...
  • 執行$ORACLE_HOME/bin/dbstart 啟動資料庫提示如下: [oracle@prim bin]$ ./dbstart ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net ListenerUsage: ./db ...
  • 在MySQL/MariaDB中有好幾種變數類型:用戶自定義變數、系統變數、一般的臨時變數(即本地變數,或稱為局部變數)。 1.用戶變數 用戶變數是基於會話的,也是基於用戶的,所以我覺得稱之為會話變數更合適,但會話變數一般用來表示系統會話變數(後面會說明),所以還是稱之為用戶變數好了。 只有本用戶才能 ...
  • 一個網站的滲透測試思路,流程(給你一個網站,怎麼做?) 1)信息收集 a. 伺服器的相關信息(真實ip,系統類型,版本,開放埠,WAF等) b. 網站指紋識別(包括,cms,cdn,證書等),dns記錄 c. whois信息,姓名,備案,郵箱,電話反查(郵箱丟社工庫,社工準備等) d. 子功能變數名稱收集 ...
  • 一、環境 伺服器:Ubuntu 16.04.1 LTS(GUN/Linux 4.4.0 91 generic x86_64) 資料庫版本:MariaDB 10.3 二、安裝流程 2.1 進入MariaDB 網站 在 "https://downloads.mariadb.org/mariadb/rep ...
  • --許可權管理 CREATE TABLE SystemLog--日誌表 ( Id INT IDENTITY(1,1) PRIMARY KEY,--主鍵id UserName VARCHAR(10) NOT NULL,--用戶名稱,創建日誌的用戶名稱 UserId INT NOT NULL,--用戶id... ...
  • 官網: https://redis.io/topics/sentinel Redis的主從只能實現數據熱備份的功能,主宕機後從無法自動接管服務,因此Redis推出了Sentinel的主從監控模式。 Sentinel實質上是類似於MHA的一個監控主從並自動切換的monitor,實現的功能類似Mongo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...