không thể thiết lập lại mật khẩu root của mysql


28

Tôi cần thiết lập lại mật khẩu gốc của bản cài đặt mysql cục bộ nhưng nó không cho phép tôi. Tôi đã thử điều này:

$ 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

Làm thế nào tôi có thể thiết lập lại mật khẩu? chỉnh sửa 1 Tôi đã nhận điều này:

$ 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)

Có vẻ như một quá trình đang tự động khởi động lại mysql ngay khi tôi giết nó ...

Câu trả lời:


43

Trước tiên hãy thử sử dụng

mysql -u root -p

và nhập mật khẩu của bạn (nếu bạn nhớ) tại dấu nhắc để đăng nhập với tư cách là người dùng root sql (lưu ý chuyển đổi -plà dành cho mật khẩu).

Nếu bạn thực sự phải đặt lại mật khẩu gốc cho mysql, đây là một cách dễ dàng - cấu hình lại gói với dpkg-reconfigure.

Dễ dàng bước để thiết lập lại mật khẩu gốc mySQL:

  1. Kiểm tra phiên bản của bạn mysql-server;

    apt-cache policy mysql-server
    

    và xem dòng hiển thị phiên bản đã cài đặt trong số các thông tin khác. ví dụ cho cài đặt của tôi, đó là:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (Từ đây tôi biết rằng tôi đã mysql-server-5.5cài đặt trong hệ thống của mình.)

  2. Bắt đầu cấu hình lại với:

    sudo dpkg-reconfigure mysql-server-*.*
    

    nơi mysql-server-*.*nên được thay thế bởi phiên bản mà bạn có. (đối với tôi nó sẽ như vậy mysql-server-5.5). Điều này sẽ dừng daemon cơ sở dữ liệu. Sau đó, một dấu nhắc sẽ xuất hiện khi bạn phải nhập mật khẩu mới và xác nhận cấu hình lại.

    snap1

    Trình nền sẽ được tự động bắt đầu sau khi hoàn thành việc cấu hình lại.

  3. Sau đó bạn có thể đăng nhập bằng:

    mysql -u root -p
    

    và bắt đầu nhiệm vụ quản trị cơ sở dữ liệu của bạn.

Tài liệu tham khảo:

  1. https://help.ubfox.com/community/MysqlPasswordReset [Sẽ sớm được dọn sạch như được chỉ ra trong trang.]

  2. Hướng dẫn máy chủ Ubuntu liên quan đến phiên bản cụ thể của bạn.


2
Có thể xác nhận rằng dpkg-reconfigure mariadb-server-10.1đã hoạt động cho MariaDB khi tất cả các giải pháp khác không. Cảm ơn vì điều này.
liviucmg

19
dpkg-reconfigurekhông nhắc mật khẩu cho tôi .. có cách nào để buộc nó không?
Unirgy

15
Không làm việc cho tôi. Tôi đã sử dụng lệnh như trên và nhận được "Kiểm tra xem có cần cập nhật không. Cài đặt MySQL này đã được nâng cấp lên 5.7.13, sử dụng - Force nếu bạn vẫn cần chạy mysql_upTHER". Sử dụng --force đã cho phản ứng tương tự.
Anthony Scaife

5
Rõ ràng điều này không hoạt động nữa.
dpi

1
@Paulo Henrique Không. Do tình hình, chúng tôi quyết định sử dụng tốt nhất thời gian của chúng tôi là cài đặt lại toàn bộ máy chủ.
Anthony Scaife

21

Tham khảo lấy từ blog này:

Bước 1: Dừng dịch vụ MySQL.

sudo service mysql stop

Bước 2: Giết tất cả mysqld đang chạy.

sudo killall -9 mysqld

Bước 3: Bắt đầu mysqld ở chế độ An toàn.

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

Bước 4: Khởi động máy khách mysql

mysql -u root

Bước 5: Sau khi đăng nhập thành công, vui lòng thực hiện lệnh này để thay đổi bất kỳ mật khẩu nào.

FLUSH PRIVILEGES;

Bước 6: Bạn có thể cập nhật mật khẩu root mysql.

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

đối với mysql> 5.7, hãy sử dụng cái này thay vì ở trên:

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

Bước 7: Hãy thực hiện lệnh này.

FLUSH PRIVILEGES;

