Thay đổi mật khẩu gốc MySQL


95

Tôi đã cố gắng đặt lại mật khẩu gốc MySQL của mình. Tôi đã chạy mysqld_safe --skip-Grant-table, cập nhật mật khẩu gốc và kiểm tra bảng người dùng để đảm bảo rằng nó ở đó. Sau khi khởi động lại daemon mysql, tôi đã thử đăng nhập bằng mật khẩu gốc mới mà tôi vừa đặt và vẫn bị từ chối Quyền truy cập vì lỗi người dùng 'gốc'. Tôi cũng đã thử xóa hoàn toàn và cài đặt lại mysql (bao gồm cả xóa tệp my.cnf) mà vẫn không thành công. Có ai có bất kỳ đề xuất về những gì tôi có thể làm tiếp theo?

Cảm ơn trước


2
xin vui lòng gửi lỗi thực tế của bạn
Vishwanath Dalvi

16
Nếu bạn không bị khóa SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepassword'); là an toàn nhất.
sabgenton

Tôi làm theo các bước trong video để thay đổi mật khẩu trong một trong những máy chủ của tôi youtu.be/gFo5DV_pSg8
Prem


1
Phiên bản máy chủ: 8.0.20-0ubuntu0.20.04.1 (Ubuntu) LỖI 1064 (42000): Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần 'PASSWORD ("1")' tại dòng 1 ĐẶT MẬT KHẨU CHO 'root' @ 'localhost' = PASSWORD ("somepassword");
đệ tử

Câu trả lời:


123

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


7
Điều này làm việc cho tôi trong 5,7 trong khi câu trả lời được chấp nhận là không.
Stoopkid

2
Đây là giải pháp chính xác nếu mật khẩu gốc MySQL của bạn được đặt thành trống.
fschuindt

3
> CẬP NHẬT mysql.user SET verify_string = PASSWORD ('MyNewPass') WHERE user = 'root'; > CÁC QUYỀN RIÊNG TƯ CỦA FLUSH; Trong MySQL phiên bản 5.7.x không có thêm trường mật khẩu trong bảng mysql. Nó đã được thay thế bằng authentic_string.
Robert Anthony S. Tribiana,

2
Điều này mang lại cho tôi sự đồng ý, nhưng không thực sự làm bất cứ điều gì
Freedo

1
Nó cần một lệnh bổ sung FLUSH PRIVILEGESđể thực hiện thay đổi hiệu quả mà không cần khởi động lại máy chủ cơ sở dữ liệu.
NetVicious

60

hãy xem điều này từ MySQL Reference manual:

Lần đăng nhập đầu tiên mysql:

# mysql -u root -p

Sau đó, tại dấu nhắc mysql chạy:

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

Sau đó

FLUSH PRIVILEGES;

Xem trang này để biết thêm thông tin: Đặt lại mật khẩu gốc: Unix Systems


Tôi gặp lỗi "Bạn đang sử dụng chế độ cập nhật an toàn và bạn đã cố cập nhật bảng mà không có cột WHERE sử dụng cột KEY ..." khi cập nhật mật khẩu của người dùng. Xem stackoverflow.com/questions/11448068/… để biết cách khắc phục lỗi này.
Joe Borysko

LỖI 1064 (42000): Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần '(' MyNewPass ') WHERE User =' root '' tại dòng 1
đệ tử

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

Bạn có thể tìm thấy Đặt lại mật khẩu gốc trong tài liệu MySQL.


Truy vấn này phù hợp với tôi nhưng mật khẩu mới không hoạt động (Quyền truy cập bị từ chối). Nó chỉ bắt đầu hoạt động sau khi tôi tạo lại người dùng root askubuntu.com/a/784347/160368 .
hlcs

1
hoạt động cho tôi trên MySQL 8.0.20 và sau khi khởi tạo thư mục dữ liệu bằng lệnh nàymysqld --initialize --console
A. Henteti

27

Đây là câu trả lời được cập nhật cho WAMP v3.0.6 trở lên

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

> FLUSH PRIVILEGES;

Trong MySQL phiên bản 5.7.x không có thêm trường mật khẩu trong bảng mysql. Nó đã được thay thế bằng authentic_string. (Điều này dành cho thiết bị đầu cuối / CLI)

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

FLUSH PRIVILEGES;

(Điều này nếu dành cho PHPMyAdmin hoặc bất kỳ GUI Mysql nào)


Câu trả lời này là một trong số ít người nói rằng mysql.userbảng nên được cập nhật. Lưu ý rằng nếu Bạn đang sử dụng bất kỳ cơ sở dữ liệu nào khác (được đặt bởi uselệnh), Bạn sẽ gặp lỗi rằng bảng userkhông tồn tại. Cảm ơn ngài!
Aleksandar

1
làm việc cho tôi. Tôi đang sử dụng 5.7.x, không có mysql.userbảng. các câu trả lời khác đã lỗi thời
Siwei Shen 申思维

Vui vẻ giúp đỡ!!
Robert Anthony S. Tribiana

