การเปลี่ยนรหัสผ่านรูท MySQL


101

ฉันพยายามรีเซ็ตรหัสผ่านรูท MySQL ของฉัน ฉันเรียกใช้ mysqld_safe --skip-grant-tables อัปเดตรหัสผ่าน root และตรวจสอบตารางผู้ใช้เพื่อให้แน่ใจว่ามีอยู่ เมื่อรีสตาร์ท mysql daemon ฉันได้ลองเข้าสู่ระบบด้วยรหัสผ่านรูทใหม่ที่ฉันเพิ่งตั้งค่าและยังคงถูกปฏิเสธการเข้าถึงสำหรับข้อผิดพลาด 'root' ของผู้ใช้ ฉันได้ลองลบและติดตั้ง mysql ใหม่ทั้งหมดแล้ว (รวมถึงการลบไฟล์ my.cnf) แต่ก็ยังไม่มีโชค ใครมีคำแนะนำเกี่ยวกับสิ่งที่ฉันสามารถทำได้ต่อไป?

ขอบคุณล่วงหน้า


2
โปรดโพสต์ข้อผิดพลาดที่แท้จริงของคุณ
Vishwanath Dalvi

17
ถ้าคุณไม่ได้ล็อคเอาไว้SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepassword'); จะปลอดภัยที่สุด
sabgenton

ฉันทำตามขั้นตอนในวิดีโอเพื่อเปลี่ยนรหัสผ่านในเซิร์ฟเวอร์ของฉันyoutu.be/gFo5DV_pSg8
เปรม


1
เวอร์ชันเซิร์ฟเวอร์: 8.0.20-0ubuntu0.20.04.1 (Ubuntu) ERROR 1064 (42000): คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่สอดคล้องกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณสำหรับไวยากรณ์ที่ถูกต้องเพื่อใช้ใกล้กับ 'PASSWORD ("1")' ที่บรรทัด 1 SET PASSWORD FOR 'root' @ 'localhost' = PASSWORD ("somepassword");
discipleartem

คำตอบ:


133
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypass');
FLUSH PRIVILEGES;

7
สิ่งนี้ใช้ได้ผลสำหรับฉันใน 5.7 ในขณะที่คำตอบที่ยอมรับไม่ใช่
Stoopkid

3
นี่เป็นวิธีแก้ไขที่ถูกต้องหากรหัสผ่านรูท MySQL ของคุณถูกตั้งค่าเป็นค่าว่าง
fschuindt

4
> อัปเดต mysql.user SET authentication_string = PASSWORD ('MyNewPass') WHERE user = 'root'; > สิทธิพิเศษในการล้าง ใน MySQL เวอร์ชัน 5.7.x ไม่มีฟิลด์รหัสผ่านอีกต่อไปในตาราง mysql มันถูกแทนที่ด้วย authentication_string
Robert Anthony S. Tribiana

2
สิ่งนี้ทำให้ฉันโอเค แต่ไม่ต้องทำอะไรเลย
Freedo

1
ต้องมีคำสั่งเพิ่มเติมFLUSH PRIVILEGESเพื่อให้การเปลี่ยนแปลงมีประสิทธิภาพโดยไม่ต้องรีสตาร์ทเซิร์ฟเวอร์ฐานข้อมูล
NetVicious

64

ดูได้จากคู่มืออ้างอิง MySQL:

mysql เข้าสู่ระบบครั้งแรก:

# mysql -u root -p

จากนั้นที่ mysql prompt ให้รัน:

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

แล้ว

FLUSH PRIVILEGES;

ดูข้อมูลเพิ่มเติมได้ที่หน้านี้: การรีเซ็ตรหัสผ่านรูท: ระบบ Unix


ฉันได้รับข้อผิดพลาด "คุณกำลังใช้โหมดการอัปเดตที่ปลอดภัยและคุณพยายามอัปเดตตารางโดยไม่มี WHERE ที่ใช้คอลัมน์ KEY ... " เมื่ออัปเดตรหัสผ่านของผู้ใช้ ดูstackoverflow.com/questions/11448068/…สำหรับวิธีแก้ไขข้อผิดพลาดนี้
Joe Borysko

ข้อผิดพลาด 1064 (42000): คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่ตรงกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณสำหรับไวยากรณ์ที่ถูกต้องที่จะใช้ใกล้ '(' MyNewPass ') WHERE User =' root '' ที่บรรทัด 1
discipleartem

31
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

คุณสามารถค้นหาการรีเซ็ตรหัสผ่านรูทได้ในเอกสาร MySQL


