【MySQL】常見錯誤與常用命令的集錦
【背景介紹】 在使用SQL Server數據庫期間,想必大家一定都有過解決各種問題的經歷了,很多時候,都會在大家的博客中看到問題與解決方案。現在開發使用的是MySQL數據庫,現在來看,發現自己在MySQL中的經歷越來越多。前兩天,自己電腦的MySQL數據庫出問題了,折騰了我好幾個小時~~
這篇博客就將把之前遇到的和這次遇到的錯誤記錄下來,以後也可以更好更快的找到解決辦法吧。
【常見錯誤】 (1) windows mysql提示:1045 access denied for user'root'@'localhost' using password yes
參考鏈接:http://blog.csdn.net/so1127/article/details/6619844 因為在解決這個問題的時候,需要用到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
參考博客:http://xiejianglei163.blog.163.com/blog/static/12472762014424048216/
我照著博客的內容將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:
參考鏈接:http://jingyan.baidu.com/article/d5c4b52bee6e69da560dc5ec.html 出現這個問題,我采取的辦法是方法二,將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數據庫。 參考鏈接:http://www.cnblogs.com/ycsfwhh/archive/2011/02/18/1957980.html 首先,停止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,一直處在不斷學習地過程中,後面的學習或者偶爾的遇見,才使得自己把之前的問題解決了,所以,學習前後是一個互為補充的階段。