Tôi cuộn lại vì đó là ý định sử dụng của tôi> vì dấu chấm phẩy trên mỗi dòng dành cho thiết bị đầu cuối
Robert Anthony S. Tribiana

0 hàng bị ảnh hưởng, hàng đã khớp: 3 đã thay đổi: 0 ...?
trainoasis

22

Tìm thấy rồi! Tôi đã quên băm mật khẩu khi tôi thay đổi nó. Tôi đã sử dụng truy vấn này để giải quyết vấn đề của mình:

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

Tôi quên PASSWORD('NEW PASSWORD')mật khẩu và chỉ nhập mật khẩu mới ở dạng văn bản thuần túy


chắc chắn rằng bạn quay trở lại và chấp nhận câu trả lời của bạn cho phép người khác xem các giải pháp
ghostJago

1
dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html cho biết cách thực hiện việc này --init-file=nếu bạn đã để ý.
sabgenton

3
Bất kỳ ý tưởng tại sao khi tôi sử dụng cùng một lệnh, lỗi sau được trả về? Lỗi 1054 (42S22): cột không xác định 'Mật khẩu' trong 'danh sách trường'
Adrian M.

1
Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn mà tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp để sử dụng gần '(' MẬT KHẨU MỚI '), nơi user =' root '' tại dòng 1
discipleartem

20

Vui lòng làm theo các bước dưới đây.

bước 1. dừng mysql

bước 2. sudo mysqld_safe --skip-grant-tables

bước 3.mysql -u root

bước 4.use mysql;

bước 5.show tables;

bước 6.describe user;

bước 7.update user set authentication_string=password('1111') where user='root';

đăng nhập bằng mật khẩu 1111


3
flush privilegeslà bước cuối cùng quan trọng.
Khom Nazid

Nó thực sự được thực hiện với ass. Tôi đã làm tất cả các hướng dẫn để đặt lại mật khẩu. Mọi thứ hoạt động ngoại trừ khi tôi đăng nhập bằng mật khẩu mới, nó không hoạt động.
Shidomaru NeveRage

nếu mysqld không bắt đầu và thông báo như daemon mysqld này với cơ sở dữ liệu từ / var / lib / mysql mysqld_safe mysqld từ tệp pid /var/run/mysqld/mysqld.pid đã kết thúc thực hiện việc này: mkdir / var / run / mysqld chomod 777 / var / run / mysqld và bắt đầu tất cả từ việc ăn xin
jokermt235

18

Tôi cũng đã tìm kiếm xung quanh và có lẽ một số câu trả lời phù hợp với một số tình huống,

tình huống của tôi là Mysql 5.7 trên hệ thống Ubuntu 18.04.2 LTS:

(nhận đặc quyền root)

$ sudo bash

(thiết lập mật khẩu cho người dùng root db + triển khai bảo mật theo các bước)

# mysql_secure_installation

(cấp quyền truy cập cho người dùng root thông qua mật khẩu thay vì socket)

(+ chỉnh sửa: hình như bạn cần đặt lại mật khẩu?)

