วิธีค้นหารหัสผ่านรูทของ MySQL


167

ฉันไม่สามารถรู้รหัสผ่านรูทของ MySQL ได้ ฉันจะทราบได้อย่างไร มีไฟล์ที่เก็บรหัสผ่านนี้หรือไม่?

ฉันกำลังติดตามลิงก์นี้แต่ฉันไม่มีไดเรกทอรี directadmin ในเครื่อง


ค้นพบโดยการค้นหาอย่างง่ายของ Google: dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html
Arran

11
รหัสผ่านรูทเริ่มต้นคือ - รอ - "รูท" (โดยไม่ใส่เครื่องหมายอัญประกาศ) หรือไม่มีรหัสผ่านเลย (และเป็นเซิร์ฟเวอร์ mysql ของคุณจริงๆ )
Nikola Bogdanović

ใช่มันเป็นเซิร์ฟเวอร์ mysql ในแล็ปท็อปของฉัน
Om3ga

ดังนั้นใครบางคนเพิ่งผ่านคำถามนี้และทิ้ง downvote ในคำตอบที่ถูกต้องและเกี่ยวข้องกัน ?
lanzz

คำตอบ:


142

ขอบคุณ @thusharaK ฉันสามารถรีเซ็ตรหัสผ่านรูทได้โดยไม่ทราบรหัสผ่านเก่า

บน Ubuntu ฉันทำสิ่งต่อไปนี้:

sudo service mysql stop
sudo mysqld_safe --skip-grant-tables --skip-syslog --skip-networking

จากนั้นเรียกใช้ mysql ในเทอร์มินัลใหม่:

mysql -u root

และเรียกใช้แบบสอบถามต่อไปนี้เพื่อเปลี่ยนรหัสผ่าน:

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

ใน MySQL 5.7 เขตข้อมูลรหัสผ่านในเขตข้อมูลตาราง mysql.user ถูกลบออกตอนนี้ชื่อเขตข้อมูลคือ 'authentication_string'

ออกจากเซฟโหมด mysql และเริ่มบริการ mysql โดย:

mysqladmin shutdown
sudo service mysql start

24
ฉันต้องใช้mysqladmin -u root -p shutdownด้วยรหัสผ่านใหม่
SL Barth - Reinstate Monica

2
ขั้นตอนการสอนที่ดีเป็นพิเศษ: จากนั้นเรียกใช้ mysql ในเทอร์มินัลใหม่
Mohammed Subhi Sheikh Quroush

8
ฉันทำสิ่งนี้ไม่mysql -u rootได้ มันแสดงข้อผิดพลาดAccess denied
Avinash Raj

4
@AvinashRaj: ลองทำเช่นนี้: sudo mysql -u root
Allen Gingrich

น่ากลัว ฉันเข้าใจสิ่งที่ทำงานใน RHEL 7: เทอร์มินัล 1: บริการ sudo mysql หยุด sudo mysqld_safe --skip-grant-tables --skip-syslog --skip-networking Terminal 2: mysql -u root UPDATE mysql.user SET รหัสผ่าน = PASSWORD ('รหัสผ่านใหม่') WHERE User = 'root'; สิทธิในการชำระล้าง mysqladmin -u root -p shutdown หมายเหตุ: เมื่อคุณปิด mysqladmin คุณจะเห็นเซฟโหมดออกจาก Terminal 1 sudo service mysql start นั่นแหล่ะและมันทำงานได้อย่างมีเสน่ห์ด้วยรหัสผ่านใหม่!
ผู้ใช้ StackOverFlow

65

คุณไม่สามารถดูรหัสผ่านที่แฮช สิ่งเดียวที่คุณทำได้คือรีเซ็ตมัน!

หยุด MySQL:

sudo service mysql stop

หรือ

$ sudo /usr/local/mysql/support-files/mysql.server stop

เริ่มในเซฟโหมด:

$ sudo mysqld_safe --skip-grant-tables

(เหนือบรรทัดคือคำสั่งทั้งหมด)

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

$ mysql -u root

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

MySQL 5.7 ขึ้นไป:

mysql> use mysql; 
mysql> update user set authentication_string=password('password') where user='root'; 

เริ่ม MySQL:

sudo mysql start

หรือ

sudo /usr/local/mysql/support-files/mysql.server start

รหัสผ่านใหม่ของคุณคือ 'รหัสผ่าน'


sudo /usr/local/mysql/support-files/mysql.server หยุด sudo: /usr/local/mysql/support-files/mysql.server: ไม่พบคำสั่ง
Isuru

จะทำอย่างไรในกรณีนี้?
Isuru

ดูเหมือนว่า mysql ไม่ได้ติดตั้งอย่างถูกต้อง ถอนการติดตั้งอย่างถูกต้องและติดตั้งใหม่
tk_

ขอบคุณมาก ๆ. สิ่งที่แปลกไปกับฉัน mysql_secure_installationและรากก็ไม่ได้ให้ความร่วมมืออีกต่อไป การauthentication_stringตั้งค่าทำอะไร
จะ

3
หากต้องการรีสตาร์ทให้ลองmysqladmin -u root -p shutdownใช้รหัสผ่านใหม่แล้วsudo service mysql start
forumulator

37

MySQL 5.7 ขึ้นไปจะบันทึกรากในล็อกไฟล์ MySQL

โปรดลองสิ่งนี้:

sudo grep 'temporary password' /var/log/mysqld.log

ในกรณีของฉันรหัสผ่านไม่ได้อยู่ที่นี่ อย่างไรก็ตามแทนที่จะ/var/log/mysql/error.logมีคำเตือนเกี่ยวกับรหัสผ่านรูทว่างเปล่า - ดังนั้นวันนี้ฉันจึงบันทึก :) :)
Janaka Bandara

19

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

mysql -u root -p

จะไม่ทำงานเลยแม้ว่าคุณจะใช้รหัสผ่านที่ถูกต้อง !!! มันจะปฏิเสธการเข้าถึงไม่ว่าคุณจะใส่อะไรลงไป

แต่คุณต้องใช้

sudo mysql

ที่จะทำงานโดยไม่ต้องใช้รหัสผ่านใด ๆ จากนั้นเมื่อคุณต้องการพิมพ์

 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password you want to use';

จากนั้นออกจากระบบและตอนนี้สิ่งที่เลือดจะยอมรับรหัสผ่านของคุณในที่สุด


17

คุณหามันไม่เจอ มันถูกเก็บไว้ในฐานข้อมูลซึ่งคุณต้องใช้รหัสผ่านรูทเพื่อเข้าถึงและแม้ว่าคุณจะได้รับการเข้าถึงอย่างใดก็ตามมันก็จะถูกแฮชด้วยแฮชแบบทางเดียว คุณสามารถรีเซ็ตได้: http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html


14

ทำตามขั้นตอนเหล่านี้เพื่อรีเซ็ตรหัสผ่านในระบบ Windows

  1. หยุดบริการ Mysql จากตัวจัดการงาน

  2. สร้างไฟล์ข้อความและวางคำสั่งด้านล่าง

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

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


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

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

  1. บันทึกเป็นและวางไว้ในmysql-init.txt'C' drive

  2. เปิดพร้อมท์คำสั่งและวางต่อไปนี้

C:\> mysqld --init-file=C:\\mysql-init.txt


2
นี่เป็นการช่วยชีวิตเคล็ดลับที่ยอดเยี่ยม!
Nicholas Kreidberg

ทำงานใน mysqld --init-file=/root/m.txtCentos7 ฉันเพิ่มดังกล่าวข้างต้นคำสั่งSET PASSWORD FOR 'root'@'localhost' = PASSWORD('yournewpassword');เพื่อ/root/m.txt
ด้าร์ Bashyal

8

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

shell> mysql -u root --password=
mysql>

ในการเปลี่ยนรหัสผ่านให้นำเปลือกยูนิกซ์กลับมาและพิมพ์:

shell> mysqladmin -u root --password= password root

รหัสผ่านใหม่คือ 'รูท' ตอนนี้เชื่อมต่อกับเซิร์ฟเวอร์:

shell> mysql -u root --password=
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

โอ๊ะรหัสผ่านมีการเปลี่ยนแปลง ใช้อันใหม่root:

shell> mysql -u root --password=root
...
blah, blah, blah : mysql welcome banner
...
mysql> 

