一般在數(shù)據(jù)庫在突然斷電,強行關閉數(shù)據(jù)庫軟件,存儲過程異常等等情況下,數(shù)據(jù)庫很容易出現(xiàn)報錯,也是計算機維護員很頭疼的事。今天筆者同大家分享關于Mysql數(shù)據(jù)庫報錯故障和數(shù)據(jù)庫修復的方法總結。
1. phpMyAdmin連接mysql出現(xiàn)錯誤
使用phpMyAdmin 連接MySql數(shù)據(jù)庫時出現(xiàn)如下錯誤:#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client
錯誤原因:原因是因為你使用的mysql服務器版本中使用了新的密碼驗證機制,這需要客戶端的版本要在4.0以上,原來的密碼函數(shù)被改為old_password ();,這樣使用Password()生成的密碼在舊的版本上的客戶端就不好使了,而PHP中的MYSQL客戶端都是3.23的(當然,mysqli的擴展除外),問題就在這了。這種問題只在Mysql 4.1.x以上的版本才會出現(xiàn)的。
修復辦法:a) 升級mysql 客戶端的版本;b) 也可以在服務器上用old_password函數(shù),將用戶的密碼重新設置一下,具體的方法是:mysql>set password for 'root'@'localhost'=old_password('123'); 然后就可以用舊版本的客戶端來連接了。
2. mysql 啟動指定my.cnf文件路徑
要使用指定的my.cnf文件,而不用默認的/etc/my.cnf文件,可以在啟動時,在mysqld_safe 后加上參數(shù)--defaults-file=/usr/local/server/mysql2/etc/my.cnf,但是要注意的是,主參數(shù)必需緊接著mysqld_safe 后面,如果做第二個以后的參數(shù)加入時,則會出現(xiàn)如下錯誤:/usr/local/server/mysql/libexec/mysqld: unknown variable 'defaults-file=/usr/local/server/mysql2/etc/my.cnf' 且服務器啟不來。
3. 當啟動innodb錯誤
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!
100204 15:24:39 [ERROR] Plugin 'InnoDB' init function returned error.
出現(xiàn)這個錯誤的原因是$datadir下的ibdata1和ib_logfile*文件的大小與my.cnf指定的大小不一至造的,可以將這幾個文件刪除掉,然后重啟mysql,讓其重新生成這些文件。
4. mysql建立,查看和刪除自定義函數(shù)
查看:SHOW FUNCTION STATUS;可以列出某個數(shù)據(jù)庫所弄有的自定義函數(shù) show create function 函數(shù)名; 查出自定義函數(shù)的內(nèi)容;
建立:set global log_bin_trust_function_creators=1 設置上述的變量值為1,否則在建立時會出現(xiàn)如下錯誤:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
這是因為我們啟用了bin-log日志的的原因
Delimiter $$設置語句的分隔符,也就是一個語句的結束符,因為默認情況下,mysql 的語句結束符是; 而我們在建立自定義函數(shù),可能要使用這個;號,所以我們需要將分隔符換成其它們的。,這里換成$$ CREATE DEFINER=`root`@`` FUNCTION `sseq`(seq_name VARCHAR(50)) RETURNS int(11) BEGIN DECLARE value INTEGER; SET value = 0; SELECT current_value INTO value FROM sequence WHERE name = seq_name; RETURN value; END $$ ,建立一個自定義的函數(shù) sseq
執(zhí)行:要執(zhí)行上述函數(shù),可以使用下列方法 select sseq('poi_seq');
刪除:drop function sseq ;
5. mysql建立,查看和刪除過程
建立:delimiter $$
create procedure insert_last(out cnt int)
begin
declare maxid int;
select max(id)+1 into maxid from account;
insert into account(id,name) values(maxid,'hello');
select count(id) into cnt from account;
END$$
查看:show procedure status ;
show create procedure insert_last;
執(zhí)行: call insert_last(@a)
刪除: drop procedure insert_last;
6. 當出現(xiàn)ERROR 1449錯誤
現(xiàn)象:當在系統(tǒng)中執(zhí)行查詢時,特別是執(zhí)行自定義函數(shù)或過程時,出現(xiàn)如下錯誤:ERROR 1449 (HY000): The user specified as a definer ('root'@'') does not exist
原因:系統(tǒng)中不存在root@用戶,而執(zhí)行上述命令時,使用的剛好是root@用戶,所以就報上述錯誤;
修復:執(zhí)行下列語句,建立對應的用戶即可: grant all on *.* to root@% identified by 'admin8*';
7. mysql 指定監(jiān)聽指定的IP地址
默認的情況,mysql 在啟動時會監(jiān)聽本機的所有的IP地址的3306端口,當為滿足某些要求時,可以指定mysql 在啟動時監(jiān)聽指的IP,方法是:在my.cnf文件里的mysqld段里添加bind-address = 122.224.72.119,這樣就可以只監(jiān)聽指定的一個IP了。目前mysql 還不能做做監(jiān)聽多個指定的IP 地址
8. 關于mysql的版本號
以下是關于mysql版本號的含義,例如mysql-5.1.42版本的,其中5 :表示主版本號和文件格式。所有mysql 5系列的都具有相同的文件格式;第二個數(shù)字1:表示發(fā)布的版本號。主版本號和發(fā)布版本號聯(lián)合起來組成發(fā)布序列號;第三個數(shù)字42:表示某個發(fā)布序列里的版本號。這個版本號會隨著每次版本的發(fā)布而增加。通常應該選擇序列里的最近的版本進行使用。每次較小的更新,版本序列號中的最后一個數(shù)字會增加。當有大的新特性或者更新內(nèi)容與前面一個版本不兼容時,第二個數(shù)字會增加的。而當文件格式改變的時候,第一個數(shù)字會增加的。
版本名稱中還可能包含一個后綴來表示發(fā)布版本的穩(wěn)定性的。在發(fā)布的系列版本中有一套后綴來表示穩(wěn)定性改進,這些后綴包括:
Alpha:表示這個版本僅是一個演示版本。已知的bug已經(jīng)被記錄了。大多數(shù)的alpha版本都添加了新的命令和擴展。
Beta:表示這個版本可以用在開發(fā)環(huán)境中。在測試版中,特性和兼容性問題可能已經(jīng)被解決了,但是測試版本中可能會存未標識的bug。且這個版本中的所有API,擴展的結構,SQL語法在beta版本的后續(xù)版本中都不會被改變。
Rc: 表示待發(fā)行版。待發(fā)行版確信是穩(wěn)定的版本,而且在MySQL內(nèi)部進行的測試都通過了,同時,所有已知的運行期的重大Bug都被修正了。然而,這個版本并沒有經(jīng)過長期大范圍的使用,以確認所有的bug都被標識了。
沒有任何后綴:表示這個版本是通用版本(GA)或者產(chǎn)品版本。GA版是穩(wěn)定的版本,并且成功的進行前面幾個版本的過程,而且確信是可靠的,沒有緊急的bug,同時適合應用于生產(chǎn)環(huán)境中。
9. 關于mysql編譯與性能的關系
1. 在linux平臺上,如果編譯成動態(tài)連接的(即沒有使用-static選項),那么要慢13%。但是要注意:為滿足客戶應用的需要,可能還是需要編譯動態(tài)連接的;
2. 對于服務器和客戶端在同一臺機器上的連接,如果使用TCP/IP連接要比使用socket連接性能低7.5%(在unix平臺上,如果連接的主機名用localhost,MySQL默認使用socket文件來連接);
3. 如果使用TCP/IP連接,客戶端和服務器端不在同一臺機器上要比在同一臺機器上慢8%-10%,即使用網(wǎng)卡的速度高于100Mb/s;
4. 使用安全連接(所有數(shù)據(jù)使用內(nèi)部SSL支持的加密)性能要比非安全連接低55%;
5. 在Sun UltraSPARC 平臺上,使用Forte5.0來編譯要比使用gcc3.2編譯后的快4%;
6. 在Sun UltraSPARC平臺上,使用Forte5.0編譯成32模式要比編譯成64模式快4%;
7. 在Linux X86平臺上,使用不帶gcc的框架指針(即不使用-fomit-frame-pointer 或 –fomit-frame-pointer –ffixed-ebp),將會使用mysqld快1%-4%;
10. 設置最大連接數(shù)
1)入MYSQL安裝目錄 打開MYSQL配置文件 my.ini 或 my.cnf查max_connections=100 修改為 max_connections=1000 服務里重起MYSQL即可;
2)MySQL的最大連接數(shù)默認是100客戶端登錄:mysql -uusername -ppassword設置新的最大連接數(shù)為200:mysql> set GLOBAL max_connections=200
以上是關于常見Mysql數(shù)據(jù)庫報錯故障和數(shù)據(jù)庫修復的方法總結,希望對網(wǎng)友有點幫助!