ไม่สามารถรีเซ็ตรหัสผ่านรูทของ mysql


28

ฉันจำเป็นต้องรีเซ็ตรหัสผ่านรูทของการติดตั้ง mysql ในพื้นที่ของฉัน แต่จะไม่ให้ฉัน ฉันเคยลองแล้ว:

$ sudo /etc/init.d/mysql stop
 * Stopping MySQL database server mysqld                                                                                                              [ OK ] 
[1]-  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
[2]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
reg@regDesktopHome:~$ sudo mysqld --skip-grant-tables &
[1] 13651
reg@regDesktopHome:~$ 140627 19:02:02 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

reg@regDesktopHome:~$ mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
reg@regDesktopHome:~$ sudo mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[1]+  Exit 1                  sudo mysqld --skip-grant-tables

ฉันจะรีเซ็ตรหัสผ่านได้อย่างไร แก้ไข 1 ฉันได้รับสิ่งนี้:

$ ps ax| grep mysql
16515 ?        Ssl    0:00 /usr/sbin/mysqld
16551 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ sudo kill -9 16515
reg@regDesktopHome:~/semios/v3upgrade$ ps ax| grep mysql
16678 ?        Ssl    0:00 /usr/sbin/mysqld
16715 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

ดูเหมือนว่ากระบวนการจะเริ่ม mysql ใหม่โดยอัตโนมัติทันทีที่ฉันฆ่ามัน ...

คำตอบ:


43

ก่อนอื่นโปรดลองใช้

mysql -u root -p

และป้อนรหัสผ่านของคุณ (หากคุณจำ) ที่พร้อมที่จะเข้าสู่ระบบในฐานะผู้ใช้ SQL ราก (หมายเหตุสวิทช์-pสำหรับรหัสผ่าน)

หากคุณจริงๆต้องรีเซ็ตรหัสผ่านรากของคุณสำหรับ MySQL นี่เป็นวิธีที่ง่าย - dpkg-reconfigureกำหนดค่าแพคเกจที่มี

ขั้นตอนง่าย ๆ ในการรีเซ็ตรหัสผ่านรูท mySQL:

  1. ตรวจสอบเวอร์ชั่นของคุณmysql-server;

    apt-cache policy mysql-server
    

    และดูบรรทัดที่แสดงเวอร์ชันที่ติดตั้งระหว่างข้อมูลอื่น ๆ เช่นสำหรับการติดตั้งของฉันมัน:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (จากนี้ฉันรู้ว่าฉันได้mysql-server-5.5ติดตั้งในระบบของฉัน)

  2. เริ่มการกำหนดค่าใหม่ด้วย:

    sudo dpkg-reconfigure mysql-server-*.*
    

    ตำแหน่งที่mysql-server-*.*ควรแทนที่ด้วยเวอร์ชันที่คุณมี (สำหรับฉันมันจะเป็นmysql-server-5.5) สิ่งนี้จะหยุด daemon ฐานข้อมูล จะมีข้อความแจ้งปรากฏขึ้นในตำแหน่งที่คุณต้องป้อนรหัสผ่านใหม่และยืนยันการกำหนดค่า

    snap1

    daemon จะเริ่มต้นโดยอัตโนมัติหลังจากการกำหนดค่าใหม่เสร็จสมบูรณ์

  3. จากนั้นคุณสามารถเข้าสู่ระบบด้วย:

    mysql -u root -p
    

    และเริ่มงานผู้ดูแลฐานข้อมูลของคุณ

อ้างอิง:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [ซึ่งจะทำความสะอาดเร็ว ๆ นี้ตามที่ระบุในหน้า]

  2. คู่มือเซิร์ฟเวอร์ Ubuntuที่เกี่ยวข้องกับรุ่นเฉพาะของคุณ


2
สามารถยืนยันได้ว่าใช้dpkg-reconfigure mariadb-server-10.1งานได้กับ MariaDB เมื่อโซลูชันอื่น ๆ ทั้งหมดไม่ทำงาน ขอบคุณสำหรับสิ่งนี้.
liviucmg

