จะรีเซ็ตหรือเปลี่ยนรหัสผ่านรูทของ MySQL ได้อย่างไร?


179

ฉันจะเปลี่ยนรหัสผ่านรูท MySQL และชื่อผู้ใช้ในเซิร์ฟเวอร์อูบุนตูได้อย่างไร ฉันจำเป็นต้องหยุดบริการ mysql ก่อนที่จะทำการเปลี่ยนแปลงใด ๆ หรือไม่?

ฉันมีการติดตั้ง phpmyadmin เช่นกัน phpmyadmin จะได้รับการอัปเดตโดยอัตโนมัติหรือไม่


หากคุณไม่ต้องการข้อมูลคุณสามารถ "รีเซ็ต" รหัสผ่านโดยการลบ mysql ทั้งหมด: stackoverflow.com/questions/10853004/…จากนั้นติดตั้งอีกครั้ง (มันจะแจ้งให้คุณทราบรหัสผ่านรูท "ใหม่") FWIW: )
rogerdpack

คุณรู้รหัสผ่านรูทของ MySQL หรือไม่
Franck Dernoncourt

2
ใน mysql-server-5.7 วิธีการเหล่านี้ไม่ทำงาน ใช้ 'sudo' โดยไม่ใช้รหัสผ่านดังที่ได้กล่าวไว้ในaskubuntu.com/a/848504
Pragalathan M

คำตอบ:


225

ตั้ง / เปลี่ยน / รีเซ็ตรหัสผ่านรูทของ MySQL บน Ubuntu Linux ป้อนบรรทัดต่อไปนี้ในเทอร์มินัลของคุณ

  1. หยุดเซิร์ฟเวอร์ MySQL: sudo /etc/init.d/mysql stop
  2. เริ่มการmysqldกำหนดค่า:sudo mysqld --skip-grant-tables &

    ในบางกรณีคุณต้องสร้างรายการ/var/run/mysqldแรก:

    sudo mkdir -v /var/run/mysqld && sudo chown mysql /var/run/mysqld
  3. วิ่ง: sudo service mysql start
  4. เข้าสู่ระบบ MySQL เป็น root: mysql -u root mysql
  5. แทนที่YOURNEWPASSWORDด้วยรหัสผ่านใหม่ของคุณ:

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

หมายเหตุ: ในบางรุ่นหากpasswordไม่มีคอลัมน์อยู่คุณอาจต้องการลอง:
UPDATE user SET authentication_string=password('YOURNEWPASSWORD') WHERE user='root';

หมายเหตุ: วิธีการนี้ไม่ถือเป็นวิธีที่ปลอดภัยที่สุดในการรีเซ็ตรหัสผ่านอย่างไรก็ตามวิธีนี้ใช้งานได้

อ้างอิง:

  1. ตั้งค่า / เปลี่ยน / รีเซ็ตรหัสผ่านรูทของ MySQL บน Ubuntu Linux
  2. วิธีรีเซ็ตรหัสผ่านรูท

20
แน่นอนหลังจากจุดนี้คุณจะต้องฆ่ากระบวนการเซิร์ฟเวอร์ที่ไม่มีรหัสผ่านชั่วคราวที่คุณเริ่มในขั้นตอนที่ 2 อาจใช้sudo killall -9 mysqldหรือไม่ และจากนั้นsudo service mysql startให้เริ่มภูตปกติอีกครั้ง ...
Lambart

7
วิธีการในคำตอบนี้จำเป็นสำหรับการรีเซ็ตรหัสผ่าน root ของ MySQL ที่คุณไม่รู้จัก[แหล่งที่มา ] ถ้าคุณรู้SET PASSWORDคำสั่ง MySQL นั้นเหมาะสำหรับคุณ
tanius

53
ฉันตามมาจนถึงขั้นตอนที่ 3 และฉันไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/var/run/mysqld/mysqld.sock' (2) เมื่อฉันเข้าสู่ระบบผ่านรูท
Sushivam

12
ในบางกรณีคุณต้องเรียกใช้mkdir /var/run/mysqldและchown mysql: /var/run/mysqldระหว่างขั้นตอนที่ 1 และ 2
Neville Nazerane

9
ขั้นตอนที่ 3 ไม่ได้ผลสำหรับฉันกับ Ubuntu 18.04 ฉันเพิ่งเข้าสู่ระบบโดยใช้sudo mysql
itsols

122

วิธีเดียวที่ได้ผลสำหรับฉันคือวิธีที่อธิบายไว้ที่นี่ (ฉันใช้ Ubuntu 14.04) เพื่อความชัดเจนนี่คือขั้นตอนที่ฉันปฏิบัติตาม:

  1. sudo vim /etc/mysql/my.cnf
  2. เพิ่มบรรทัดต่อไปนี้ในตอนท้าย:

    [mysqld]
    
    ข้ามทุนตาราง
  3. sudo service mysql restart

  4. mysql -u root

  5. use mysql

  6. select * from mysql.user where user = 'root';- ดูที่ด้านบนเพื่อตรวจสอบว่าคอลัมน์รหัสผ่านเรียกว่า รหัสผ่านหรือauthentication_string

  7. UPDATE mysql.user set *password_field from above* = PASSWORD('your_new_password') where user = 'root' and host = 'localhost'; - ใช้คอลัมน์รหัสผ่านที่เหมาะสมจากด้านบน

  8. FLUSH PRIVILEGES;

  9. exit

  10. sudo vim /etc/mysql/my.cnf

  11. ลบบรรทัดที่เพิ่มในขั้นตอนที่ 2หากคุณต้องการรักษามาตรฐานความปลอดภัยของคุณ

  12. sudo service mysql restart

