[MySQL] ลืมรหัสผ่าน root ของ MySQL/MariaDB ทำไงดี

[MySQL] ลืมรหัสผ่าน root ของ MySQL/MariaDB ทำไงดี?

ผมเจอปัญหานี้กับตัวเอง เพราะลงโปรแกรมทิ้งไว้นานแล้ว และชีวิตนี้มีรหัสผ่านอีกร้อยแปดพันเก่าที่ต้องจำ สุดท้าย ลืม!!

แล้วจะทำอย่างไรดี?

จากที่ผมลองหาข้อมูลและทดลองปฏิบัติตามมีวิธีง่ายๆ ดังนี้ (แต่ขอบอกก่อนว่าสำหรับเครื่อง DEV น่ะครับ ไม่แนะนำทำบน PRD)

เฉพาะ MySQL version 5.7 ขึ้นไป และ MariaDB version 10 ขึ้นไป ครับ
  1.  หยุด Service MySQL ก่อน ด้วยคำสั่ง "net stop mysql" (run as admin) หรือจะ service.msc ที่ RUN ได้ก็ แล้วหา MySQL service แล้วแต่สะดวกเลย
  2.  สร้างไฟล์ สำหรับ reset password ขึ้นมา แล้ว Copy code ด้านล่างไปใส่ แล้วบันทึกเป็นไฟล์ txt ผมตั้งชื่อ MySQL_reset.txt และบันทึกไว้ที่ Drive C: แล้วกัน.

    MySQL 5.7.6 ขึ้นไป
    ALTER USER 'root'@'localhost' IDENTIFIED BY '[new password]';
    

    MySQL 5.7.5 ลงมา
    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
    
    
  3.  สั่ง Start MySQL ทาง command line ด้วยคำสั่งนี้ (run as admin)

    "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --init-file=c:\MySQL_reset.txt
  4.  ถือว่าเสร็จสิ้นการ reset password กดปุ่ม [CTL]+C ที่หน้า cmd ได้เลย
  5.  Start service MySQL ให้ทำงานตามปกติ ที่ service.msc หรือจะ command line ก็ได้ "net start mysql" (run as admin)
