mysql數據庫設置掛起狀態(mysql數據庫設置掛起狀態是什麼)

本文目錄一覽:

求助:MySQL數據庫會不會被掛起

100個沒問題,1000以下都不影響效率,WINDOWS對目錄下的文件沒有使用索引,太多了肯定會影響效率的。

怎麼開啟或關閉mysql數據庫狀態

mysql_connect()函數是連接數據庫的,

mysql_close()是關閉數據庫的,但通常情況下,不需要執行,因為在腳本執行完會自動關閉,

如果想讓連接不關閉的話,用 mysql_pconnect() 建立持久連接!

mysql的表壞了怎麼修復啊?

1. 表損壞的原因分析

以下原因是導致mysql 表毀壞的常見原因:

1、 服務器突然斷電導致數據文件損壞。

2、 強制關機,沒有先關閉mysql 服務。

3、 mysqld 進程在寫表時被殺掉。

4、 使用myisamchk 的同時,mysqld 也在操作表。

5、 磁盤故障。

6、 服務器死機。

7、 mysql 本身的bug 。

2. 表損壞的癥狀

一個損壞的表的典型癥狀如下:

1 、當在從表中選擇數據之時,你得到如下錯誤:

Incorrect key file for table: 』…』. Try to repair it

2 、查詢不能在表中找到行或返回不完全的數據。

3 、Error: Table 』p』 is marked as crashed and should be repaired 。

4 、打開表失敗: Can』t open file: 『×××.MYI』 (errno: 145) 。

5 、

3. 預防 MySQL 表損壞

可以採用以下手段預防mysql 表損壞:

1 、定期使用myisamchk 檢查MyISAM 表(注意要關閉mysqld ),推薦使用check table 來檢查表(不用關閉mysqld )。

2 、在做過大量的更新或刪除操作後,推薦使用OPTIMIZE TABLE 來優化表,這樣既減少了文件碎片,又減少了表損壞的概率。

3 、關閉服務器前,先關閉mysqld (正常關閉服務,不要使用kill -9 來殺進程)。

4 、使用ups 電源,避免出現突然斷電的情況。

5 、使用最新的穩定發佈版mysql ,減少mysql 本身的bug 導致表損壞。

6 、對於InnoDB 引擎,你可以使用innodb_tablespace_monitor 來檢查表空間文件內文件空間管理的完整性。

7 、對磁盤做raid ,減少磁盤出錯並提高性能。

8 、數據庫服務器最好只跑mysqld 和必要的其他服務,不要跑其他業務服務,這樣減少死機導致表損壞的可能。

9 、不怕萬一,只怕意外,平時做好備份是預防表損壞的有效手段。

4. MySQL 表損壞的修復

MyISAM 表可以採用以下步驟進行修復 :

1、 使用 reapair table 或myisamchk 來修復。

2、 如果上面的方法修復無效,採用備份恢復表。

具體可以參考如下做法:

階段1 :檢查你的表

如果你有很多時間,運行myisamchk *.MYI 或myisamchk -e *.MYI 。使用-s (沉默)選項禁止不必要的信息。

如果mysqld 服務器處於宕機狀態,應使用–update-state 選項來告訴myisamchk 將表標記為』 檢查過的』 。

你必須只修復那些myisamchk 報告有錯誤的表。對這樣的表,繼續到階段2 。

如果在檢查時,你得到奇怪的錯誤( 例如out of memory 錯誤) ,或如果myisamchk 崩潰,到階段3 。

階段2 :簡單安全的修復

注釋:如果想更快地進行修復,當運行myisamchk 時,你應將sort_buffer_size 和Key_buffer_size 變量的值設置為可用內存的大約25% 。

首先,試試myisamchk -r -q tbl_name(-r -q 意味着「 快速恢復模式」) 。這將試圖不接觸數據文件來修復索引文件。如果數據文件包含它應有的一切內容和指向數據文件內正確地點的刪除連接,這應該管用並且表可被修復。開始修復下一張表。否則,執行下列過程:

在繼續前對數據文件進行備份。

使用myisamchk -r tbl_name(-r 意味着「 恢復模式」) 。這將從數據文件中刪除不正確的記錄和已被刪除的記錄並重建索引文件。

如果前面的步驟失敗,使用myisamchk –safe-recover tbl_name 。安全恢復模式使用一個老的恢復方法,處理常規恢復模式不行的少數情況( 但是更慢) 。

如果在修復時,你得到奇怪的錯誤( 例如out of memory 錯誤) ,或如果myisamchk 崩潰,到階段3 。