สำหรับการอ้างอิง: https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html


8
ในที่สุดมันก็ใช้ได้สำหรับฉัน! ฉันใช้ MySQL 5.7.18 บน Ubuntu 16.04 ฉันลอง dpkg-reconfigure คำตอบของ Anvesh คำตอบของ Christian Mark และแม้แต่คำแนะนำในหน้าช่วยเหลือของ MySQL
mbuc91

9
ฉันต้องรันการอัพเดท mysql.user SET authentication_string = PASSWORD ('newpwd') WHERE User = 'root'; แทนบรรทัด 5
mbuc91

2
ทางออกเดียวที่ได้ผลสำหรับฉัน ฉันมี Ubuntu 17.04 และ mysql 5.7
Mohamed

1
เศร้านี้ไม่ทำงานสำหรับฉัน mysql 5.7.22 Ubuntu 18.04
มาริโอ

1
ทุกอย่างทำงานได้ตามที่คาดไว้ แต่เมื่อพยายามที่จะเข้าสู่ระบบก็บอกว่าป้อนรหัสผ่าน: ข้อผิดพลาด 1698 (28000): การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root' @ 'localhost'
Dipak Chatterjee

101

วิธีที่ง่ายและเป็นทางการในการรีเซ็ตรหัสผ่านรูทบนเซิร์ฟเวอร์อูบุนตู ...

หากคุณอยู่บน 16.04, 14.04, 12.04:

sudo dpkg-reconfigure mysql-server-5.5

หากคุณอยู่บน 10.04:

sudo dpkg-reconfigure mysql-server-5.1

หากคุณไม่แน่ใจว่าติดตั้ง mysql-server เวอร์ชั่นใดคุณสามารถลอง:

dpkg --get-selections | grep mysql-server

อัพเดทโน้ตสำหรับ mysql-server-5.7

โปรดทราบว่าหากคุณใช้ mysql-server-5.7 คุณไม่สามารถใช้วิธี dpkg-reconfigure ได้ง่ายขึ้นดังที่แสดงไว้ด้านบน

หากคุณรู้รหัสผ่านเข้าสู่ระบบและเรียกใช้สิ่งนี้:

UPDATE mysql.user SET authentication_string=PASSWORD('my-new-password') WHERE USER='root';
FLUSH PRIVILEGES;

หรือคุณสามารถใช้สิ่งต่อไปนี้:

sudo mysql_secure_installation

สิ่งนี้จะถามคำถามเกี่ยวกับการรักษาความปลอดภัยการติดตั้งของคุณ (แนะนำอย่างยิ่ง) รวมถึงหากคุณต้องการระบุรหัสผ่านรูทใหม่

หากคุณไม่ทราบรหัสผ่านรูทโปรดอ้างถึงขั้นตอนการเขียนเป็นศูนย์กลางของ Ubuntuอ้างถึงนี้เขียนอูบุนตูเป็นศูนย์กลางขึ้นเกี่ยวกับกระบวนการ

ดูข้อมูลเพิ่มเติมได้ที่:

https://help.ubuntu.com/16.04/serverguide/mysql.html https://help.ubuntu.com/14.04/serverguide/mysql.html


3
ทำงานได้แม้ในขณะที่คุณทำรหัสผ่าน root ของ MySQL ดั้งเดิม - ดี
tanius

4
ทำงานร่วมกับVer 14.14 Distrib 5.5.38, for debian-linux-gnu
justinpage

ทำงานกับ mysql v 5.0 เช่นกัน ...sudo dpkg-reconfigure mysql-server-5.0
dsghi

4
sudo dpkg-reconfigure mysql-server-5.7 ไม่ทำงานสำหรับ Ubuntu 18.04 สำหรับรีเซ็ตรหัสผ่านรูท ทางเลือกอื่น ๆ ?
Jagdeep Singh

Ubuntu:sudo dpkg-reconfigure mysql-server-5.7; sudo mysql_secure_installation
kenorb

77

สิ่งที่ทำงานสำหรับฉัน (Ubuntu 16.04, mysql 5.7):

หยุด MySQL

sudo service mysql stop

สร้างไดเรกทอรีบริการ MySQL

sudo mkdir /var/run/mysqld

ให้สิทธิ์ผู้ใช้ MySQL ในการเขียนไปยังไดเรกทอรีบริการ

sudo chown mysql: /var/run/mysqld

เริ่ม MySQL ด้วยตนเองโดยไม่ตรวจสอบสิทธิ์หรือเชื่อมต่อเครือข่าย

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

บนคอนโซลอื่นให้ล็อกอินโดยไม่มีรหัสผ่าน

mysql -uroot mysql

แล้ว:

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';
EXIT;

