本文目錄一覽:
- 1、系統崩潰後,關於MYSQL恢復資料庫的問題!求救啊!
- 2、如何修復MySQL資料庫
- 3、怎樣修復mysql表
- 4、怎麼恢復mysql資料庫怎麼恢複數據
- 5、如何解決Can t connect to mysql server on localhost 錯誤
系統崩潰後,關於MYSQL恢復資料庫的問題!求救啊!
MySQL 在崩潰恢復時,會遍歷打開所有 ibd 文件的 header page 驗證數據字典的準確性,如果 MySQL 中包含了大量表,這個校驗過程就會比較耗時。 MySQL 下崩潰恢復確實和表數量有關,表總數越大,崩潰恢復時間越長。另外磁碟 IOPS 也會影響崩潰恢復時間,像這裡開發庫的 HDD IOPS 較低,因此面對大量的表空間,校驗速度就非常緩慢。另外一個發現,MySQL 8 下正常啟用時居然也會進行表空間校驗,而故障恢復時則會額外再進行一次表空間校驗,等於校驗了 2 遍。不過 MySQL 8.0 里多了一個特性,即表數量超過 5W 時,會啟用多線程掃描,加快表空間校驗過程。
如何跳過校驗MySQL 5.7 下有方法可以跳過崩潰恢復時的表空間校驗過程嘛?查閱了資料,方法主要有兩種:
1. 配置 innodb_force_recovery可以使 srv_force_recovery != 0 ,那麼 validate = false,即可以跳過表空間校驗。實際測試的時候設置 innodb_force_recovery =1,也就是強制恢復跳過壞頁,就可以跳過校驗,然後重啟就是正常啟動了。通過這種臨時方式可以避免崩潰恢復後非常耗時的表空間校驗過程,快速啟動 MySQL,個人目前暫時未發現有什麼隱患。2. 使用共享表空間替代獨立表空間這樣就不需要打開 N 個 ibd 文件了,只需要打開一個 ibdata 文件即可,大大節省了校驗時間。自從聽了姜老師講過使用共享表空間替代獨立表空間解決 drop 大表時性能抖動的原理後,感覺共享表空間在很多業務環境下,反而更有優勢。
臨時冒出另外一種解決想法,即用 GDB 調試崩潰恢復,通過臨時修改 validate 變數值讓 MySQL 跳過表空間驗證過程,然後讓 MySQL 正常關閉,重新啟動就可以正常啟動了。但是實際測試發現,如果以 debug 模式運行,確實可以臨時修改 validate 變數,跳過表空間驗證過程,但是 debug 模式下代碼運行效率大打折扣,反而耗時更長。而以非 debug 模式運行,則無法修改 validate 變數,想法破滅。
如何修復MySQL資料庫
來快速修復所有的資料庫或者特定的資料庫;
方法:進入Mysql的Bin目錄:C:\Program
Files\MySQL\MySQL Server 4.1\bin 運行:mysqlcheck -A -o
-r -uroot -p123 注意,將123改成你自己的root用戶密碼 希望能解決您的問題。
怎樣修復mysql表
也許很多人遇到過類似Can』t open file: 『[Table]mytable.MYI』 這樣的錯誤信息,卻不知道怎麼解決他,下面我們做個介紹,
多數情況下,資料庫被破壞只是指索引文件受到了破壞,真正的數據被破壞掉的情況非常少。大多數形式的資料庫破壞的的修復相當簡單。
和前面的校驗一樣,修復的方式也有三種。
下面講的方法只對MyISAM格式的表有效。其他類型的損壞需要從備份中恢復。
1,REPAIR TABLE SQL statement(mysql服務必須處於運行狀態)。
2,命令mysqlcheck(mysql服務可以處於運行狀態)。
3,命令myisamchk(必須停掉mysql服務,或者所操作的表處於不活動狀態)。
在修復表的時候,最好先作一下備份。所以你需要兩倍於原始表大小的硬碟空間。請確保在進行修復前你的硬碟空間還沒有用完。
1用」repair table」方式修復
語法:repair table 表名 [選項]
選項如下:
QUICK 用在數據表還沒被修改的情況下,速度最快
EXTENDED 試圖去恢復每個數據行,會產生一些垃圾數據行,萬般無奈的情況下用
USE_FRM 用在.MYI文件丟失或者頭部受到破壞的情況下。利用.frm的定義來重建索引
多數情況下,簡單得用」repair table tablename」不加選項就可以搞定問題。但是當.MYI文件丟失或者頭部受到破壞時,這樣的方式不管用,例如:
mysql REPAIR TABLE mytable;
+————————-+——–+———-+———————————————+
| Table | Op | Msg_type | Msg_text |
+————————-+——–+———-+———————————————+
| sports_results.mytable | repair | error | Can』t find file: 『mytable.MYI』 (errno: 2) |
+————————-+——–+———-+———————————————+
修復失敗的原因時索引文件丟失或者其頭部遭到了破壞,為了利用相關定義文件來修復,需要用USE_FRM選項。例如:
mysql REPAIR TABLE mytable USE_FRM;
+————————-+——–+———-+————————————+
| Table | Op | Msg_type | Msg_text |
+————————-+——–+———-+————————————+
| sports_results.mytable | repair | warning | Number of rows changed from 0 to 2 |
| sports_results.mytable | repair | status | OK |
+————————-+——–+———-+————————————+
我們可以看到Msg_test表項的輸出信息」ok」,表名已經成功修復受損表。
2用mysql內建命令mysqlcheck來修復
當mysql服務在運行時,也可以用mysql內建命令mysqlcheck來修復。
語法:mysqlcheck -r 資料庫名 表名 -uuser -ppass
%mysqlcheck -r sports_results mytable -uuser -ppass
sports_results.mytable OK
利用mysqlcheck可以一次性修復多個表。只要在資料庫名後列出相應表名即可(用空格隔開)。或者資料庫名後不加表名,將會修復資料庫中的所有表,例如:
%mysqlcheck -r sports_results mytable events -uuser -ppass
sports_results.mytable OK
sports_results.events OK
%mysqlcheck -r sports_results -uuser -ppass
sports_results.mytable OK
sports_results.events OK
3用myisamchk修復
用這種方式時,mysql服務必須停掉,或者所操作的表處於不活動狀態(選項skip-external-locking沒被使用)。記著一定要在相關.MYI文件的路徑下或者自己定義其路徑。
語法:myisamchk [選項] [表名]
下面是其選項和描述
–backup, -B 在進行修復前作相關表得備份
–correct-checksum 糾正校驗和
–data-file-length=#, -D # 重建表時,指定數據文件得最大長度
–extend-check, -e 試圖去恢復每個數據行,會產生一些垃圾數據行,萬般無奈的情況下用
–force, -f 當遇到文件名相同的.TMD文件時,將其覆蓋掉。
keys-used=#, -k # 指定所用的keys可加快處理速度,每個二進位位代表一個key.第一個key為0
–recover, -r 最常用的選項,大多數破壞都可以通過它來修復。如果你的內存足夠大,可以增大參數sort_buffer_size的值來加快恢復的速度。但是遇到唯一鍵由於破壞而不唯一 的表時,這種方式不管用。
–safe-recover -o 最徹底的修復方式,但是比-r方式慢,一般在-r修復失敗後才使用。這種方式讀出 所有的行,並以行為基礎來重建索引。它的硬碟空間需求比-r方式稍微小一點,因 為它沒創建分類緩存。你可以增加key_buffer_size的值來加快修復的速度。
–sort-recover, -n mysql用它類分類索引,儘管結果是臨時文件會非常大
–character-sets-dir=… 包含字符集設置的目錄
–set-character-set=name 為索引定義一個新的字符集
–tmpdir=path, -t 如果你不想用環境變數TMPDIR的值的話,可以自定義臨時文件的存放位置
–quick, -q 最快的修復方式,當數據文件沒有被修改時用,當存在多鍵時,第二個-q將會修改 數據文件
–unpack, -u 解開被myisampack打包的文件
myisamchk應用的一個例子
% myisamchk -r mytable
– recovering (with keycache) MyISAM-table 『mytable.MYI』
怎麼恢復mysql資料庫怎麼恢複數據
簡單情況下:進入原來mysql安裝路徑下的data文件夾下,找到相應的庫和ibdata1,進行copy,就可回復原來的數據。
複雜情況下:
從另一台機上把MySQL資料庫的mysql文件夾拷貝到本地機上,目的是恢複本地機對數據的訪問和操作。經過如下幾種情況的操作。
1. 在本地重裝MySQL(安裝目錄D:\Program Files\MySQL\MySQL Server 5.0),直接把mysql文件夾拷貝至D:\Program Files\MySQL\MySQL Server 5.0\。結果,失敗:資料庫連接錯誤。
2. 卸載後重裝MySQL,將D:\Program Files\MySQL\MySQL Server 5.0\下的數據備份,只把mysql\data文件夾全部內容拷貝到D:\Program Files\MySQL\MySQL Server 5.0\data下。結果,失敗:資料庫連接錯誤。將備份的數據還完覆蓋。結果,失敗,還是連接不上資料庫。
3. 卸載後重裝MySQL,將mysql\data文件夾里的cf1,last文件夾(這兩個是原來MySQL里的資料庫)拷貝進D:\Program Files\MySQL\MySQL Server 5.0\data。連接成功,在Navicat for MySQL里看到資料庫cf1和last,但是不能訪問,因為數據全為零。明白了原來data里以資料庫命名的文件存儲的是資料庫的表結構,不是元數據。下一步,把data文件夾里的ibdata1文件(3.4G大,明顯存儲了元數據)拷貝到D:\Program Files\MySQL\MySQL Server 5.0\data里,代替原來的ibdata1文件。重啟電腦,打開Navicat for MySQL,連接成功,數據可以訪問操作。
至此,操作終於成功。其實當初在那台機上把數據導出來,而不是現在直接把文件夾mysql複製過來會更容易恢復。但那台機已經重裝了系統,也就是說MySQL失效了。
如何解決Can t connect to mysql server on localhost 錯誤
解決辦法:
第一步
刪除c:\windows\下面的my.ini
第二步
打開c:\mysql\bin\winmysqladmin.exe 輸入用戶名 和密碼
第三步 在dos下 輸入 mysqld-nt -remove 刪除服務
在接著輸入 mysqld-nt -install
第四步 輸入mysql 啟動成功。
其它可參考的方法:
1.看看hosts文件中localhost是不是指向127.0.0.1
2.如果是沒啟動mysql服務,則可運行net start mysql。
3.一些相關命令:
mysqld-nt –install #啟動Mysql
mysql #運行Mysql
mysql -h ipAddress -u username -p
或者:直接去bin里點mysqld.exe或mysqld-nt.exe,看下它的進程能否正常運行,如不行,再去控制面板,服務里去啟動它,看下是什麼錯誤。如果不行,就在添加刪除里刪去mysql,然後再重裝mysql,一般都能解決問題,可以在安裝前備份一下DATA。
Error: Can’t connect to MySQL server on ‘localhost’ (10061)
Errno.: 2003
錯誤編號:2003
問題分析:
無法連接到 MySQL 伺服器,可能的情況為:
1、MySQL 服務沒有啟動,一般是在異常的情況下 MySQL 無法啟動導致的,比如無可用的磁碟空間,my.ini 里 MySQL 的 basedir 路徑設置錯誤等;
2、MySQL 伺服器資源緊張,導致無法連接。
解決方法:
1、如果是虛擬主機用戶(購買的空間),則聯繫空間商檢查 MySQL 是否正常啟動,並確認 MySQL 的配置信息(是否為 localhost);
2、如果是獨立主機用戶(擁有管理主機許可權),則按下面步驟檢查:
1)檢查磁碟空間是否還有剩餘可用空間,盡量保持有足夠的磁碟空間可用。
2)檢查 my.ini 里的 basedir (MySQL 安裝地址) 和 datadir (數據目錄存放地址)等參數設置是否正確,然後重新啟動下 MySQL 服務。
還有一種方法是將伺服器的windows補丁。
微軟9月9日發布了TCP/IP更新補丁(KB967723),如果伺服器開啟自動更新或者有自動更新軟體下載更新了這個補丁,那麼就會出現這個問題。
有人可能會問,為什麼9號出現的補丁,到現在才發現問題?
大家都知道,伺服器不是每天都重啟的,有的伺服器可能一個月或者一年半載重啟一次,有的可能在9月9日以後重啟過伺服器,所以補丁生效了(個人這麼認為)。
補丁卸載方法:登錄伺服器,進入控制面板 — 添加和刪除程序 — (勾選上方的「顯示更新」)
在裡面可以看到更新的KB967723這個補丁,然後就想卸載普通軟體一樣卸載,卸載中會提示,如果卸載可能導致程序運行出錯,沒關係,選擇「是」,繼續卸載。
卸載完成後程序伺服器,一切正常!
至於該補丁修補什麼漏洞,卸載後是否會出現伺服器安全隱患,這個先不說,要MYSQL正常運行,臨時的解決辦法只有如此。
還有種情況下,可以這樣解決
Discuz! info: Can not connect to MySQL server
Time: 2007-11-13 6:25pm
Script: /bbs/index.php
Error: Can’t connect to MySQL server on ‘localhost’ (10061)
Errno.: 2003
Similar error report has beed dispatched to administrator before.
正常情況下原因如下:
網站論壇訪問量過大,資料庫連接超過最大連接數.MYSQL資料庫服務停止了.
解決方法(針對WIN系統):
1, 首先到系統服務裡面找到MYSQL服務並啟動MYSQL服務.
2, 到MYSQL安裝目錄找到MY.INI文件,打開MY.INI查找max_connections 修改連接數為1000 重啟IIS與MYSQL服務.
window 下
命令行下輸入:
cd E:\mysql\bin
mysqladmin -u root password 密碼
mysql -u root -p
Enter password: 密碼
便可以
找到了根本原因,在此涼一下:
導致此問題的根源在:因為給mysql的root設置了密碼,而不是最初安裝好時的密碼為空,所以使用
mysqladmin version這樣子不行了,必須這樣子:mysqladmin -uroot -p version,回車後按照提示要求輸入
root密碼即可成功運行命令。
第一種方法其實就是在不知道root密碼的情況下的一種解決辦法,那樣子啟動不用密碼即可進mysql 裡面並進行root密碼的修改,解決忘記了root密碼的問題。
輸入命令「mysqladmin -u root password 的密碼」作用是修改root用戶的密碼,這條命令能夠不經提示輸入原密碼而成功執行,也說明了原密碼是空。之後使用修改後的密碼自然能夠成功登錄。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/159804.html