คำถามนี้ใช้ได้สำหรับฉัน แต่รหัสผ่านใหม่ไม่ทำงาน (การเข้าถึงถูกปฏิเสธ) มันเป็นเพียงการเริ่มต้นในการทำงานหลังจากที่ฉันสร้างผู้ใช้รากaskubuntu.com/a/784347/160368
hlcs

1
ใช้ได้กับฉันบน MySQL 8.0.20 และหลังจากเริ่มต้นโฟลเดอร์ข้อมูลโดยใช้คำสั่งนี้mysqld --initialize --console
A.Henteti

27

นี่คือคำตอบที่อัปเดตสำหรับ WAMP v3.0.6 ขึ้นไป

> UPDATE mysql.user 
> SET authentication_string=PASSWORD('MyNewPass') 
> WHERE user='root';

> FLUSH PRIVILEGES;

ใน MySQL เวอร์ชัน 5.7.x ไม่มีฟิลด์รหัสผ่านอีกต่อไปในตาราง mysql มันถูกแทนที่ด้วย authentication_string (สำหรับเทอร์มินัล / CLI)

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

FLUSH PRIVILEGES;

(ถ้าเป็น PHPMyAdmin หรือ Mysql GUI)


คำตอบนี้เป็นหนึ่งในไม่กี่คนที่บอกว่าmysql.userควรอัปเดตตาราง สังเกตว่าถ้าคุณกำลังใช้ฐานข้อมูลอื่น (กำหนดโดยuseคำสั่ง) คุณจะได้รับข้อผิดพลาดว่าuserไม่มีตาราง ขอบคุณครับ!
Aleksandar

1
เหมาะกับฉัน ฉันใช้ 5.7.x ไม่มีmysql.userตาราง คำตอบอื่น ๆ ไม่ล้าสมัย
Siwei Shen 申思维

ยินดีที่ได้ช่วย!!
Robert Anthony S. Tribiana

ฉันย้อนกลับเพราะเป็นความตั้งใจที่จะใช้> เนื่องจากเซมิโคลอนต่อบรรทัดที่มีไว้สำหรับเทอร์มินัล
Robert Anthony S. Tribiana

0 แถวที่ได้รับผลกระทบแถวที่ตรงกัน: 3 เปลี่ยน: 0 ... ?
trainoasis

22

เจอแล้ว! ฉันลืมแฮชรหัสผ่านเมื่อฉันเปลี่ยนรหัสผ่าน ฉันใช้แบบสอบถามนี้เพื่อแก้ปัญหาของฉัน:

update user set password=PASSWORD('NEW PASSWORD') where user='root';

ฉันลืมPASSWORD('NEW PASSWORD')รหัสผ่านและใส่รหัสผ่านใหม่เป็นข้อความธรรมดา


ให้แน่ใจว่าคุณกลับมาและยอมรับคำตอบของคุณเพื่อให้คนอื่นเห็นวิธีแก้ปัญหา
ghostJago

1
dev.mysql.com/doc/refman/5.0/en/resetting-permissions.htmlแสดงวิธีดำเนินการ--init-file=หากคุณระวัง
sabgenton

3
มีความคิดว่าทำไมเมื่อฉันใช้คำสั่งเดียวกันข้อผิดพลาดต่อไปนี้จะถูกส่งกลับ? ข้อผิดพลาด 1054 (42S22): คอลัมน์ที่ไม่รู้จัก 'รหัสผ่าน' ใน 'รายการฟิลด์'
Adrian M.

1
คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่ตรงกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณสำหรับไวยากรณ์ที่ถูกต้องที่จะใช้ใกล้ '(' รหัสใหม่ ') โดยที่ผู้ใช้ =' root '' ที่บรรทัด 1
discipleartem

21

โปรดทำตามขั้นตอนด้านล่าง

ขั้นตอนที่ 1. หยุด mysql

ขั้นตอนที่ 2. sudo mysqld_safe --skip-grant-tables

ขั้นที่ 3.mysql -u root

ขั้นตอนที่ 4.use mysql;

ขั้นตอนที่ 5show tables;

ขั้นตอนที่ 6describe user;

ขั้นตอนที่ 7.update user set authentication_string=password('1111') where user='root';

เข้าสู่ระบบด้วยรหัสผ่าน 1111


3
flush privilegesมีความสำคัญเป็นขั้นตอนสุดท้าย
Khom Nazid