階段3 :困難的修復

只有在索引文件的第一個16K 塊被破壞,或包含不正確的信息,或如果索引文件丟失,你才應該到這個階段。在這種情況下,需要創建一個新的索引文件。按如下步驟操做:

把數據文件移到安全的地方。

使用表描述文件創建新的( 空) 數據文件和索引文件:

shell mysql db_name

mysql SET AUTOCOMMIT=1;

mysql TRUNCATE TABLE tbl_name;

mysql quit

如果你的MySQL 版本沒有TRUNCATE TABLE ,則使用DELETE FROM tbl_name 。

將老的數據文件拷貝到新創建的數據文件之中。(不要只是將老文件移回新文件之中;你要保留一個副本以防某些東西出錯。)

回到階段2 。現在myisamchk -r -q 應該工作了。(這不應該是一個無限循環)。

你還可以使用REPAIR TABLE tbl_name USE_FRM ,將自動執行整個程序。

階段4 :非常困難的修復

只有.frm 描述文件也破壞了,你才應該到達這個階段。這應該從未發生過,因為在表被創建以後,描述文件就不再改變了。

從一個備份恢復描述文件然後回到階段3 。你也可以恢復索引文件然後回到階段2 。對後者,你應該用myisamchk -r 啟動。

如果你沒有進行備份但是確切地知道表是怎樣創建的,在另一個數據庫中創建表的一個拷貝。刪除新的數據文件,然後從其他數據庫將描述文件和索引文件移到破壞的數據庫中。這樣提供了新的描述和索引文件,但是讓.MYD 數據文件獨自留下來了。回到階段2 並且嘗試重建索引文件。

InnoDB 表可以採用下面的方法修復:

如果數據庫頁被破壞,你可能想要用SELECT INTO OUTFILE 從從數據庫轉儲你的表,通常以這種方法獲取的大多數數據是完好的。即使這樣,損壞可能導致SELECT * FROM tbl_name 或者InnoDB 後台操作崩潰或斷言,或者甚至使得InnoDB 前滾恢復崩潰。 儘管如此,你可以用它來強制InnoDB 存儲引擎啟動同時阻止後台操作運行,以便你能轉儲你的表。例如:你可以在重啟服務器之前,在選項文件的[mysqld] 節添加如下的行:

[mysqld]innodb_force_recovery = 4innodb_force_recovery 被允許的非零值如下。一個更大的數字包含所有更小數字的預防措施。如果你能夠用一個多數是4 的選項值來轉儲你的表,那麼你是比較安全的,只有一些在損壞的單獨頁面上的數據會丟失。一個為6 的值更誇張,因為數據庫頁被留在一個陳舊的狀態,這個狀態反過來可以引發對B 樹和其它數據庫結構的更多破壞。

1 (SRV_FORCE_IGNORE_CORRUPT)

即使服務器檢測到一個損壞的頁,也讓服務器運行着;試着讓SELECT * FROM tbl_name 跳過損壞的索引記錄和頁,這樣有助於轉儲表。

2 (SRV_FORCE_NO_BACKGROUND)

阻止主線程運行,如果崩潰可能在凈化操作過程中發生,這將阻止它。

3 (SRV_FORCE_NO_TRX_UNDO)

恢復後不運行事務回滾。

4 (SRV_FORCE_NO_IBUF_MERGE)

也阻止插入緩衝合併操作。如果你可能會導致一個崩潰。最好不要做這些操作,不要計算表統計表。

5 (SRV_FORCE_NO_UNDO_LOG_SCAN)

啟動數據庫之時不查看未完成日誌:InnoDB 把未完成的事務視為已提交的。

6 (SRV_FORCE_NO_LOG_REDO)

不要在恢復連接中做日誌前滾。

數據庫不能另外地帶着這些選項中被允許的選項來使用。作為一個安全措施,當innodb_force_recovery 被設置為大於0 的值時,InnoDB 阻止用戶執行INSERT, UPDATE 或DELETE 操作.

即使強制恢復被使用,你也可以DROP 或CREATE 表。如果你知道一個給定的表正在導致回滾崩潰,你可以移除它。你也可以用這個來停止由失敗的大宗導入或失敗的ALTER TABLE 導致的失控回滾。你可以殺掉mysqld 進程,然後設置innodb_force_recovery 為3 ,使得數據庫被掛起而不需要回滾,然後捨棄導致失控回滾的表。

網上找的

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/242019.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:45
下一篇 2024-12-12 12:45

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL數據庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28

發表回復

登錄後才能評論