ปิด MySQL

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

เริ่มบริการ MySQL ตามปกติ

sudo service mysql start

วิธีอื่นไม่ได้ผลสำหรับฉัน แต่อันนี้ (ขอบคุณ!) หรือคุณสามารถไปที่นี่rricketts.com/reset-root-password-mysql-5-7-ubuntu-16-04-lts
Dung

10
มีประโยชน์มาก ! ในกรณีเฉพาะของฉัน (Ubuntu 18.04 LTS) ฉันต้องแทนที่โฮสต์ '%' เป็น 'localhost'
FredericK

สิ่งนี้ไม่ทำงานใน Ubuntu 18.04 แต่มันทำงานกับการเปลี่ยนแปลงเล็กน้อยนี้ได้อธิบายไว้ที่นี่stackoverflow.com/a/53385753/1591143
Aleksandar Popovic

76

ฉันกำลังแบ่งปันวิธีแก้ปัญหาขั้นตอนสุดท้ายเพื่อรีเซ็ตรหัสผ่าน MySQL ใน Linux Ubuntu

การอ้างอิงนำมาจากบล็อก (dbrnd.com)

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

sudo stop mysql

ขั้นตอนที่ 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 Passwordจะมีการเรียกคอลัมน์authentication_stringที่เรียกว่า

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

FLUSH PRIVILEGES;

จริง นอกจากนี้ยังอยู่ใกล้กับเอกสารอย่างเป็นทางการ ในกรณีที่คุณพบปัญหานี้: "ข้อผิดพลาด 1524 (HY000): ไม่ได้โหลดปลั๊กอิน 'auth_socket'" ดูที่stackoverflow.com/questions/37879448/…
Wtower

ฉันต้องเปลี่ยน mysql.user.plugin จาก 'auth_socket' เป็น 'mysql_native_password' สำหรับผู้ใช้รูทของฉันด้วยโฮสต์ของ 'localhost'
แบรนดอน

1
ฉันต้องใช้ "sudo /etc/init.d/mysql stop" เพื่อหยุดบริการและ "อัพเดท mysql.user SET authentication_string = PASSWORD ('newpwd') WHERE User = 'root';" เพื่ออัปเดตรหัสผ่าน
L Bahr

1
_string ที่ผ่านการรับรองความถูกต้องแล้ว
Faiyaz Md Abdul

42

ฉันประสบปัญหากับ ubuntu 18.04 และ mysql 5.7 นี่เป็นวิธีแก้ปัญหา

ลองรีสตาร์ทเซิร์ฟเวอร์ mysql ก่อนดำเนินการ comands

sudo service mysql restart

MYSQL-SERVER> = 5.7

sudo mysql -uroot -p
USE mysql;
UPDATE user SET authentication_string=PASSWORD('YOUR_PASSWORD') WHERE User='root';
UPDATE user SET plugin="mysql_native_password";
FLUSH PRIVILEGES;
quit;

MYSQL-SERVER <5.7

sudo mysql -uroot -p
USE mysql;
UPDATE user SET password=PASSWORD('YOUR_PASSWORD') WHERE User='root';
UPDATE user SET plugin="mysql_native_password";
FLUSH PRIVILEGES;
quit;

1
ขอบคุณฉันยังใช้ Ubuntu 18.04 ที่นี่และMYSQL-SERVER >= 5.7รุ่นเป็นสิ่งเดียวที่แก้ปัญหาได้จริง
Miguelgraz

1
นี่คืออันที่ทำงานในการติดตั้ง Ubuntu 18.04 mysql MYSQL-SERVER >= 5.7รุ่นที่จะแม่นยำ
Sathish Manohar

34

เปลี่ยนรหัสผ่าน root ของ MySQL

เมธอดนี้เปิดเผยรหัสผ่านกับประวัติบรรทัดรับคำสั่งคำสั่งเหล่านี้ควรรันเป็นรูท

  1. เข้าสู่ระบบผ่านเครื่องมือบรรทัดคำสั่ง mysql:

    mysql -uroot -poldpassword
  2. เรียกใช้คำสั่งนี้:

    SET PASSWORD FOR root@'localhost' = PASSWORD('newpassword');

หรือ

  1. เรียกใช้คำสั่งนี้ซึ่งตั้งรหัสผ่านสำหรับผู้ใช้ปัจจุบัน ('รูท' สำหรับกรณีนี้):

    SET PASSWORD = PASSWORD ('newpassword');


26

ในตอนแรกรันคำสั่งนี้:

sudo mysql

จากนั้นคุณควรตรวจสอบวิธีการรับรองความถูกต้องของบัญชีผู้ใช้ MySQL ของคุณใช้เพื่อเรียกใช้คำสั่งนี้

SELECT user,authentication_string,plugin,host FROM mysql.user;

ตอนนี้คุณสามารถเห็นสิ่งนี้แล้ว:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+

ในตารางที่อยู่ในข้างต้นจะเห็นได้ว่าผู้ใช้ทั้งหมดของ MySQL บัญชีสถานะและถ้าคุณได้ตั้งรหัสผ่านสำหรับบัญชีรากก่อนที่คุณเห็นในคอลัมน์ปลั๊กอินแทนmysql_native_password auth_socketทั้งหมดในการเปลี่ยนรหัสผ่านรูทของคุณคุณควรเรียกใช้:

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