มันเสร็จแล้วจริงๆฉันทำแบบฝึกหัดทั้งหมดเพื่อรีเซ็ตรหัสผ่าน ทุกอย่างใช้งานได้ยกเว้นเมื่อฉันเข้าสู่ระบบด้วยรหัสผ่านใหม่มันใช้ไม่ได้
Shidomaru NeveRage

หาก mysqld ไม่เริ่มทำงานและข้อความเช่น mysqld daemon นี้พร้อมฐานข้อมูลจาก / var / lib / mysql mysqld_safe mysqld จากไฟล์ pid /var/run/mysqld/mysqld.pid สิ้นสุดให้ทำสิ่งนี้: mkdir / var / run / mysqld chomod 777 / var / run / mysqld และเริ่มทั้งหมดจากการขอทาน
jokermt235

18

ฉันค้นหารอบ ๆ เช่นกันและอาจมีคำตอบบางอย่างที่เหมาะกับบางสถานการณ์

สถานการณ์ของฉันคือ Mysql 5.7 บนระบบ Ubuntu 18.04.2 LTS:

(รับสิทธิ์รูท)

$ sudo bash

(ตั้งรหัสผ่านสำหรับผู้ใช้ root db + ใช้ความปลอดภัยตามขั้นตอน)

# mysql_secure_installation

(ให้การเข้าถึงผู้ใช้รูทผ่านรหัสผ่านแทนซ็อกเก็ต)

(+ แก้ไข: เห็นได้ชัดว่าคุณต้องตั้งรหัสผ่านอีกครั้ง?)

(อย่าตั้งค่าเป็น "mySecretPassword" !!!)

# mysql -u root

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> set password for 'root'@'localhost' = PASSWORD('mySecretPassword'); 
mysql> FLUSH PRIVILEGES;
mysql> exit;

# service mysql restart

ขอบคุณzetacu (และerich ) มากสำหรับคำตอบที่ยอดเยี่ยมนี้ (หลังจากค้นหาสองสามชั่วโมง ... )

สนุก :-D

ส.

แก้ไข (2020):

วิธีนี้ใช้ไม่ได้แล้วดูคำถามนี้เพื่อใช้อ้างอิงในอนาคต ...


นี่เป็นคำตอบที่ดีที่สุดอย่างน้อยสำหรับเซิร์ฟเวอร์ mysql 5.7
ZoltánHajdú

คำตอบที่ดีที่สุด ขอบคุณ.
Luciano Fantuzzi

11

บน MySQL 8.0.4+

ในการอัปเดตผู้ใช้รูทปัจจุบัน:

select current_user();
set password = 'new_password';

ในการอัปเดตผู้ใช้รายอื่น:

set password for 'otherUser'@'localhost' = 'new_password';

ในการกำหนดนโยบายรหัสผ่านก่อนอัปเดตรหัสผ่าน:

set global validate_password.policy = 0;
set password = 'new_password';
set password for 'otherUser'@'localhost' = 'new_password';

วิธีอื่น / ที่ดีกว่าในการอัปเดตรหัสผ่านรูท:

mysql_secure_installation

ต้องการยึดติดกับการรับรองความถูกต้อง 5.x เพื่อให้คุณยังสามารถใช้แอปเดิมได้หรือไม่

บน my.cnf

default_authentication_plugin = mysql_native_password

ในการอัปเดตรูท:

set global validate_password.policy = 0;
alter user 'root'@'localhost' identified with mysql_native_password by 'new_password';

7

สิ่งนี้ได้ผลสำหรับฉัน -

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

https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/th/resetting-permissions-windows.html


ข้อผิดพลาด 1064 (42000): คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่ตรงกับเวอร์ชันเซิร์ฟเวอร์ MySQL ของคุณสำหรับไวยากรณ์ที่ถูกต้องเพื่อใช้ใกล้กับ 'ระบุโดย' MyNewPass '' ที่บรรทัด 1
trainoasis

เพิ่งคัดลอกค่าที่แน่นอนใน sql ผ่าน CLI: o
trainoasis

แน่นอน sshed ไปที่เซิร์ฟเวอร์ของฉัน + mysql -u root -p เพื่อไปที่ mysql cli
trainoasis

6

คุณต้องรีเซ็ตรหัสผ่าน! ขั้นตอนสำหรับ mac osx (ทดสอบและใช้งานได้) และ ubuntu

หยุด MySQL

$ 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

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

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


ฉันมีข้อความ: ฐานข้อมูลไม่ได้เลือก
ไมเมา

@Mimouni ลองดู: stackoverflow.com/questions/21944936/…
tk_

5

สำหรับ MySQL 5.7.6 และใหม่กว่า:

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