ถือว่าเสร็จสิ้นครับ




    Bash script สำรองข้อมูลฐานข้อมูล MySQL


    Bash script for backup MySql database


    #!/bin/bash
    
    USER="your_user"
    PASSWORD="your_password"
    OUTPUT="/Users/rabino/DBs"
    
    rm "$OUTPUTDIR/*gz" > /dev/null 2>&1
    
    databases=`mysql --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
    
    for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] ; then
    echo "Dumping database: $db"
    mysqldump --force --opt --user=$USER --password=$PASSWORD --databases $db > $OUTPUT/`date +%Y%m%d`.$db.sql
    gzip $OUTPUT/`date +%Y%m%d`.$db.sql
    fi
    done
    

    [MySQL] วิธีคัดลอกฐานข้อมูลจาก MySQL Server ไปยัง MySQL server อีกตัว


    สิ่งที่ต้องเตรียม

    • mysqldrump.exe <-- สำหรับ drump ฐานข้อมูลออกมาเป็นไฟล์
    • mysqladmin.exe <-- สำหรับ จัดการ ฐานข้อมูล



    มาลุยกันเลย!
    ผมขอสมมติ
    server1 (ตัวที่ต้องการย้ายหรือคัดลอกฐานข้อมูล)
    server2 (ตัวใหม่ที่ต้องการเอาข้อมูลมาลง)

    ณ server2 เปิด command prompt ขึ้นมาเลยครับ แล้วพิมพ์ตาม command ด้านล่างเลยครับ

    วิธีคัดลอกฐานข้อมูล MySQL ไปยัง Server อื่น กรณียังไม่ได้สร้าง database สร้าง database ก่อน

    c:\Appserv\MySQL\bin\mysqladmin create {database_name}

    แล้วก็

    C:\AppServ\MySQL\bin>mysqldump -h server1 --user={ชื่อผู้ใช้} --password={รหัสผ่าน} {source_database_name}{table}|mysql -u{ชื่อผู้ใช้} -p{รหัสผ่าน} {target_database_name}


    วิธีคัดลอกฐานข้อมูล MySQL ไปยัง Server อื่น กรณีมีฐานข้อมูลอยู่แล้ว
    เพิ่มพารามิเตอร์ต่อท้าย mysqldump --no-create-info --no-create-db แล้วก็ตามด้านบนเลยครับ


    credit:
    http://dev.mysql.com/doc/refman/5.0/en/copying-databases.html
    http://stackoverflow.com/questions/12242772/easiest-way-to-copy-a-table-from-one-database-to-another



    แก้ไขรหัสผ่าน User [root] ใน MySQL กันเถอะ

    ตามตำราและวิธีการที่พวกไอ้หรั่งมันเขียนกันไว้ ก็เยอะครับ
    แต่วันนี้ผม ขอทำในแบบที่ผมคิดว่าง่ายแล้วกันครับ
    เออ!! ลืมบอกว่าทำบนเครื่องที่ติดตั้ง MySQL Server น่ะครับ เอิ๊กๆ

    เตรียมตัวกันหน่อย..
    ใช้ command prompt [DOS] หรือ กดปุ่ม win+r จะขึ้นหน้าต่าง run แล้ว พิมพ์  "cmd" จะขึ้นหน้าต่าง DOS แล้วใจเย็นๆ รอไว้ แล้วลุยตามด้านล่างโลดดดด...

    วิธีที่ 1 ใช้ tool ที่เขามีมาให้ครับ mysqladmin
       กรณีที่เป็น "Windows Server"

    1. กรณีที่ ยังไม่ได้เซ็ตรหัสผ่าน root หรือ user ไว้ก่อน พิมพ์  "mysqladmin -u root password รหัสผ่านที่ต้องการกำหนด" [enter]
    2. กรณีที่ มีรหัสผ่านเดิมอยู่แล้วต้องการเปลี่ยนรหัสผ่านใหม่ พิมพ์ "mysqladmin -u root -p'รหัสผ่านเก่า' password รหัสผ่านใหม่"
    เป็นอันว่าเสร็จเรียบร้อย!! :p

    วิธีที่ 2 ไม่ใช้ tool แต่ใช้ ความรู้ด้าน ภาษา SQL สักนิดนึง!!

    1. พิมพ์ "mysql" [enter] แล้วจะเข้าสู่ MySQL console อัติโนมัติ (ส่วนมาก รันบนเครื่องที่ให้บริการ mysql server เองจะไม่ค่อยได้ใส่รหัสผ่านหรอก )
    2. พิมพ์ "use mysql;" [enter] เลือกฐานข้อมูล MySQL ฐานข้อมูลนี้จะเก็บรายละเอียดเครื่องแม่ข่ายเอาไว้ทั้งหมด (เฉพาะ mySQL server น่ะ)
    3. ตรงนี้แหล่ะ สำคัญ เป็นการเปลี่ยนรหัสผ่าน ด้วยภาษา SQL ต้องระวังนิดนึง พิมพ์ "update user set password=password("รหัสผ่านใหม่") where user='root'; " [enter] หากต้องการเปลี่ยน user อื่น เพียงแก้จาก root เป็น user ที่เราต้องการเปลี่ยนรหัสผ่าน แค่นั้นเอง
    4. ยังไม่เสร็จสมบูรณ์ดีครับ ต้อง run อีกสัก command เพื่อให้ MySQL server Apply คำสั่งที่เราสั่งการไปสักครู่ โดยพิมพ์ "flush privileges;" [enter]
    5. สุดท้าย "quit;" เพื่อออกจาก console ครับ
    วิธีที่ 3 ทำก่อนวิธีที่ 2 55+ [ งง อ่ะดิ ]

    1. กดปุ่ม win+r แล้วพิมพ์ " mysqld -u root --skip-grant-tables " [enter]
    2. กดปุ่ม win+r แล้วพิมพ์ "mysql " [enter]
    3. พิมพ์คำสัง ตามวิธีที่ 2 ตั้งแต่ ข้อ 2. จนครบทุกข้อ.

    แค่นี้เป็นอันว่าเสร็จเรียบร้อยแล้ว ;p


    Command list
    use mysql;
    update user set password=password("รหัสผ่านใหม่") where user='ชื่อผู้ใช้ที่ต้องการเปลี่ยนรหัสผ่าน';
    flush privileges; 
    quit; 
    source: http://www.cyberciti.biz/faq/mysql-change-root-password/