国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL常見問題解答及技巧

2024-07-24 12:55:00
字體:
來源:轉載
供稿:網友
    常見問題集錦

 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: '[email protected]_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關鍵詞使得老記錄用一個新記錄替代。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 木兰县| 江门市| 泸州市| 漾濞| 甘泉县| 丽水市| 加查县| 普定县| 东城区| 仲巴县| 泗阳县| 南安市| 福州市| 东光县| 锦屏县| 沛县| 札达县| 中阳县| 叙永县| 固安县| 虹口区| 荥经县| 旅游| 多伦县| 枣强县| 青冈县| 博湖县| 左云县| 离岛区| 海安县| 大同县| 佛坪县| 巴东县| 湘潭县| 滁州市| 西宁市| 石狮市| 襄樊市| 华池县| 虎林市| 水城县|