19
dpkg-reconfigureไม่ได้แจ้งให้ใส่รหัสผ่านสำหรับฉัน .. มีวิธีบังคับหรือไม่
Unirgy

15
ไม่ได้ผลสำหรับฉัน ฉันใช้คำสั่งข้างต้นและได้รับ "การตรวจสอบว่าจำเป็นต้องมีการปรับปรุงหรือไม่การติดตั้ง MySQL นี้ได้รับการอัพเกรดเป็น 5.7.13 แล้วให้ใช้ - บังคับถ้าคุณยังต้องการเรียกใช้ mysql_upgrade" ใช้ --force ให้การตอบสนองเดียวกัน
Anthony Scaife

5
เห็นได้ชัดว่ามันไม่ทำงานอีกต่อไป
dpi

1
@Paulo Henrique ไม่ได้รับสถานการณ์เราตัดสินใจว่าการใช้เวลาที่ดีที่สุดคือการติดตั้งเซิร์ฟเวอร์แบบเต็ม
Anthony Scaife

21

การอ้างอิงที่นำมาจากบล็อกนี้:

ขั้นตอนที่ 1: หยุดบริการ MySQL

sudo service mysql stop

ขั้นตอนที่ 2: ฆ่า mysqld ที่ทำงานอยู่ทั้งหมด

sudo killall -9 mysqld

ขั้นตอนที่ 3: เริ่ม mysqld ในเซฟโหมด

sudo mysqld_safe --skip-grant-tables --skip-networking &

ขั้นตอนที่ 4: เริ่มไคลเอนต์ mysql

mysql -u root

ขั้นตอนที่ 5: หลังจากล็อกอินสำเร็จโปรดดำเนินการคำสั่งนี้เพื่อเปลี่ยนรหัสผ่านใด ๆ

FLUSH PRIVILEGES;

ขั้นตอนที่ 6: คุณสามารถอัปเดตรหัสผ่านรูทของ mysql

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

สำหรับ mysql> 5.7 ใช้สิ่งนี้แทนด้านบน:

UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';

ขั้นตอนที่ 7: โปรดดำเนินการคำสั่งนี้

FLUSH PRIVILEGES;

ขั้นตอนที่ 8: ออกจากคอนโซล mysql

exit

ขั้นตอนที่ 9: กำจัด mysqld_safe และเริ่ม mysql

sudo killall mysqld_safe && sudo service mysql start

1
ควรจะsudo service mysql stopไม่sudo stop mysql
knocte

1
ในตอนท้ายมันก็ขาดขั้นตอนsudo killall mysqld_safe && sudo service mysql startแล้วลองลงชื่อเข้าใช้อีกครั้ง
knocte

3
สำหรับ MYSQL 5.7 ไวยากรณ์รหัสผ่านการเปลี่ยนแปลงได้เปลี่ยนเป็นALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel

7
หมายเหตุ ! มีสัตว์ร้ายตัวใหม่ใน MySQL 5.7 ที่เรียกว่า auth_socket หากคุณติดตั้ง mysql โดยไม่ต้องใช้รหัสผ่านรูทสัตว์ร้ายจะโจมตีคุณและคุณจะเสีย 50 hitpoint ในขั้นตอนที่ 6 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';ข้างต้นคุณจะต้อง คุณสามารถอ่านเกี่ยวกับเรื่องนี้ที่นี่ ในทางทฤษฎี (ฉันไม่ได้ลอง) คุณควรจะสามารถเข้าสู่ mysql ได้โดยไม่ต้องใช้รหัสผ่านหากคุณ "sudo su -" กลายเป็น root
olafure

3
และในกรณีที่ALTER USER ...ใช้งานไม่ได้ให้ใช้UPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure

9

ภายใต้ Ubuntu 16.04 และmysql-server-5.7คำตอบที่ถูกต้องคือความคิดเห็นสุดท้ายของ olafure dpkg-reconfigure mysql-server-5.7ไม่สามารถใช้งานได้อีกต่อไป

sudo service mysql stop
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

ตอนนี้อยู่ในคอนโซล mysql >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q