สำหรับ MySQL 5.7.5 และรุ่นก่อนหน้า:

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

3

สำหรับ mysql เวอร์ชันล่าสุดปัจจุบัน (8.0.16) ไม่มีคำตอบใดที่เหมาะกับฉัน

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

update user set authentication_string='test' where user='root';

หวังว่านี่จะช่วยได้





1

ลองคำตอบจาก @kta แต่ไม่ได้ผลสำหรับฉัน

ฉันใช้ MySQL 8.0

สิ่งนี้ใช้ได้ผลสำหรับฉัน:

mysql> SET PASSWORD FOR 'root'@'localhost' = 'yourpassword'


1
โปรดเพิ่มคำอธิบายให้กับรหัสของคุณ - วิธีนี้ช่วยแก้ปัญหาอายุเจ็ดขวบได้อย่างไร
Nico Haase

ดูเหมือนว่าไวยากรณ์จะมีการเปลี่ยนแปลงในช่วงเจ็ดปี ไม่ใช่การตัดรหัสผ่านด้วย PASSWORD () dev.mysql.com/doc/refman/8.0/th/set-password.html
kangkyu

รหัสผ่านกัญชาควรจะเป็นเลขฐานสิบหก 41 หลัก
ไมเมา

1

มีผู้มาเยี่ยมชมมากมาย แต่ฉันได้รับการช่วยเหลือวิธีนี้:

sudo mysqladmin -u root password 'my password'

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


สามารถใช้เพื่อรีเซ็ตรหัสผ่านผู้ใช้ root mysql โดยไม่ทราบรหัสเก่า แต่ตรวจสอบให้แน่ใจว่าไม่มีใครสามารถเข้าถึง syslog ของคุณได้เนื่องจากรหัสผ่านนี้ถูกบันทึกไว้:Aug 07 16:21:55 ubuntupc sudo[93250]: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/mysqladmin -u root password 'my password'
Gryu

0

หยุดบริการ wamp ทั้งหมดออกจาก wamp

เปิด notepad จากนั้นพิมพ์> ตั้งรหัสผ่านสำหรับ 'root' @ 'localhost' = PASSWORD ('');

จากนั้นบันทึกลงใน c: drive ด้วยชื่อใดก็ได้ .. เช่นนี้ "c: /example.txt"

ตอนนี้ไปที่ "wamp" falder wamp> bin> mysql> mysql (เวอร์ชันของคุณ)> bin ในพา ธ เคสของฉันคือ "C: \ wamp \ bin \ mysql \ mysql5.6.17 \ bin"

ตอนนี้คัดลอกเส้นทางของคุณจากนั้นเรียกใช้ cmd ด้วย (ctrl + r) จากนั้นพิมพ์ "cmd" (ป้อน)

พิมพ์ cd จากนั้นคลิกขวาที่ cmd และวาง path (enter) ตอนนี้พิมพ์ (mysqld --init-file = C: \ example.txt) โดยไม่ต้องวงเล็บปีกกาจากนั้น (ป้อน)

จากนั้นรีสตาร์ทพีซีหรือเปิด taskmgr และฆ่า mysqld.exe

เริ่ม wamp และรหัสผ่านของคุณจะถูกลบออก ...


0

สำหรับผู้ใช้ MacOS หากคุณลืมรหัสผ่านรูทของคุณคำตอบของ @theharaK ( https://stackoverflow.com/a/28601069/5628856 ) นั้นดี แต่มีเทคนิคเพิ่มเติมเล็กน้อย:

หากคุณกำลังใช้การตั้งค่าระบบเพื่อเริ่ม mysql serverside เพียงแค่

sudo mysqld_safe --skip-grant-tables

อาจไม่เหมาะกับคุณ

คุณต้องแน่ใจว่าอาร์กิวเมนต์บรรทัดคำสั่งเหมือนกันกับการกำหนดค่าเริ่มต้นระบบ

คำสั่งต่อไปนี้ใช้ได้กับฉัน:

/usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid --keyring-file-data=/usr/local/mysql/keyring/keyring --early-plugin-load=keyring_file=keyring_file.so --skip-grant-tables

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

ps aux | grep mysql

เพื่อตรวจสอบของคุณเอง



-1

บน Ubuntu

sudo dpkg-reconfigure mysql-server-5.5 

แทนที่5.5ด้วยเวอร์ชันปัจจุบันของคุณและคุณจะถูกถามรหัสผ่านรูทใหม่


ใน OS อะไร? สิ่งนี้ไม่สมเหตุสมผล
Khom Nazid

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