最直接簡單的方法是:
到數(shù)據(jù)庫高級管理,也就是PHPMYADMIN里面,全選數(shù)據(jù)庫點(diǎn)擊修復(fù)即可,如果你不知道數(shù)據(jù)庫怎么進(jìn)或者PHPMYADMIN怎么進(jìn),聯(lián)系你的空間商或者懂的朋友,讓他幫你修復(fù)即可解決。
今天discuz論壇出現(xiàn)問題,如下:
Discuz! info: MySQL Query Error
Time: 2009-9-14 4:30pm
Script: /bbs/index.php
SQL: SELECT t.*, f.name FROM [Table]threads t, [Table]forums f WHERE t.fid<>'0' AND f.fid=t.fid AND f.fid not in (125) AND t.displayorder not in (-1,-2) ORDER BY t.dateline DESC LIMIT 0, 10
Error: Error writing file '/tmp/MYAmg92O' (Errcode: 28)
Errno.: 3
到 http://faq.comsenz.com 搜索此錯誤的解決方案
按照個人經(jīng)驗(yàn),這是第一次遇到的問題,應(yīng)該跟臨時目錄tmp有關(guān)。
操起g.cn開始搜索,得出理論性結(jié)果如下:
解決方法如下:
而實(shí)際操作中,我先采用了重啟服務(wù)器(自有vps服務(wù)器,linux系統(tǒng)),系統(tǒng)啟動完成后依次啟動php-cgi、nginx、mysql,重新打開論壇,一切正常。過了2個小時,論壇又出現(xiàn)那個問題,從問題上看是寫入數(shù)據(jù)出錯。檢查臨時目錄權(quán)限,一切正常。不經(jīng)意間想起這個vps只有5G空間,linux系統(tǒng)占用1.5G,該論壇圖片甚多,莫非……
鍵入如下命令:
[root@centos www]# df -m
Filesystem?????????? 1M-blocks????? Used Available Use% Mounted on
/dev/sda1???????????????? 5040????? 4784???????? 0 100% /
看來是服務(wù)器空間被吃完了!馬上刪除一些沒用的數(shù)據(jù),估計是這幾天論壇圖片又傳了好多,導(dǎo)致空間吃緊了!下一步就要去升級該vps了!硬件問題,這也實(shí)在不是我能解決的了!
而網(wǎng)上搜索來的答案中也并非沒有用,比如修復(fù)表的操作,看到得出錯是某個表出現(xiàn)問題提示需要修復(fù),如下:
Error: Table '.\discuz\[Table]threads' is marked as crashed and should be repaired
而經(jīng)過phpmyadmin無法修復(fù)的話,可以考慮上傳discuz官方的tools進(jìn)行修復(fù)試試看。當(dāng)然,一切操作記得盡可能做個備份,以防萬一!
可以看到,問題出在connect函數(shù),即連接問題。
出現(xiàn)數(shù)據(jù)庫連接問題,一般是這幾種情況:
直接執(zhí)行service mysql status
可以看到mysql服務(wù)的運(yùn)行狀態(tài),如果看到下面的結(jié)果,說明數(shù)據(jù)庫沒有起來,請手動重啟數(shù)據(jù)庫。
曾經(jīng)出現(xiàn)過某些同學(xué),不小心將/etc/hosts
中localhost
解析到127.0.0.1
的那行刪掉了,而config.inc.php
中host
的配置是localhost
,導(dǎo)致php鏈接數(shù)據(jù)庫的時候,無法解析localhost
,導(dǎo)致連接失敗。大家也可以看看
解決辦法:
如果您的服務(wù)器是獨(dú)立主機(jī)強(qiáng)烈建議使用命令行方式進(jìn)行修復(fù):
修復(fù)前將mysql服務(wù)停止。
如果是Win主機(jī),打開命令行方式,然后進(jìn)入到mysql的/bin目錄。
執(zhí)行myisamchk -r d:\mysql\data\discuz\*.MYI
其中d:\mysql\data\discuz\換成您的數(shù)據(jù)庫所在路徑。
如果是類Unix主機(jī),直接使用myisamchk -r 數(shù)據(jù)庫目錄\*.MYI
即可。
大概說一下檢查的方法
檢查語法錯誤,可以用echo輸出變量,看看你要插入的數(shù)據(jù)是否出現(xiàn)問題
用mysql_error檢查sql語句執(zhí)行錯誤,echo出來
檢查數(shù)據(jù)庫建立的是否正確,是否和插入語句一一對應(yīng),NOT NULL部分要注意
檢驗(yàn)mysql_query($sql,$conn);的返回值,echo出來,看看是否正常
如果以上方法都找不出來,還有可能是
你電腦里裝了多個mysql,端口改過嗎(比如你之前學(xué)習(xí)mysql,安裝了一個,后來又安裝一個wamp學(xué)php,那這兩個端口可能會沖突,檢查一下,在配置文件my.ini里Ctrl+F查找3306或者port,把端口全改掉,這個時候你的php的配置文件php.ini里還有一個默認(rèn)訪問端口mysql.default_port = 3306,也改掉)
真的沒有成功嗎?一般mysql數(shù)據(jù)庫操作是用mysql_affected_rows()來檢測操作是否成功把。
如果確定數(shù)據(jù)庫中沒有這條數(shù)據(jù),在mysql里直接操作沒問題說明表名和列名沒問題,但庫名確定沒弄錯嗎?
字符編碼不對,插入數(shù)據(jù)應(yīng)該只會是亂碼,也不會插不進(jìn)去。
數(shù)據(jù)沒重復(fù)吧= =
真的沒有成功嗎?一般mysql數(shù)據(jù)庫操作是用mysql_affected_rows()來檢測操作是否成功把。
如果確定數(shù)據(jù)庫中沒有這條數(shù)據(jù),在mysql里直接操作沒問題說明表名和列名沒問題,但庫名確定沒弄錯嗎?
字符編碼不對,插入數(shù)據(jù)應(yīng)該只會是亂碼,也不會插不進(jìn)去。
數(shù)據(jù)沒重復(fù)吧= =
我在“UTF8字符集的表怎么直接轉(zhuǎn)UTF8MB4”一文中介紹了如何把表字符集由UTF8直接轉(zhuǎn)換成UTF8MB4的幾種方法。
1、只修改字符集(使用默認(rèn)校驗(yàn)集)
yejr@imysql.com> alter table t1 convert to character set utf8mb4
2、同時修改表字符集和校驗(yàn)集
yejr@imysql.com> alter table t1 convert to character set utf8mb4 collate utf8mb4_bin;
3、只修改某列的字符集
yejr@imysql.com> alter table t1 modify c1 varchar(20) character set utf8mb4 not null default ‘’
4、同時修改某列的字符集和校驗(yàn)集
yejr@imysql.com> alter table t1 modify c1 varchar(20) character set utf8mb4 collate utf8mb4_unicode_ci not null default ‘’
好了,有個字符集為UTF8MB4的表中想存儲各類不同字符集的文本,有哪些注意事項(xiàng)億避免亂碼?
如果是通過WEB接口存儲數(shù)據(jù),則建議在browser端、server端全都采用UTF8字符集,MySQL Server端采用UTF8/UTF8MB4均可(針對大多數(shù)文本,其實(shí)UTF8字符集就足夠存儲的了)。