บิงโก! ใหม่ทำสิ่งที่น่าสนใจ

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

Maurycy


1
ตอนนี้ไม่ได้ใช้รหัสผ่าน แต่ใช้ซ็อกเก็ตที่ผ่านการรับรองความถูกต้องแล้ว ดังนั้นเพียงแค่เปลี่ยนรหัสผ่านไม่ดีพออีกต่อไป
Kit Ramos

7

ที่นอกเหนือไปจากคำตอบอื่น ๆ ในการติดตั้ง cPanel, รหัสผ่าน root MySQL /root/.my.cnfถูกเก็บไว้ในไฟล์ชื่อ (และบริการ cpanel รีเซ็ตบริการอีกครั้งเมื่อมีการเปลี่ยนแปลงดังนั้นคำตอบอื่น ๆ ที่นี่จะไม่ช่วย)


6

คุณสามารถดูรหัสผ่าน root ของ mysql ได้ดีฉันได้ลองใช้กับ mysql 5.5 แล้วดังนั้นไม่ทราบว่าเวอร์ชั่นใหม่อื่น ๆ ใช้งานได้ดีหรือไม่

nano ~/.my.cnf

4

สิ่งนี้ใช้ได้กับฉัน:

บนเทอร์มินัลพิมพ์ต่อไปนี้

$ sudo mysql -u root -p

ป้อนรหัสผ่าน: // เพียงกด Enter

MySQL>


ดูเหมือนว่าเซิร์ฟเวอร์ mysql ไม่ได้ใช้รหัสผ่านรับรองความถูกต้องโดยค่าเริ่มต้นอีกต่อไป คุณต้องเริ่มไคลเอนต์ mysql ในฐานะผู้ใช้ขั้นสูง (sudo) เพื่อเข้าใช้งานจนกว่าคุณจะเปลี่ยนวิธีการเข้าสู่ระบบ
Kit Ramos

4

รหัสผ่านเริ่มต้นที่ใช้งานได้สำหรับฉันหลังจากติดตั้งเซิร์ฟเวอร์ mysql ทันทีคือ: mysql


2
บางทีเขาอาจไม่ตอบคำถาม แต่หลายคนที่มาที่นี่อาจพบว่ามันแก้ปัญหาได้
Ohad Cohen

3

ขั้นตอนการเปลี่ยนแปลงขึ้นอยู่กับรุ่นของ MySql ทำตามขั้นตอนตรงตามที่อธิบายไว้สำหรับรุ่นของคุณ:

  • HINTS - อ่านก่อนหน้าคำแนะนำสำหรับ MySql เวอร์ชันของคุณ *

  • ในขั้นตอนที่ 5: แทนที่จะเรียกใช้ CMD สร้างทางลัดบนเดสก์ท็อปของคุณเรียก CDM.exe จากนั้นคลิกขวาที่ทางลัดแล้วเลือก "ดำเนินการในฐานะผู้ดูแลระบบ"

  • ในขั้นตอนที่ 6: ข้ามเวอร์ชันแรกที่เสนอของคำสั่งและดำเนินการหนึ่งในสองคำสั่งที่มีพารามิเตอร์ --defaults-file

  • เมื่อคุณดำเนินการคำสั่งถ้าทุกอย่างเรียบร้อยหน้าต่าง CMD จะยังคงเปิดอยู่และคำสั่งของขั้นตอนที่ 6 ยังคงดำเนินการ เพียงปิดหน้าต่าง (คลิก 'x') จากนั้นบังคับให้ปิด MySQl จากตัวจัดการงาน

  • ลบไฟล์ด้วยคำสั่ง SQL และเริ่ม MySQL อีกครั้ง ต้องเปลี่ยนรหัสผ่านทันที

5.0 http://dev.mysql.com/doc/refman/5.0/th/resetting-permissions.html

5.1 http://dev.mysql.com/doc/refman/5.1/th/resetting-permissions.html

... เพียงแค่เปลี่ยนเวอร์ชั่นในลิงค์ (5.5, 5.6, 5.7)


3

ในไฟล์ ".namename" .err ของคุณภายในโฟลเดอร์ data MySQL ทำงานให้ลองค้นหาสตริงที่ขึ้นต้นด้วย:

"สร้างรหัสผ่านชั่วคราวสำหรับ roor @ localhost"

คุณสามารถใช้ได้

less /mysql/data/dir/hostname.err 

จากนั้นคำสั่ง slash ตามด้วยสตริงที่คุณต้องการค้นหา

/"A temporary password"

จากนั้นกด n เพื่อไปยังผลลัพธ์ถัดไป


1

คำตอบที่ให้ไว้ที่นี่ดูเหมือนจะไม่เหมาะกับฉันเลยเคล็ดลับกลายเป็น: ALTER USER 'root' @ 'localhost' ที่ระบุด้วย mysql_native_password BY 'test';

(ตอบคำถามให้สมบูรณ์ที่นี่: https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/ )


0

ระบบ:

  • CentOS Linux 7
  • mysql Ver 14.14 Distrib 5.7.25

ขั้นตอน:

  1. เปิดเชลล์สองเซสชันโดยล็อกอินเป็นหนึ่งในผู้ใช้รูท Linux และอีกหนึ่งเป็นผู้ใช้ที่ไม่ใช่รูทพร้อมการเข้าถึงmysqlคำสั่ง

  2. ในรูทเซสชันของคุณให้หยุดผู้ฟัง mysqld ปกติและเริ่มฟังซึ่งข้ามการรับรองความถูกต้องของรหัสผ่าน ( หมายเหตุ: นี่เป็นความเสี่ยงด้านความปลอดภัยที่สำคัญเนื่องจากใครก็ตามที่เข้าถึงmysql คำสั่งสามารถเข้าถึงฐานข้อมูลของคุณโดยไม่ต้องใช้รหัสผ่าน และ / หรือปิดใช้งานการเข้าถึงเชลล์ก่อนทำสิ่งนี้):

    # systemctl stop mysqld
    # /usr/sbin/mysqld --skip-grant-tables -u mysql &

  3. ในเซสชั่น nonroot ของคุณเข้าสู่ mysql และตั้งรหัสผ่าน root ของ mysql:

    $ mysql
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

    mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
    Query OK, 0 rows affected, 1 warning (0.01 sec)

    mysql> quit;

  4. ในรูทเซสชันของคุณให้ฆ่าอินสแตนซ์ที่ไม่มีรหัสผ่านของ mysqld และกู้คืนผู้ฟัง mysqld ปกติเพื่อให้บริการ:

    # kill %1
    # systemctl start mysqld

  5. ในเซสชันที่ไม่ใช่รูทให้ทดสอบรหัสผ่านรูทใหม่ที่คุณกำหนดค่าไว้ด้านบน:

    $ mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor. Commands end with ; or \g.
    ...
    mysql>


-2

ฉันแก้ไขมันด้วยวิธีที่แตกต่างซึ่งอาจจะง่ายกว่าสำหรับบางคน

ฉันทำเช่นนี้เพราะฉันพยายามเริ่มต้นในเซฟโหมด แต่ไม่สามารถเชื่อมต่อกับข้อผิดพลาด: ข้อผิดพลาด 2002 (HY000): ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL ภายในผ่านซ็อกเก็ต '/var/run/mysqld/mysqld.sock' (2)

สิ่งที่ฉันทำคือการเชื่อมต่อตามปกติเป็น root:

$ sudo mysql -u root

จากนั้นฉันก็สร้างผู้ใช้ระดับสูงใหม่:

mysql> grant all privileges on *.* to 'myuser'@'%' identified by 'mypassword' with grant option;
mysql> quit

จากนั้นเข้าสู่ระบบเป็น myuser

$ mysql -u myuser -p -h localhost

การพยายามเปลี่ยนรหัสผ่านทำให้ฉันไม่มีข้อผิดพลาด แต่ไม่ได้ทำอะไรให้ฉันดังนั้นฉันจึงทิ้งและสร้างผู้ใช้รูทขึ้นมาใหม่

mysql> drop user 'root'@'localhost;
mysql> mysql> grant all privileges on *.* to 'root'@'localhost' identified by 'mypassword' with grant option;

ผู้ใช้รูทกำลังทำงานกับรหัสผ่านใหม่


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