รีสตาร์ทกระบวนการที่ดี mysql

sudo killall mysqld
sudo service mysql start

ตรวจสอบรหัสผ่านใหม่ของคุณ

mysql -u root -p
Enter password: newpass
mysql>

5
ในการดำเนินการที่ฉันได้รับข้อผิดพลาด:mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.ดังนั้นฉันจึงวิ่งsudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldและคำตอบที่เหลือทั้งหมดทำงานได้ นี่เป็นข้อบกพร่องใน Ubuntu 16 หรือไม่? ฉันไม่เคยพบปัญหาเกี่ยวกับการอัปเดตรหัสผ่านเหล่านี้มาก่อน
เชสเตอร์

@Chester ขอบคุณมาก !! นี่เป็นวิธีเดียวที่ทำงานได้ในที่สุดขณะที่โซลูชันอื่น ๆ ทั้งหมดโยนข้อผิดพลาด (Ubuntu-Server 16.04 ที่นี่) ควรเพิ่มคำตอบนี้
derHugo

3

เริ่มต้นด้วยMySQL 5.7ระหว่างการติดตั้งเริ่มต้นหากคุณปล่อยรหัสผ่านว่างเปล่าสำหรับผู้ใช้นั้นการพิสูจน์ตัวตนจะขึ้นอยู่กับauth_socketปลั๊กอิน

วิธีที่ถูกต้องในการเปลี่ยนรหัสผ่านคือ:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/


นี่เป็นกรณีที่แน่นอนของฉัน (รหัสผ่านว่างเปล่าในระหว่างการติดตั้งใน mysql 5.7) และนี่เป็นทางออกเดียวสำหรับเคสของฉัน
cherouvim

ฉันได้รับข้อความ:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149

@ user2513149 โปรดรีสตาร์ทเซิร์ฟเวอร์ MySQL ของคุณโดยไม่ใช้--skip-grant-tablesตัวเลือกและดูวิธีแก้ปัญหานี้ใช้งานได้
บารัน

@ Barun, ไม่, ไม่มี--skip-grant-tablesตัวเลือกฉันไม่สามารถเข้าสู่ระบบ MySQL เป็น root ได้ มันบอกว่าERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149

แก้ไข! ฉันต้องเข้าสู่ระบบคอนโซล MySQL ปกติ (ไม่ใช่mysqld_safe) ตามรูทโดยไม่ใช้รหัสผ่าน ฉันมี Ubuntu 18.04 และ mysql-server-5.7 คำตอบนี้ช่วยฉันaskubuntu.com/a/767252/585252 (ดูที่ส่วนล่าง)
user2513149

1

ไม่มีอะไรจากคำตอบที่เหลือดูเหมือนจะใช้ได้สำหรับฉัน นี่คือทางออกของฉัน:

sudo service mysql stop
sudo mysqld_safe &
sudo mysql -u root

ในนั้น:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;
QUIT;

แล้ว:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p

1
ที่เหลือไม่ได้ผลสำหรับฉันทั้ง ... และไม่แก้ปัญหาของคุณ: ยังได้รับข้อผิดพลาดนี้ 2017-05-30T06:33:22.291126Z mysqld_safe Logging to syslog. 2017-05-30T06:33:22.294375Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2017-05-30T06:33:22.296874Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
derHugo

1
นี่เป็นคำแนะนำเดียวที่เหมาะกับฉันจากข้อเสนอแนะหกข้อที่ฉันได้ลอง แต่ฉันเพิ่ม @Chester's bit ด้านบนเพื่อหลีกเลี่ยงข้อผิดพลาด "ไฟล์ซ็อกเก็ต UNIX ไม่มีอยู่" ข้อผิดพลาด: sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldนี่คือ mysql 5.7 และ ubuntu 18.04 .
twowheeler

0

สร้างไฟล์ด้วยสิ่งนี้:

UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;

หยุดเซิร์ฟเวอร์ mysql และเรียกใช้สิ่งนี้:

mysqld_safe --init-file=/home/me/mysql-init &

ตรวจสอบรายละเอียดเพิ่มเติมได้ที่นี่: http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.