ตรวจสอบให้แน่ใจว่าได้เปลี่ยนรหัสผ่านเป็นรหัสผ่านที่คาดเดายากที่คุณเลือก จากนั้นให้โหลดเซิร์ฟเวอร์ของคุณใหม่เพื่อให้การเปลี่ยนแปลงใหม่มีผลใช้งานสิ่งนี้

FLUSH PRIVILEGES;

ดังนั้นอีกครั้งตรวจสอบวิธีการรับรองความถูกต้องซึ่งใช้โดย mysql ของคุณโดยคำสั่งนี้:

SELECT user,authentication_string,plugin,host FROM mysql.user;

และตอนนี้ผลลัพธ์คือ:

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+

อย่างที่คุณเห็นในตารางสิทธิ์บัญชีรูทของmysql_native_password คุณ ตอนนี้คุณสามารถออกจากเปลือกหอย

exit;

เพียงเท่านี้คุณควรเริ่ม mysql ใหม่sudo service mysql restartอีกครั้ง ตอนนี้คุณสามารถเข้าสู่ mysql ในฐานะบัญชีรูทด้วยรหัสผ่านของคุณได้อย่างง่ายดาย


ฉันคิดว่ามันมาจาก DigitalOcean ซึ่งเป็นทางออกเดียวที่ทำงานกับฉันบน Ubuntu 18.04 ที่ทำงานบน Virtual Box
Kemal

มันทำงานได้อย่างสมบูรณ์ใน Ubuntu 18.04 ขอบคุณ
mahfuz

12

หากคุณต้องการเปลี่ยนรหัสผ่านรูทของ MySQL ในเทอร์มินัลให้ป้อน:

sudo dpkg-reconfigure mysql-server-5.5

MySQL daemon จะหยุดทำงานและคุณจะได้รับแจ้งให้ป้อนรหัสผ่านใหม่


1
นี่เป็นวิธีที่ดีกว่ามากในการทำ ฉันไม่สามารถเรียกใช้คำสั่งก่อนหน้านี้ได้เนื่องจากข้อผิดพลาด mysql บางอย่าง ...
Andy

sudo dpkg-reconfigure mysql-server-5.7 บน Ubuntu 16.04
Nick Barrett

2
ฉันวิ่งsudo dpkg-reconfigure mysql-server-5.7บน Ubuntu 16.04 ไม่ได้แจ้งให้ป้อนรหัสผ่านใหม่
Franck Dernoncourt

ถ้ามันบอกว่า mysql-server is broken or not fully installedใครสามารถใช้sudo apt purge mysql*และsudo apt install mysql-server
Pavel

12

