Làm cách nào để thay đổi mật khẩu 'root' của MySQL bằng MySQL v5.7?


14

Môi trường hiện tại :

mysql> show variables like "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.13                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| tls_version             | TLSv1,TLSv1.1                |
| version                 | 5.7.13                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
8 rows in set (0.01 sec)

Người dùng thay đổi mật khẩu:

mysql> update user set password=PASSWORD("XXXX") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

Tui bỏ lỡ điều gì vậy?


cố gắng bắt đầu mysqldưới chế độ an toàn. sau đó bạn có thể thay đổi mật khẩu root
Mongrel

Để bất cứ ai đọc chủ đề này. MySQL 5.7 có những thay đổi đáng kể dưới mui xe. Vui lòng đọc về chúng trước khi nâng cấp.
Rui F Ribeiro

Câu trả lời:


24

Trong MySQL 5.7, passwordtrường trong mysql.usertrường bảng đã bị xóa, bây giờ tên trường là authentication_string.

Đầu tiên chọn cơ sở dữ liệu:

mysql> use mysql;

Và sau đó hiển thị các bảng:

mysql> show tables;

Bạn sẽ tìm thấy userbảng và xem các trường của nó:

mysql> describe user;

Bạn sẽ nhận ra không có trường nào được đặt tên password, trường mật khẩu được đặt tên authentication_string. Vì vậy, chỉ cần làm điều này:

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

Theo đề xuất của @Rui F Ribeiro, bạn cũng có thể chạy:

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');

1
+1 cho tham chiếu xác thực. Gần đây tôi cũng đã tìm hiểu về nó sau khi nâng cấp lên 5.7
Rui F Ribeiro

4
Mặc dù nó không hoàn toàn hướng đến câu trả lời này, nhưng một cách khác cho 5.7 làSET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro

1
@RuiFRibeiro cảm ơn, đã cập nhật câu trả lời của tôi
Rahul

1
Ban đầu, tôi đã chỉnh sửa chủ đề này muộn hơn 5.7, nhưng sau đó đổi nó thành sử dụng MySQL 5.7, để phù hợp hơn với tinh thần của câu hỏi. ví dụ: @Shivu không biết đó là thay đổi trong 5.7.
Rui F Ribeiro

1
Đó là một cách đóng khung câu hỏi. Chúng tôi không chỉnh sửa câu hỏi và câu trả lời chỉ vì lợi ích của OP, mà còn cho những người khác sau này.
Rui F Ribeiro

2

Cách thay đổi mật khẩu của MySQL là SET PASSWORD

SET PASSWORD FOR 'root' = PASSWORD('new_password');

xem Hướng dẫn tham khảo MySQL 5.7 / ... / SET PASSWORD Cú pháp

Câu lệnh SET PASSWORD gán mật khẩu cho tài khoản người dùng MySQL, được chỉ định là một văn bản rõ ràng (không được mã hóa) hoặc giá trị được mã hóa:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

Câu trả lời được chấp nhận từ Rahul cho thấy cách cập nhật mật khẩu bằng DMLcâu lệnh.

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

Cảnh báo: đó không phải là cách chính thức và được hỗ trợ. Nó có thể gây rắc rối, nếu bạn không biết bạn đang làm gì. Đừng quên FLUSH PRIVILEGES.

Đối với hầu hết các hoạt động, như tạo người dùng, thay đổi đặc quyền hoặc thay đổi mật khẩu, bạn sẽ muốn sử dụng các báo cáo cấp cao. Chúng không chỉ dễ sử dụng hơn và chúng tương thích với số lượng phiên bản MySQL lớn hơn, mà chúng còn giúp bạn không mắc lỗi (tất nhiên, hãy nhớ thiết lập chế độ sql NO_AUTO_CREATE_USER của phe đối nghịch). Chúng thậm chí thường hoạt động độc đáo trong môi trường thù địch MyISAM như cụm Galera.

Ngừng sử dụng tính năng RIÊNG TƯ

Hãy sử dụng GRANT, REVOKE, SET PASSWORD, hay RENAME USERvà không báo cáo DML trực tiếp.

Cập nhật: Cú pháp SET PASSWORD ... = PASSWORD ('auth_opes') không được chấp nhận kể từ MySQL 5.7.6 và sẽ bị xóa trong bản phát hành MySQL trong tương lai.


1

mysqladmin -u user-name password -p "oldpassword" "newpass"

Nếu bạn có thể đăng nhập thì hãy thử điều này ""không làm việc, hãy thử ''trích dẫn

update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';


Trong khi tôi thích câu trả lời của mysqladmin hơn, hãy xem câu trả lời của Rahul. Truy vấn SQL của bạn đã lỗi thời. Tôi đã sửa lỗi mysqladmin, bạn đã thiếu chỉ thị mật khẩu.
Rui F Ribeiro

1
Cảm ơn Ribeiro. Tôi đã bỏ lỡauthentication_string
Mongrel

0

Trong trường hợp của tôi

mysql.server start
$ mysql -uroot
mysql> update user set authentication_string=password('123456') where User='root';
mysql> exit;
mysql.server restart (if you not restart , connection will not work.)

Vì vậy, tôi nghĩ rằng, lệnh cập nhật của bạn là đúng, nhưng bạn cần phải khởi động lại máy chủ mysql của bạn.


-1

Đối với vấn đề này, tôi đã sử dụng một phương pháp đơn giản và thô lỗ, đổi tên trường thành mật khẩu, lý do là tôi sử dụng phần mềm cao cấp mac navicat trong lỗi thao tác trực quan: cột 'mật khẩu' không xác định trong 'Danh sách trường', bản thân phần mềm sử dụng mật khẩu để tôi không thể dễ dàng vận hành. Do đó, tôi root vào dòng lệnh cơ sở dữ liệu, chạy

Use mysql;

Và sau đó sửa đổi tên trường:

ALTER TABLE user CHANGE authentication_string password text;

Sau tất cả bình thường.

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.