亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

MySQL常見問題解答及技巧

添加時間:2013-6-24 16:23:31  添加: 思海網絡 
 常見問題集錦

 MySQL總是崩潰

 首先你應該試著找出問題mysqld守護進程是否死掉或你的問題是否與你的客戶有關。你可以用mysqladmin version檢查你的mysqld服務器正常執行了多長時間,如果mysqld死了,你可以在文件“mysql-data-directory/'hostname'.err”中找到其原因。


 使用MySQL時的一些常見錯誤

  MySQL server has gone away

 常見的原因是服務器超時了并且關閉了連接。缺省地,如果沒有事情發生,服務器在 8個小時后關閉連接。你可在啟動mysqld時通過設置wait_timeout變量改變時間限制。

 如果mysqld得到一個太大或不正常的包,它認為客戶出錯了并關閉連接。


  Can't connect to [local] MySQL server

 通常意味著沒有一個MySQL服務器運行在系統上或當試圖連接mysqld服務器時,你正在使用一個錯誤的套接字文件或TCP/IP端口。

 檢查(使用ps)服務器上是否有一個名為mysqld的進程啟動

 如果一個mysqld進程正在運行,可以通過嘗試這些不同的連接來檢查服務器

shell> mysqladmin version

shell> mysqladmin variables

shell> mysqladmin -h `hostname` version variables

shell> mysqladmin -h `hostname` --port=3306 version

shell> mysqladmin -h 'ip for your host' version

shell> mysqladmin --socket=/tmp/mysql.sock version

 注意hostname命令使用反引號“`”而非正引號“'”;這些導致hostname輸出(即,當前主機名)被代替進mysqladmin命令中。

  Host '...' is blocked錯誤

Host 'hostname' is blocked because of many connection errors.

Unblock with 'mysqladmin flush-hosts'

 這意味著,mysqld已經得到了大量(max_connect_errors)的主機'hostname'的在中途被中斷了的連接請求。在max_connect_errors次失敗請求后,mysqld認定出錯了(象來字一個黑客的攻擊),并且阻止該站點進一步的連接,直到某人執行命令mysqladmin flush-hosts。

缺省地,mysqld在10個連接錯誤后阻塞一臺主機。你可以通過象這樣啟動服務器很容易地調整它:

shell> safe_mysqld -O max_connect_errors=10000 &

  Too many connections錯誤

意味著已經有max_connections個客戶連接了mysqld服務器。

如果你需要比缺省(100)更多的連接,那么你應該重啟mysqld,用更大的 max_connections 變量值。

  Out of memory錯誤

mysql: Out of memory at line 42, 'malloc.c'

mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k)

ERROR 2008: MySQL client ran out of memory

  注意,錯誤指向了MySQL客戶mysql。這個錯誤的原因很簡單,客戶沒有足夠的內存存儲全部結果。

  首先檢查你的查詢是否正確

  Packet too large錯誤

  一個MySQL客戶或mysqld服務器得到一個比max_allowed_packet個字節長的包

  可以通過用mysql --set-variable=max_allowed_packet=8M指定一個更大的緩沖區來啟動客戶程序。


  The table is full錯誤

  這個錯誤發生在內存臨時表變得比tmp_table_size字節大時。


  Commands out of sync in client錯誤

  正在以錯誤的次序調用客戶函數!


  Ignoring user錯誤

Found wrong password for user: 'some_user@some_host'; Ignoring user

  這意味著在mysqld啟動時或在它再次裝載權限表時,它在user表中找到了一個有一個無效口令的條目。結果,條目簡單地被權限系統忽略。

  Table 'xxx' doesn't exist錯誤

  數據庫和表名件是區分大小寫的!可以用SHOW TABLES檢查你在當前數據庫中有哪個表。

  從一個文本文件運行SQL命令

  可以把SQL命令放在一個文件中并且告訴mysql從該文件讀取其輸入:創造一個文本文件“text_file”,它包含要執行的命令。然后如下調用mysql:

shell> mysql database < text_file

  或

shell> mysql < text_file

  啟動有USE db_name語句的文本文件。

  怎樣重新設置一個忘記的口令

  如果忘記了MySQL的root用戶的口令,可以使用如下方法恢復:

  通過發送一個kill(不是kill -9)到mysqld服務器來關閉mysqld服務器。pid 被保存在一個.pid文件中,通常在MySQL數據庫目錄中:

  kill `cat /mysql-data-directory/hostname.pid`

  你必須是一個UNIX root用戶或運行服務器的相同用戶做這個。

  使用--skip-grant-tables選項重啟mysqld。

  用mysql -h hostname mysql連接mysqld服務器并且用一條GRANT命令改變口令。見7.26 GRANT和REVOKE句法。也可以用mysqladmin -h hostname -u user password 'new password' 進行。

  用mysqladmin -h hostname flush-privileges或用SQL命令FLUSH PRIVILEGES來裝載權限表。

  使用DATE列的問題

  DATE值的格式是'YYYY-MM-DD'。

  改變一張表中列的順序

  在一個應用程序中,應該決不基于他們的位置使用SELECT * 檢索列,因為被返回的列的順序永遠不能保證;對數據庫的一個簡單改變可能導致應用程序相當有戲劇性地失敗。

  可以使用如下方法改變:

  以正確的列順序創建一張新表。

  執行INSERT INTO new_table SELECT fields-in-new_table-order FROM old_table.

  刪除或改名old_table。

  ALTER TABLE new_table RENAME old_table。

  數據庫復制

  MySQL(至今)沒有數據庫復制,但是有一些如何實現的信息。

  復制一個數據庫最一般的方法是使用更新日志。

  數據庫備份

  為了得到一個一致的備份,在相關的表上做一個LOCK TABLES。你只需一個讀鎖定;當你在數據庫目錄中做文件的一個拷貝時,這允許其他線程繼續查詢該表。如果你想要做一個SQL級的備份,你可以SELECT INTO OUTFILE。

  備份一個數據庫的另一個方法是使用mysqldump程序:

  為你的數據庫做一個完整的備份:

shell> mysqldump --tab=/path/to/some/dir --opt --full

 
  你也可以簡單地拷貝所有的表文件(“*.frm”、“*.MYD”和“*.MYI”文件),只要服務器不在更新任何東西。


  停止mysqld如果它正在運行,然后以--log-update選項啟動它。你將得到一個名為“hostname.n”形式的日志文件, 這里n是隨著你每次執行mysqladmin refresh或mysqladmin flush-logs、FLUSH LOGS語句、或重啟服務器而遞增的一個數字。這些日志文件向你提供了在你執行mysqldump處后面進行的復制數據庫改變的所需信息。

  如果你必須恢復一些東西,嘗試首先用myisamchk -r恢復你的表。這應該處理所有情況的99.9%。如果myisamchk失敗,嘗試下列過程:

  恢復原來的mysqldump備份

  執行下列命令以再次運行更新日志中的更改:

shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql


  ls被用來以正確的順序得到所有的日志文件。


  你也可以與SELECT * INTO OUTFILE 'file_name' FROM tbl_name做有選擇的備份并且用LOAD DATA INFILE 'file_name' REPLACE ...恢復。為了避免重復記錄,在表中你需要一個PRIMARY KEY或UNIQUE鍵。當在唯一鍵值上一個新記錄與一個老記錄重復時,REPLACE關鍵詞使得老記錄用一個新記錄替代。

關鍵字:MySQL、mysqldump、服務器

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站