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