หน้าเว็บ

วันจันทร์ที่ 21 กรกฎาคม พ.ศ. 2551

ปัญหา ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

วันนี้พยายามจะลง MySQL5.0 บน FreeBSD 7 แต่แล้วก็ติดปัญหาคือ
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

ซึ่งพยายามค้นหาคำตอบ แต่ก็ไม่เจอคำตอบที่ใช้ได้กับเคสของผมเลยซักอัน ดังนั้นจะขอเล่าอาการก่อน

ผมลง MySQL5.0 ด้วย ports โดย
localhost# cd /usr/ports/databases/mysql50-server
localhost# make -D BUILD_OPTIMIZED install clean
localhost# rehash

แล้วก็สั่ง script mysql_install_db
localhost# mysql_install_db --user=mysql
แล้วก็เริ่มเปิด daemon ด้วย
localhost# mysqld_safe &

พอมาถึงขั้นตอนนี้ อ่านในหลายๆสำนักเค้าจะบอกให้ตั้งค่า root password โดยสั่ง
localhost# mysqladmin -u root password 'rootpassword'
แต่พอผมสั่งปุ๊ปก็เกิด error ขึ้นมาว่า
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

หรือว่าแค่สั่ง mysql เพื่อเข้า client ก็จะไม่ได้เช่นเดียวกัน
ก็เลยลองปิด daemon ทิ้งก่อนด้วย
localhost# killall -9 mysqld
แล้วเข้าไปใหม่แบบไม่ต้องใส่ password ชั่วคราวด้วย
localhost# mysqld_safe --skip-grant-tables &
แล้วเข้า mysql client ทันทีด้วย
localhost# mysql
คราวนี้เลยลองสั่งคำสั่ง
mysql> use mysql
mysql> SELECT user, password FROM user

เพื่อจะดูว่าค่า default password ของ root มันคืออะไร
แต่ปรากฎว่าไม่มี user ปรากฎขึ้นมาเลยซักคนเดียว

สรุป มันไม่ได้สร้าง user root ขึ้นมาให้

วิธีแก้ ผมใช้การ add user root เข้าไปเองเลยด้วยคำสั่ง
mysql> insert into user (host, user, password, select_priv, insert_priv
, update_priv, delete_priv, create_priv, drop_priv, reload_priv
, shutdown_priv, process_priv, file_priv, grant_priv, references_priv
, index_priv, alter_priv, show_db_priv, super_priv, create_tmp_table_priv
, lock_tables_priv, execute_priv, repl_slave_priv, repl_client_priv
, create_view_priv, show_view_priv, create_routine_priv, alter_routine_priv
, create_user_priv) values('localhost', 'root', PASSWORD('rootpassword')
, 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'
, 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

(มี Y ทั้งหมด 26 ตัว จริงๆคงมีวิธีที่ grant all privileges แต่ผมยังทำไม่เป็น - - " )
แล้วก็
mysql> FLUSH PRIVILEGES;
เป็นอันเรียบร้อย แล้ว
mysql> exit
ออกมา แล้วสั่ง restart mysql ด้วย
localhost# /usr/local/etc/rc.d/mysql-server restart
คราวนี้พอสั่งเพื่อเข้าไปใช้งานใหม่ก็จะสามารถใช้ client โดยเป็น root พร้อมกับ password ที่ได้ตั้งเอาไว้ได้แล้วด้วยคำสั่ง
localhost# mysql -u root -p
และใส่ password ที่เราตั้งไว้เป็นอันใ้ช้ได้

แต่ว่าก็ยังไม่แน่ใจว่าเป็นวิธีแก้ที่ถูกต้องรึเปล่าแต่พอทำให้ถูๆไถๆไปได้ซักระยะ

ระบบที่ใช้ทดสอบ
OS: FreeBSD 7.0
MySQL: MySQL5.0-server (install by port)

3 ความคิดเห็น:

ไม่ระบุชื่อ กล่าวว่า...

เจอเหมือนกันครับ
ผมมาอ่านบทความนี้เลย
ทดลองคำสั่งสุดท้าย
>>mysql -u root -p
ตามด้วย password ตอนติดตั้ง mysql ครั้งแรก
ก็เข้าได้ครับ
ขอบคุณครับได้ไอเดียจากที่นี่แหละ

Unknown กล่าวว่า...

ขอบคุณมากครับ ผมลองประยุกต์ใช้บน window ก็สามารถแก้ไขได้ครับ

ไม่ระบุชื่อ กล่าวว่า...

ผมก็เจอปัญหาเดียวกันเลยครับ แก้ตั้งนานไม่ออก พอมาเจอวิธีแก้ของคุณก็เลยกลับมาใช้ได้เลยครับ ขอบคุณครับ