Bước 8: Thoát khỏi bảng điều khiển mysql

exit

Bước 9: Giết mysqld_safe và khởi động mysql

sudo killall mysqld_safe && sudo service mysql start

1
nên sudo service mysql stop, không phảisudo stop mysql
knocte

1
Ngoài ra, cuối cùng, nó thiếu các bước sudo killall mysqld_safe && sudo service mysql startvà sau đó thử đăng nhập lại
knocte

3
Đối với MYSQL 5.7, cú pháp mật khẩu thay đổi đã thay đổi thànhALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel

7
LƯU Ý ! Có một con thú mới trong MySQL 5.7 được gọi là auth_socket. Nếu bạn cài đặt mysql mà không có mật khẩu gốc, con thú sẽ tấn công bạn và bạn sẽ mất 50 điểm truy cập. Ở bước 6 ở trên bạn cần phải ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Bạn có thể đọc về nó ở đây . Về mặt lý thuyết (tôi đã không thử), bạn sẽ có thể đăng nhập vào mysql mà không cần mật khẩu nếu bạn "sudo su -" để trở thành root.
olafure

3
Và trong trường hợp ALTER USER ...không hoạt động, hãy sử dụngUPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure

9

Theo Ubuntu 16.04 và mysql-server-5.7, câu trả lời đúng là nhận xét cuối cùng của olafure, dpkg-reconfigure mysql-server-5.7không còn hoạt động.

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

Bây giờ trong bảng điều khiển mysql >mysql

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

Khởi động lại quá trình tốt mysql

sudo killall mysqld
sudo service mysql start

Kiểm tra mật khẩu mới của bạn

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

5
Khi mysqld_safethực hiện, tôi nhận được lỗi : Directory '/var/run/mysqld' for UNIX socket file don't exists.. Vì vậy, tôi chạy sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldvà phần còn lại của câu trả lời trên hoạt động. Đây có phải là một lỗi trên Ubuntu 16? Tôi chưa bao giờ gặp phải tất cả các vấn đề cập nhật mật khẩu trước đây.
Chester

@Chester cảm ơn bạn rất nhiều !! Đây là cách duy nhất cuối cùng đã hoạt động khi tất cả các giải pháp khác đều có lỗi. (Ubuntu-Server 16.04 tại đây) Điều này nên được thêm vào câu trả lời
derHugo

3

Bắt đầu với MySQL 5.7 , trong quá trình cài đặt ban đầu, nếu bạn để trống mật khẩu, thì đối với người dùng đó, xác thực sẽ dựa trên auth_socketplugin.

Cách chính xác để thay đổi mật khẩu sẽ là:

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/


Đây là trường hợp chính xác của tôi (mật khẩu trống trong khi cài đặt trong mysql 5.7) và đây là giải pháp duy nhất cho trường hợp của tôi.
cherouvim

Tôi nhận được tin nhắn:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149

@ user2513149 Vui lòng khởi động lại máy chủ MySQL của bạn mà không có --skip-grant-tablestùy chọn và xem giải pháp này hoạt động.
Barun

@Barun, không, không có --skip-grant-tablestùy chọn Tôi thậm chí không thể đăng nhập vào MySQL với quyền root. Nó nóiERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149

Đã giải quyết! Tôi đã phải đăng nhập vào bảng điều khiển MySQL thông thường (không phải mysqld_safe) bằng root mà không cần mật khẩu. Tôi có Ubuntu 18.04 và mysql-server-5.7. Câu trả lời này đã giúp tôi hỏi Ubuntu.com/a/767252/585252 (xem phần dưới cùng)
user2513149

1

Không có gì từ phần còn lại của câu trả lời dường như làm việc cho tôi. Đây là giải pháp của tôi:

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

Trong đó:

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

Sau đó:

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

1
Phần còn lại không làm việc cho tôi cả ... cũng không phải giải pháp của bạn không may: Vẫn gặp phải Lỗi này 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
Đây là lời khuyên duy nhất phù hợp với tôi trong số sáu đề xuất mà tôi đã thử, nhưng tôi đã thêm bit của @Chester ở trên để tránh lỗi "Tệp ổ cắm UNIX không tồn tại": sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldĐây là trên mysql 5.7 và ub Ubuntu 18.04 .
twowheeler

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.