คู่มือสั้นแต่ละละเอียดนี้จะอธิบายวิธีรีเซ็ตรหัสผ่าน Root ของ MySQL ที่หายหรือลืม โดยใช้ทั้ง Windows และ Linux
พื้นหลัง
เคยลืมรหัสผ่าน Root ของ MySQL ไหม? เป็นเรื่องที่เกิดขึ้นได้แม้จะมีการป้องกันมากแค่ไหน ผลคือคุณถูกล็อกนอก Database Server ไม่สามารถสร้าง Database ใหม่ และควบคุมสถานะเซิร์ฟเวอร์ไม่ได้ ในสถานการณ์เช่นนี้ การรู้วิธีคืนสิทธิ์ Root เข้าถึง Database Server จะช่วยได้ มาดูวิธีทำกัน
รีเซ็ตรหัสผ่าน MySQL Root ใน Windows
ล็อกอินเข้าเซิร์ฟเวอร์ในฐานะ Administrator หยุด MySQL Server หากกำลังทำงาน ต้องใช้ Windows Services Manager คลิก Start Menu ไป Control Panel -> Administrative Tools -> เลือก Services หา MySQL Server และหยุดมัน หากไม่แสดงอยู่ที่นี่ แต่อยู่ใน Task Manager (เข้าถึงได้ด้วย Ctrl+Alt+Del) ให้ Kill Process MySQL
เมื่อ MySQL Process หยุดแล้ว คุณต้องบังคับเปลี่ยนรหัสผ่านบน MySQL โดยใช้คำสั่ง UPDATE และ FLUSH เปิด Text Editor โปรด สร้างไฟล์ใหม่ ใส่ข้อความต่อไปนี้ แทนที่ "NewMySQLPassword" ด้วยรหัสผ่านใหม่:
UPDATE mysql.user SET Password=PASSWORD("NewMySQLPassword") WHERE User='root'; FLUSH PRIVILEGES;
บรรทัดแรกอัปเดตค่าของฟิลด์ "Password" ในตาราง mysql.user สำหรับ User "root" เป็น "NewMySQLPassword" บรรทัดที่สอง Flush สิทธิ์เก่า และให้รหัสผ่านใหม่มีผลทุกที่ บันทึกข้อความนี้เป็น C:\mysql_reset.txt
ต่อไป ต้องเริ่ม MySQL Server โดยส่งไฟล์นี้เป็น Configuration Parameter เปิด Terminal โดยไป Start Menu -> Run -> พิมพ์ cmd -> Enter ใส่คำสั่ง:
C:\mysql\bin\mysqld-nt --init-file=C:\mysql_reset.txt
เมื่อเซิร์ฟเวอร์เริ่มต้นเสร็จ ให้ลบไฟล์ C:\mysql_reset.txt รหัสผ่าน Root ของ MySQL ควรถูกรีเซ็ตแล้ว ตอนนี้ Restart MySQL Server อีกครั้ง กลับไปที่ Windows Services Manager อีกครั้ง รหัสผ่าน Root ใหม่ควรทำงานได้แล้ว
รีเซ็ตรหัสผ่าน MySQL Root ใน Linux
ล็อกอินเข้า Linux Machine ในฐานะ Root User ขั้นตอนคือ หยุด MySQL Server เริ่มใหม่โดยไม่โหลด Permissions (Skip Grant Tables) เพื่อให้ล็อกอินเป็น Root โดยไม่ต้องรหัสผ่าน ตั้งรหัสผ่านใหม่ และ Restart ปกติ วิธีทำ:
ก่อนอื่น หยุด MySQL Server:
<#># /etc/init.d/mysql stop#>
ตอนนี้เริ่ม MySQL Server ด้วย Option --skip-grant-tables ซึ่งจะรันเซิร์ฟเวอร์โดยไม่โหลดการตั้งค่าสิทธิ์:
# mysqld_safe --skip-grant-tables &
Option & ทำให้คำสั่งรันเป็น Background Process ตอนนี้ล็อกอิน MySQL Server เป็น Root:
# mysql -u root
ควรเข้าได้โดยไม่ถามรหัสผ่าน ขั้นตอนต่อไปตั้งรหัสผ่านใหม่:
mysql> use mysql;
mysql> update user set password=PASSWORD("NewMySQLPassword") where User='root';
mysql> flush privileges;
mysql> quit
แทนที่ "NewMySQLPassword" ด้วยรหัสผ่านของคุณ บรรทัดแรกเลือกตาราง Config ของ MySQL บรรทัดที่สองอัปเดตฟิลด์ "Password" สำหรับ User "root" บรรทัดที่สาม Flush สิทธิ์เก่า ขั้นตอนสุดท้าย Restart Server ปกติและใช้รหัสผ่านใหม่ล็อกอิน:
# /etc/init.d/mysql stop
# /etc/init.d/mysql start
# mysql -u root -pNewMySQLPassword
ขอแสดงความยินดี รหัสผ่าน Root ใหม่ของ MySQL ตั้งค่าเสร็จแล้ว และเซิร์ฟเวอร์พร้อมใช้งานอีกครั้ง จำได้ไหม ต้องอัปเดตแอปพลิเคชันทั้งหมดให้ใช้รหัสผ่านนี้หากคุณใช้อยู่