(không đặt nó thành '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

Rất cám ơn zetacu (và erich ) vì câu trả lời xuất sắc này (sau khi tìm kiếm vài giờ ...)

Thưởng thức :-D

S.


Đây là câu trả lời tốt nhất cho đến nay, ít nhất là cho máy chủ mysql 5.7.
Zoltán Hajdú

Câu trả lời TỐT NHẤT. Cảm ơn bạn.
Luciano Fantuzzi

11

Trên MySQL 8.0.4+

Để cập nhật người dùng root hiện tại:

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

Để cập nhật người dùng khác:

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

Để đặt chính sách mật khẩu trước khi cập nhật mật khẩu:

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

Cách khác / tốt hơn để cập nhật mật khẩu gốc:

mysql_secure_installation

Bạn muốn gắn bó với xác thực 5.x để bạn vẫn có thể sử dụng các ứng dụng cũ?

Trên my.cnf

default_authentication_plugin = mysql_native_password

Để cập nhật root:

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

7

Điều này đã làm việc cho tôi -

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

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


LỖI 1064 (42000): Bạn có lỗi trong cú pháp SQL của mình; kiểm tra sổ tay hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần 'IDENTIFIED BY' MyNewPass '' tại dòng 1
trainoasis Ngày

Vừa sao chép chính xác trong sql qua CLI: o
trainoasis

Tất nhiên, chuyển đến máy chủ của tôi + root mysql -u -p để truy cập vào mysql cli
trainoasis

6

Bạn phải đặt lại mật khẩu! các bước dành cho mac osx (đã thử nghiệm và hoạt động) và ubuntu

Dừng MySQL

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

Khởi động nó ở chế độ an toàn:

$ sudo mysqld_safe --skip-grant-tables

(dòng trên là toàn bộ lệnh)

Đây sẽ là một lệnh liên tục cho đến khi quá trình kết thúc, vì vậy hãy mở một cửa sổ shell / terminal khác, đăng nhập mà không cần mật khẩu:

$ mysql -u root

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

Khởi động MySQL

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

mật khẩu mới của bạn là 'mật khẩu'.


Tôi có một tin nhắn: không có cơ sở dữ liệu nào được chọn
Mimouni

@Mimouni hãy thử cái này: stackoverflow.com/questions/21944936/…
tk_

5

Đối với MySQL 5.7.6 trở lên:

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

Đối với MySQL 5.7.5 trở về trước:

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

3

Đối với phiên bản mysql mới nhất hiện tại (8.0.16), không có câu trả lời nào trong số này phù hợp với tôi.

Sau khi xem xét một số câu trả lời khác nhau và kết hợp chúng lại với nhau, đây là những gì tôi đã sử dụng đã hiệu quả:

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

Hi vọng điêu nay co ich.


2

một lỗi phổ biến mà tôi thường xuyên gặp phải, đó là tôi quên -ptùy chọn, vậy bạn có chắc mình đã sử dụng:

mysql -u root -p

2

Trong MySQL 5.7, mật khẩu được thay thế bằng 'authentic_string'.

sử dụng

update user set authentication_string=password('myfavpassword') where user='root';

2

Sử dụng tiện ích dòng lệnh mysqladmin để thay đổi mật khẩu MySQL:

mysqladmin --user=root --password=oldpassword password "newpassword"

Nguồn


1

Đã thử câu trả lời từ @kta nhưng không hiệu quả với tôi.

Tôi đang sử dụng MySQL 8.0

Điều này đã làm việc cho tôi:

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


1
Vui lòng thêm một số giải thích vào mã của bạn - chính xác thì điều này giải quyết một câu hỏi bảy tuổi như thế nào?
Nico Haase

Có vẻ như cú pháp đã được thay đổi trong bảy năm. Nó không gói mật khẩu bằng PASSWORD () dev.mysql.com/doc/refman/8.0/en/set-password.html
kangkyu

Băm mật khẩu phải là một số thập lục phân gồm 41 chữ số
Mimouni

1

Rất nhiều ý kiến, nhưng tôi đã được giúp đỡ phương pháp này:

sudo mysqladmin -u root password 'my password'

Trong trường hợp của tôi sau khi cài đặt, tôi đã nhận được dịch vụ mysql mà không có mật khẩu cho người dùng root và tôi cần đặt mật khẩu để bảo mật.


Nó có thể được sử dụng để đặt lại mật khẩu người dùng gốc mysql mà không cần biết mật khẩu cũ. Nhưng hãy đảm bảo rằng không ai có quyền truy cập vào nhật ký hệ thống của bạn, vì mật khẩu này đã được ghi: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

dừng tất cả các dịch vụ wamp, thoát khỏi wamp.

mở notepad rồi gõ> ĐẶT MẬT KHẨU CHO 'root' @ 'localhost' = PASSWORD ('');

sau đó lưu nó vào c: drive với bất kỳ tên nào .. như thế này "c: /example.txt"

bây giờ hãy truy cập wamp falder "wamp"> bin> mysql> mysql (phiên bản của bạn)> bin trong đường dẫn trường hợp của tôi là "C: \ wamp \ bin \ mysql \ mysql5.6.17 \ bin"

bây giờ sao chép đường dẫn của bạn rồi chạy cmd với (ctrl + r) rồi gõ "cmd" (enter)

gõ cd rồi nhấp chuột phải vào cmd và dán đường dẫn (enter) bây giờ nhập (mysqld --init-file = C: \ example.txt) không có dấu ngoặc nhọn rồi (enter)

sau đó khởi động lại PC hoặc mở taskmgr và diệt mysqld.exe

bắt đầu wamp và mật khẩu của bạn sẽ bị xóa ...


0

Đối với người dùng MacOS, nếu bạn quên mật khẩu gốc của mình, câu trả lời của @ suchharaK ( https://stackoverflow.com/a/28601069/5628856 ) là tốt, nhưng có một số thủ thuật khác:

Nếu bạn đang sử dụng tùy chọn hệ thống để khởi động máy chủ mysql, chỉ cần

sudo mysqld_safe --skip-grant-tables

có thể không hiệu quả với bạn.

Bạn phải đảm bảo rằng các đối số dòng lệnh giống với cấu hình khởi động hệ thống.

Lệnh sau phù hợp với tôi:

/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

Bạn có thể dùng

ps aux | grep mysql

để kiểm tra của riêng bạn.


-1

Trên Ubuntu,

sudo dpkg-reconfigure mysql-server-5.5 

Thay thế 5.5bằng phiên bản hiện tại của bạn và bạn sẽ được yêu cầu nhập mật khẩu gốc mới.


Trong hệ điều hành nào? Điều này không có ý nghĩa.
Khom Nazid

-1
  1. Trên Mac tùy chọn hệ thống mở> MySQL.
  2. Trong phần cấu hình của MySQL, hãy kiểm tra khởi tạo cơ sở dữ liệu.
  3. thay đổi mật khẩu trong lời nhắc. khởi tạo cơ sở dữ liệu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.