1. 程式人生 > >【MySQL】常見錯誤與常用命令的集錦

【MySQL】常見錯誤與常用命令的集錦

【背景介紹】     在使用SQL Server資料庫期間,想必大家一定都有過解決各種問題的經歷了,很多時候,都會在大家的部落格中看到問題與解決方案。現在開發使用的是MySQL資料庫,現在來看,發現自己在MySQL中的經歷越來越多。前兩天,自己電腦的MySQL資料庫出問題了,折騰了我好幾個小時~~     這篇部落格就將把之前遇到的和這次遇到的錯誤記錄下來,以後也可以更好更快的找到解決辦法吧。 【常見錯誤】
  • (1) windows mysql提示:1045 access denied for user'root'@'localhost' using password yes
    因為在解決這個問題的時候,需要用到my.ini檔案,安裝完後並沒有這個檔案,從網上查的是可以自己建立,於是我就自己建立了一個這樣的檔案。內容如下:
    # For advice on how to change settings please see
    # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
    # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
    # *** default location during install, and will be replaced if you
    # *** upgrade to a newer version of MySQL.

[mysqld]

    # Remove leading # and set to the amount of RAM for the most important data
    # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
    # innodb_buffer_pool_size = 128M

    # Remove leading # to turn on a very important data integrity option: logging
    # changes to the binary log between backups.
    # log_bin

    # These are commonly set, remove the # and set as required.
 basedir = E:\MySQL\mysql-5.6.24-winx64
 datadir = E:\MySQL\mysql-5.6.24-winx64\data
    # port = 8099
    # server_id = sa

    # Remove leading # to set options mainly useful for reporting servers.
    # The server defaults are faster for transactions and fast SELECTs.
    # Adjust sizes as needed, experiment to find the optimal values.
    # join_buffer_size = 128M
    # sort_buffer_size = 2M
    # read_rnd_buffer_size = 2M 

    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    skip-grant-tables
    default-character-set=utf8
   這個問題就解決了,在加上這個檔案後,我嘗試建立新使用者,又出現了一個新的問題。
  • (2) ERROR 1364(HY000):Field 'ssl_cipher' doesn't have a default value 
    我照著部落格的內容將my.ini檔案中的一句話改了:
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 修改為 sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"     此後,我也成功建立了使用者。
    這兩個問題解決了,我在學習網上商城的時候也就一切順利。
    但前兩天,重啟電腦後,資料庫又出現了下面的一系列問題了。
  • (3) 啟動MySQL服務,出現錯誤1067:
    出現這個問題,我採取的辦法是方法二,將my.ini檔案刪除,這樣MySQL服務就可以正常啟動了。
    但將my.ini檔案刪除後,一直出現1045的錯誤,就這樣,兩個問題好像死迴圈了,一直都解決不了。無奈之下,解除安裝了mysql,重新安裝了一次。     在這裡解除安裝/安裝的過程就不說了,下面繼續看幾個遇到的MySQL的錯誤:
  • (4) 2003-Can't connect to MySQL server on 'localhost'(10061)
    出現這個錯誤的原因,是MySQL服務沒有啟動,可輸入service.msc視窗命令,進入到服務管理,將MySQL服務啟動就行。或者使用mysql命令啟動也可以。
  • (5) Host "localhost" is not allowed to connect to mysql server
這是在本地都不能登入到MySQL資料庫。     首先,停止mysql服務:sc stop mysql     然後,mysqld --skip-grant-tables     另開一個終端,繼續,mysqlcheck --check-upgrade --all-databases --auto-repair     再輸入mysql,終於提示連線成功了。  本地可以連線成功了,下面別人在遠端自己的資料庫時,可能又會遇到1045的錯誤。
  • (6) Access denied for user 'root'@'localhost' (using password:YES)
 解決方法:    方案一:改表 use [databasename]; select user,host,password from user; update user set host = '%' where user='root';    方案二:授權 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; FLUSH   PRIVILEGES;(任何主機都可以連線到mysql伺服器)
  • (7) 中文亂碼問題
    在做ITOO專案的時候,從程式碼中直接插入記錄到資料庫中,中文便是亂碼了。第一版思修考試的時候,時間緊張,沒有完全解決這個問題,部分可以匯入中文,部分又匯入的是亂碼。在接下來的這一版開發中,終於找到了問題的根源。      亂碼緣由: 不同的編碼格式會導致同一字元,在不同字符集下的編碼會不同。同樣同一編碼在不同的字符集中程式碼的字元也不相同。當你的MySQL返回的字串的編碼格式(字符集)與你的客戶工具程式(mysql, php, query browser, ...)當前使用的字符集不同時,就會造成亂碼。    亂碼後需要檢查的資訊: 1. 資料庫表中欄位的字符集設定 。 show create table TableName 或 show full columns from tableName 2. 當前聯接系統引數   show variables like 'char%'    提示: 中文,應確保表中該欄位的字符集為中文相容,具體包含以下四種:
 big5     | Big5 Traditional Chinese
 gb2312   | GB2312 Simplified Chinese
 gbk      | GBK Simplified Chinese
 utf8     | UTF-8 Unicode
   亂碼原因 上圖是我在檢查上面兩條資訊的結果,很明顯,所連線的資料庫設定的字符集為latin1,所以,匯入資料的時候就變成亂碼了。    解決方案:     用Navicat軟體開啟對應的資料庫,將其資料庫屬性的字符集設定為utf8. 【錯誤總結】
    很多情況下,都遇到1045的錯誤,在查資料的過程中,發現普遍的原因有以下兩點:
    1.可能是mysql使用者表中存在不完整的記錄;     2.可能是沒有給mysql使用者表中的使用者授予許可權。
因為mysql資料庫不像sql server資料庫那樣,可以在視覺化的介面進行操作,在mysql中,各種操作都是需要通過各種命令去完成的,下面,就總結一些常用的命令,以便提高後期的工作效率。
  • 服務啟動與停止
    net stop mysql
    net start mysql
  • 登入mysql
    mysql -r root -p 回車 輸入密碼
  • 顯示資料庫列表
    show databases;
  • 選擇資料庫和顯示資料表
    use mysql;
    show tables;
  • 建庫、刪庫
    create database dbName;
    drop database dbName;
  • 備份
    mysqldump -u [資料庫使用者名稱] -p [要備份的資料庫名稱]>[備份檔案的儲存路徑]  例子:mysqldump -u root -p test>E:\tt.sql
  • 還原
    mysql -u root -p<[備份檔案的儲存路徑] 【學習心得】
1.資料庫的備份很重要。因為不知道什麼時候,什麼原因,自己的資料庫就不能用了,等到發生了,後悔也來不及了。 2.沒有什麼解決不了的問題,最壞的辦法也就是重頭再來。遇到問題了,第一次感覺還好,但遇到了一些沒在自己意料之中的問題,遇到了以前的解決方案不再適用這一次的問題,心情就有些不一樣了。最後,我還是自己把資料庫給弄好了,事實證明,不要放棄,最壞的辦法也就是重頭再來。
3.學習是一個漫長的、不斷補充、不斷積累的過程。實際上,解決中文亂碼的問題是後來補充的,因為一直都在使用mysql,一直處在不斷學習地過程中,後面的學習或者偶爾的遇見,才使得自己把之前的問題解決了,所以,學習前後是一個互為補充的階段。