มันใช้งานได้อย่างมีเสน่ห์เหมือนที่ฉันทำกับ Ubuntu 16.04 ลิงก์เครดิตเต็มด้านล่างตามที่ฉันได้รับจากที่นั่น [ https://coderwall.com/p/j9btlg/reset-the-mysql-5-7-root-password-in-ubuntu-16-04-lts เหมือนพี่น้อง 1]

หยุด MySQL

sudo service mysql stop

สร้างไดเรกทอรีบริการ MySQL sudo mkdir / var / run / mysqld

ให้สิทธิ์ผู้ใช้ MySQL ในการเขียนไปยังไดเรกทอรีบริการ

sudo chown mysql: /var/run/mysqld

เริ่ม MySQL ด้วยตนเองโดยไม่ตรวจสอบสิทธิ์หรือเชื่อมต่อเครือข่าย

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

เข้าสู่ระบบโดยไม่มีรหัสผ่าน

mysql -uroot mysql

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

UPDATE mysql.user SET 
authentication_string=PASSWORD('YOURNEWPASSWORD'), 
plugin='mysql_native_password' WHERE User='root';
EXIT;

ปิด MySQL

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

เริ่มบริการ MySQL ตามปกติ

sudo service mysql start

11
  1. หยุดบริการ MySQL sudo mysql หยุด

  2. สร้างไดเรกทอรีบริการ MySQL sudo mkdir / var / run / mysqld

  3. ให้สิทธิ์ผู้ใช้ MySQL ในการเขียนไปยังไดเรกทอรีบริการ sudo chown mysql: / var / run / mysqld

  4. เริ่ม MySQL ด้วยตนเองโดยไม่ตรวจสอบสิทธิ์หรือเชื่อมต่อเครือข่าย sudo mysqld_safe --skip-grant-tables --skip-networking &

5. เข้าสู่ระบบโดยไม่ต้องใช้รหัสผ่าน mysql -root mysql

6. อัพเดตรหัสผ่านสำหรับผู้ใช้รูท

อัพเดท mysql.user SET authentication_string = PASSWORD ('YOURNEWPASSWORD'), plugin = 'mysql_native_password' WHERE ผู้ใช้ = 'รูต' และโฮสต์ = '%'; EXIT;

  1. ปิด MySQL sudo mysqladmin -S /var/run/mysqld/mysqld.sock ปิดระบบ

  2. เริ่มบริการ MySQL ตามปกติ บริการ sudo mysql เริ่มต้น


1
สวัสดีครับคำตอบนี้ทำงานสำหรับฉัน แต่ผมต้องใช้คำสั่งอื่น: โดยไม่ต้องUPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root'; AND Host='%'ขอบคุณ!
David Corral

10

โซลูชันนี้เป็นของ MySQL รุ่นก่อนหน้า โดยการเข้าสู่ MySQL โดยใช้การตรวจสอบซ็อกเก็ตคุณสามารถทำได้

sudo mysql -u root

จากนั้นคำสั่งต่อไปนี้สามารถรันได้

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

รายละเอียดมีอยู่ที่นี่


1
ฉันไม่สามารถเข้าสู่ระบบได้sudo mysql -u rootแต่ฉันสามารถทำตามsudo mysqlและเรียกใช้ALTER USERคำสั่งได้
itsols

ฉันได้รับข้อผิดพลาดนี้: "รหัสผ่านของคุณไม่เป็นไปตามข้อกำหนดของนโยบายปัจจุบัน" ผมสามารถที่จะแก้ไขปัญหานี้ได้ที่นี่: stackoverflow.com/a/43094873/9073437 หลังจากตั้งค่านโยบายรหัสผ่านที่แก้ไขแล้วทุกอย่างทำงานได้ดี
Grandtour

10

นี่คือทางออกสำหรับฉัน ฉันทำงานที่ Ubuntu 18.04: https://stackoverflow.com/a/46076838/2400373

แต่การเปลี่ยนแปลงนี้มีความสำคัญในขั้นตอนสุดท้าย:

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost'; 

เอ้ย! ขอบคุณมาก! นี่เป็นวิธีเดียวที่ทำงานในกรณีของฉัน ลืมสคริปต์การติดตั้งที่มีความปลอดภัยแบบโง่ ๆ เพราะมันทำให้ฉันเปิดกว้างให้กับผู้ใช้โดยไม่ต้องขอรหัสผ่าน ... ถ้า Linux / Ubuntu สำหรับผู้ใช้ที่คำนึงถึงความปลอดภัยแล้วทำไมมันยากที่จะปกป้องแอพพลิเคชันที่สำคัญเช่นเซิร์ฟเวอร์ MySQL ?
โทมัสเออ

7

สำหรับ Ubuntu 18.04 และ mysql รุ่น 14.14 Distrib 5.7.22 ทำตามขั้นตอนด้านล่างเพื่อรีเซ็ตรหัสผ่าน mysql

ขั้นตอนที่ 1

sudo systemctl stop mysql

ขั้นตอนที่ 2

sudo systemctl edit mysql

คำสั่งนี้จะเปิดไฟล์ใหม่ในโปรแกรมแก้ไข nano ซึ่งคุณจะใช้ในการแก้ไขการแทนที่บริการของ MySQL สิ่งเหล่านี้เปลี่ยนพารามิเตอร์การบริการเริ่มต้นสำหรับ MySQL ไฟล์นี้จะว่างเปล่าดังนั้นเพิ่มเนื้อหาต่อไปนี้:

[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid --skip-grant-tables --skip-networking

ขั้นตอนที่ 3

sudo systemctl daemon-reload
sudo systemctl start mysql

ขั้นตอนที่ 4

sudo mysql -u root

ขั้นตอนที่ 5

FLUSH PRIVILEGES;

ขั้นตอนที่ 6

UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHEREuser = 'root';

ขั้นตอนที่ 7

UPDATE mysql.user SET plugin ='mysql_native_password' WHERE user = 'root';

ขั้นตอนที่ 8

sudo systemctl revert mysql

และในที่สุดก็

sudo systemctl restart mysql

ตอนนี้สนุกกับ


ฉันคิดว่าคุณพลาดเนื้อหาในขั้นตอนที่ 2 มันไม่สมบูรณ์
ลูคัสเมนเดสโมตะดาฟอนเซคา

6

Echoing rogerdpack ความคิดเห็น: หากคุณไม่ทราบรหัสผ่านรูทของ MySQL และคุณไม่สนใจข้อมูล / การตั้งค่า MySQL คุณสามารถติดตั้งใหม่และรีเซ็ตรหัสผ่านของรูทดังต่อไปนี้:

sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo rm -rf /var/lib/mysql
sudo apt-get install -y mysql-server mysql-client 

ระหว่างการติดตั้งคุณสามารถเลือกรหัสผ่านของรูทได้:

ป้อนคำอธิบายรูปภาพที่นี่


2
ฉันหวังว่าฉันจะเริ่มต้นที่นี่แทนที่จะเสียเวลาหนึ่งชั่วโมงในการต่อสู้เพื่อพยายามรีเซ็ตรหัสผ่าน
Eric Seastrand

3

หากคุณรู้รหัสผ่านปัจจุบันของคุณคุณไม่จำเป็นต้องหยุดเซิร์ฟเวอร์ mysql เปิดเทอร์มินัลอูบุนตู เข้าสู่ระบบโดยใช้ mysql:

mysql - username -p

จากนั้นพิมพ์รหัสผ่านของคุณ สิ่งนี้จะนำคุณเข้าสู่คอนโซล mysql ภายในคอนโซลพิมพ์:

> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

จากนั้นล้างสิทธิ์โดยใช้:

> flush privileges;

จากนั้นคุณก็ทำ


2

เมื่อคุณใช้ MySQL PASSWORD()บนระบบที่คุณต้องการเปลี่ยนรหัสผ่านมันอาจทำให้รหัสผ่านปรากฏขึ้นในการเข้าสู่ระบบ MySQL ใน cleartext [ ต้นฉบับ ] ทำให้พวกเขาสำรองข้อมูลของพวกเขา ฯลฯ มีความปลอดภัยเช่นเดียวกับรหัสผ่านดูเหมือนฉันฝันร้ายดังนั้นฉันชอบที่จะทำดังนี้

  1. บนท้องถิ่นเครื่องทำงานนี้ด้วยรหัสผ่านของคุณ:

     mysql -u someuser -p < <(echo "SELECT PASSWORD('mypass');")

    สังเกตช่องว่างด้านหน้าเพื่อป้องกันไม่ให้ปรากฏในประวัติทุบตี (สำหรับ distros อื่นที่ไม่ใช่ Ubuntu สิ่งนี้อาจทำงานได้แตกต่าง - แหล่งที่มา )

  2. บนเครื่องเซิร์ฟเวอร์ของคุณให้ใช้คำสั่งต่อไปนี้เพื่อเปลี่ยนรหัสผ่านรูทของ MySQL (แทนที่myhashด้วยแฮชของรหัสผ่านตามที่พิมพ์โดยคำสั่งแรก):

    mysql -u root -p < <(echo "SET PASSWORD FOR root@localhost = 'myhash';")
  3. อีกทางเลือกหนึ่งขอให้หวาดระแวงสักหน่อย: บนเครื่องของคุณให้ล้างหน้าจอเทอร์มินัลด้วยclearและล้างเทอร์มินัลเลื่อนกลับของคุณเสมือนเพื่อซ่อนรหัสผ่าน cleartext ที่ปรากฏในคำสั่งด้านบน


2

ในการอัปเดตรหัสผ่านผู้ใช้ "root" Mysql คุณต้องจำไว้ว่าคุณต้องได้รับอนุญาตจากผู้ใช้ขั้นสูง หากคุณมีสิทธิ์ผู้ใช้ขั้นสูงให้ลองคำสั่งต่อไปนี้:

MySQL 5.7.6 และใหม่กว่า

sudo su
service mysql stop
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
\q;
exit
mysql -u root -p MyNewPass

MySQL 5.7.5 และก่อนหน้า

sudo su
service mysql stop
mysql -u root
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
\q;
exit
mysql -u root -p MyNewPass

2

คุณไม่ต้องการทั้งหมดนี้ เพียงเข้าสู่ระบบ:

mysql -u root -p

จากนั้นเปลี่ยนรหัสผ่านของผู้ใช้ปัจจุบันเป็นmysql>พรอมต์:

mysql> set password=password('the_new_password');
mysql> flush privileges;

1
นี่เป็นวิธีที่ง่ายที่สุด! มันทำงานให้ฉันด้วย mysql 5.7.21-0ubuntu0.17.10.1
Sergio Belevskij

2

คำตอบส่วนใหญ่ในหัวข้อนี้ล้าสมัยแล้ว การเปลี่ยนแปลงที่สำคัญสองประการเกิดขึ้นใน MySQL จนถึงการเขียนคำตอบนี้:

1- ฟิลด์ 'รหัสผ่าน' ในตารางผู้ใช้ถูกแทนที่ด้วยคอลัมน์ 'authentication_string'

2- ฟังก์ชั่นการเข้ารหัส 'รหัสผ่าน': PASSWORD ("ของข้อความบางข้อความ") เลิกใช้แล้ว

โปรดอ้างอิงถึงลิงค์นี้สำหรับข้อมูลเพิ่มเติม: dev.mysql.com/doc/refman/8.0/th/resetting-permissions.html


1

แทนที่จะรีเซ็ตรหัสผ่านจะมีวิธีแก้ไขในเครื่องท้องถิ่นหากคุณตั้งค่าphpmyadminให้เชื่อมต่อโดยไม่ต้องให้รหัสผ่านหรือชื่อผู้ใช้ ตรวจสอบนี้โดยเริ่มต้นmysql, apacheฯลฯ ผมได้xamppติดตั้งในเครื่องท้องถิ่นของฉัน ดังนั้นการเริ่มต้น xampp จะเริ่มบริการที่จำเป็นทั้งหมด ตอนนี้จะhttp://localhost/phpmyadminแสดงฐานข้อมูลทั้งหมดให้ฉัน สิ่งนี้เป็นการยืนยันว่าคุณได้บันทึกชื่อผู้ใช้และรหัสผ่านในไฟล์ปรับแต่งของ phpmyadmin ซึ่งสามารถพบได้ในตำแหน่งphpmyadminติดตั้ง หากคุณxamppติดตั้งphpmyadminโฟลเดอร์แล้วสามารถพบได้ในโฟลเดอร์รูทของxamppการติดตั้ง ค้นหาคำpasswordในconfig.inc.phpไฟล์ มีคุณจะพบและ password username


1

คุณสามารถเปลี่ยนรหัสผ่าน mysql ได้อย่างง่ายดายหากใช้งานบน xampp ผ่าน phpadmin gui ที่ให้ไว้

phpMyAdmin -> User Accounts -> Edit Privileges (Select the intended user) -> Change Password (Tab)

1

สำหรับ mysql 5.6 คำสั่งนี้ใช้งานได้และคุณสามารถตั้งรหัสผ่านผ่านตัวช่วยสร้าง:

sudo dpkg-reconfigure mysql-server-5.6

ฉันพยายาม แต่มันใช้งานไม่ได้ .. ฉันได้รับข้อผิดพลาดด้านล่างนี้ .. คุณช่วยได้ไหม การติดตั้ง MySQL นี้ได้รับการอัพเกรดเป็น 5.7.21 ให้ใช้ - บังคับถ้าคุณยังต้องการเรียกใช้ mysql_upgrade
Vijaysinh Parmar

1

คุณสามารถลองขั้นตอนเหล่านี้เพื่อรีเซ็ตรหัสผ่าน root ของ mysql 5.7:

หยุดบริการ Mysql อันดับที่ 1

sudo /etc/init.d/mysql stop 

เข้าสู่ระบบด้วย root โดยไม่ต้องใช้รหัสผ่าน sudo mysqld_safe --skip-grant-tables &

หลังจากเข้าสู่ระบบ mysql terminal คุณควรต้องใช้คำสั่ง execute เพิ่มเติม:

use mysql;




UPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root';


flush privileges;


sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

หลังจากคุณรีสตาร์ทเซิร์ฟเวอร์ mysql ของคุณหากคุณยังคงพบข้อผิดพลาดคุณต้องไปที่: รีเซ็ตรหัสผ่าน root ของ MySQL 5.7 Ubuntu 16.04


1

คุณสามารถใช้คำสั่งนี้:

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

หลังจากนั้นโปรดใช้ flush:

FLUSH PRIVILEGES;

1

การตั้งรหัสผ่าน MySQL

  1. หยุดบริการฐานข้อมูล MySQL

sudo /etc/init.d/mysql หยุด

  1. สร้างไดเรกทอรี mysqld ใหม่

sudo mkdir / var / run / mysqld /

  1. ให้ผู้ใช้ mysql เข้าถึง

sudo chown mysql / var / run / mysqld /

  1. เริ่ม MySQL ในเซฟโหมด ...

sudo mysqld_safe --skip-grant-tables &

  1. เข้าสู่ระบบเซิร์ฟเวอร์ฐานข้อมูลโดยไม่มีรหัสผ่าน

sudo mysql -u root

  1. ใช้ฐานข้อมูล mysql เริ่มต้น

ใช้ mysql

  1. เปลี่ยนรหัสผ่านรูท

update user set authentication_string=PASSWORD("New_Passwore_Here") where ผู้ใช้ = 'ราก';

  1. บันทึกการเปลี่ยนแปลง

    สิทธิ์ล้าง; ออกจาก;

  2. หยุด MySQL safe_mode และเริ่มบริการเริ่มต้นของ MySQL

sudo /etc/init.d/mysql หยุด

sudo /etc/init.d/mysql เริ่มทำงาน

  1. กลับเข้าสู่ฐานข้อมูล MySQL โดยใช้รหัสผ่านรูทใหม่

sudo mysql -u root -p

*** ที่มา: https://websiteforstudents.com/resetting-mysql-root-password-on-ubuntu-16-04-17-10-and-18-04-lts/


1

หากคุณรู้รหัสผ่านผู้ใช้ 'รูท' ให้เข้าสู่ mysql ด้วยข้อมูลประจำตัวนั้น จากนั้นดำเนินการแบบสอบถามต่อไปนี้เพื่ออัปเดตรหัสผ่าน

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_passowrd';

0

เมื่อเปลี่ยน / รีเซ็ตรหัสผ่าน MySQL คำสั่งต่อไปนี้ไม่ได้ช่วย ฉันพบว่าการเข้าไปในเทอร์มินัลและการใช้คำสั่งเหล่านี้ไม่มีจุดหมาย ใช้คำสั่ง sudo แทนทุกอย่างแทน ลบ SYSTEM 32 สำหรับ windows หากมีปัญหา


1
คำถามเกี่ยวกับubuntuระบบปฏิบัติการไม่ใช่ windows คุณหมายถึงอะไรโดยลบ SYSTEM 32 สำหรับ Windows ?
EhsanT

0

ในการรีเซ็ตหรือเปลี่ยนรหัสผ่านให้ป้อนsudo dpkg-reconfigure mysql-server-X.X(XX เป็นเวอร์ชั่น mysql ที่คุณติดตั้งเช่น 5.6, 5.7) จากนั้นคุณจะแจ้งให้หน้าจอที่คุณต้องตั้งรหัสผ่านใหม่จากนั้นในขั้นตอนถัดไปยืนยันรหัสผ่านและรอสักครู่ แค่นั้นแหละ.


0

ฉันต้องไปเส้นทางนี้บน Ubuntu 16.04.1 LTS เป็นคำตอบบางส่วนที่ผสมผสานกัน - แต่ก็ไม่มีใครช่วย ฉันใช้เวลาหนึ่งชั่วโมงหรือมากกว่านั้นลองใช้คำแนะนำอื่น ๆ ทั้งหมดจากเว็บไซต์ MySql กับทุกอย่างในที่สุดฉันก็ใช้งานได้ด้วย:

หมายเหตุ:ในขณะที่มันแสดงให้เห็นป้อนรหัสผ่านสำหรับรูทผู้ใช้ฉันไม่ได้มีรหัสผ่านเดิม ใช้เป็นรหัสผ่านใหม่

หมายเหตุ:ไม่มี /var/log/mysqld.log เท่านั้น /var/log/mysql/error.log

นอกจากนี้โปรดทราบว่าสิ่งนี้ไม่ได้ผลสำหรับฉัน:
sudo dpkg-reconfigure mysql-server-5.7

ไม่เช่นนั้น
sudo dpkg-reconfigure --force mysql-server-5.5

สร้างไดเรกทอรีบริการ MySQL
sudo mkdir /var/run/mysqld

ให้สิทธิ์ผู้ใช้ MySQL ในการเขียนไปยังไดเรกทอรีบริการ
sudo chown mysql: /var/run/mysqld

แล้ว:

  1. ฆ่า mysqld pid ปัจจุบัน
  2. เรียกใช้ mysqld ด้วย sudo / usr / sbin / mysqld &
  3. run / usr / bin / mysql_secure_installation

    เอาต์พุตจาก mysql_secure_installation

    root @ myServer: ~ # / usr / bin / mysql_secure_installation

    การรักษาความปลอดภัยการปรับใช้เซิร์ฟเวอร์ MySQL

    ป้อนรหัสผ่านสำหรับรูทผู้ใช้:

    ปลั๊กอินรหัสผ่านที่ถูกต้องสามารถใช้เพื่อทดสอบรหัสผ่านและปรับปรุงความปลอดภัย มันตรวจสอบความแข็งแกร่งของรหัสผ่านและอนุญาตให้ผู้ใช้ตั้งรหัสผ่านเหล่านั้นเท่านั้นซึ่งมีความปลอดภัยเพียงพอ คุณต้องการตั้งค่าปลั๊กอินรหัสผ่านที่ถูกต้องหรือไม่

    กด y | Y สำหรับใช่คีย์อื่น ๆ สำหรับไม่ใช่: ไม่ใช้รหัสผ่านที่มีอยู่สำหรับรูท เปลี่ยนรหัสผ่านสำหรับรูท? ((กด y | Y สำหรับใช่คีย์อื่น ๆ สำหรับไม่): y

    รหัสผ่านใหม่:

    ป้อนรหัสผ่านใหม่อีกครั้ง: ตามค่าเริ่มต้นการติดตั้ง MySQL มีผู้ใช้ที่ไม่ระบุชื่อทำให้ทุกคนสามารถเข้าสู่ระบบ MySQL ได้โดยไม่ต้องสร้างบัญชีผู้ใช้สำหรับพวกเขา สิ่งนี้มีไว้สำหรับการทดสอบเท่านั้นและเพื่อให้การติดตั้งราบรื่นขึ้น คุณควรลบออกก่อนที่จะย้ายเข้าสู่สภาพแวดล้อมการผลิต

    ลบผู้ใช้ที่ไม่ระบุชื่อหรือไม่ (กด y | Y สำหรับใช่คีย์อื่น ๆ สำหรับไม่): y สำเร็จ

    โดยปกติรูทควรได้รับอนุญาตให้เชื่อมต่อจาก 'localhost' เท่านั้น สิ่งนี้ทำให้มั่นใจได้ว่าใครบางคนไม่สามารถเดารหัสผ่านรูทได้จากเครือข่าย

    ไม่อนุญาตให้ล็อกอินรูทจากระยะไกล (กด y | Y สำหรับใช่คีย์อื่น ๆ สำหรับไม่): y สำเร็จ

    โดยค่าเริ่มต้น MySQL มาพร้อมกับฐานข้อมูลชื่อ 'ทดสอบ' ที่ทุกคนสามารถเข้าถึงได้ สิ่งนี้มีไว้สำหรับการทดสอบเท่านั้นและควรลบออกก่อนย้ายเข้าสู่สภาพแวดล้อมการผลิต

    ลบฐานข้อมูลทดสอบและเข้าถึงหรือไม่ (กด y | Y สำหรับใช่คีย์อื่น ๆ สำหรับไม่): y

    • กำลังวางฐานข้อมูลทดสอบ ... สำเร็จ

    • กำลังลบสิทธิ์ในฐานข้อมูลทดสอบ ... สำเร็จ

    การโหลดตารางสิทธิ์จะทำให้มั่นใจได้ว่าการเปลี่ยนแปลงทั้งหมดที่ทำไปจะมีผลทันที

    โหลดตารางสิทธิ์เดี๋ยวนี้หรือไม่ (กด y | Y สำหรับใช่คีย์อื่น ๆ สำหรับไม่): y สำเร็จ

    ทุกอย่างเสร็จเรียบร้อย!

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