Cài đặt MySQL cho Windows từ .zip và đặt lại mật khẩu root


8

Tôi chỉ muốn có trên PC của mình (với Windows 8.1 x64) máy chủ MySQL mà không có Workbench hoặc thứ gì đó. Vì vậy, tôi đã tải xuống .zipkho lưu trữ từ dev.mysql.com/doads . Đây là bản tải xuống cho Win64 trên x86_64 phiên bản 5.7.9 (Máy chủ cộng đồng MySQL (GPL)).

Tôi đã cài đặt nó như một dịch vụ Windows, nhưng không có mysqlcơ sở dữ liệu information_schema. Vì vậy, tôi đã thực hiện điều này:

mysql_upgrade.exe --upgrade-system-tables

mysqlcơ sở dữ liệu đã được tạo ra. Nhưng cùng với nó, một cái gì đó đã xảy ra với người dùng root, vì tôi không thể truy cập được mysqlnữa.

Vì vậy, tôi quyết định đặt lại mật khẩu đột nhiên xuất hiện (vì tôi không có mật khẩu trước đó). Tôi thành lập giải pháp sau trong hướng dẫn chính thức, tôi khởi động máy chủ như thế này:

mysqld.exe --skip-grant-tables --console

Sau đó tôi mở mysqlmà không cần mật khẩu:

mysql.exe u root

Và sau đó cố gắng thiết lập lại mật khẩu root:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere');

Nhưng tôi đã gặp lỗi này:

LRI 1131 (42000): Bạn đang sử dụng MySQL với tư cách là người dùng ẩn danh và người dùng ẩn danh không được phép thay đổi mật khẩu ".

Cái này là cái gì? Làm thế nào để tôi ẩn danh? Tất cả các lệnh đã được thực hiện trong cmd.exeQuản trị viên.

Tôi nên làm gì để thiết lập lại mật khẩu root trong tình huống này?

Cập nhật 1: Tôi đã cố kiểm tra người dùng hiện tại:

SELECT USER(), CURRENT_USER();

Điều đó mang lại:

+--------+----------------+
| USER() | CURRENT_USER() |
+--------+----------------+
| root@  | @              |
+--------+----------------+

Điều đó thật kỳ lạ, bởi vì tôi đã bắt đầu nó như thế mysql.exe -u root.

Sau đó, tôi đã kiểm tra bảng người dùng:

SELECT user FROM mysql.user;

Điều đó mang lại:

+-----------+
| user      |
+-----------+
| mysql.sys |
+-----------+

Điều đó thậm chí còn kỳ lạ hơn. Ngoài ra không có trường mật khẩu:

SELECT user, password FROM mysql.user;

LRI 1054 (42S22): 'mật khẩu' cột không xác định trong 'danh sách trường'

Vì vậy, tôi không thể thay đổi mật khẩu của nó.

Và tôi không thể tạo người dùng mới:

CREATE USER 'root'@'localhost' IDENTIFIED BY 'passhere';

LRI 1290 (HY000): Máy chủ MySQL đang chạy với --skip-grant-tablestùy chọn để nó không thể thực thi câu lệnh này

Bây giờ tôi bị lạc.

Cập nhật 2: Tôi đoán, tôi đã làm mọi thứ sai từ đầu. Rõ ràng, tôi đã bỏ lỡ một mysqld.exe --initializelệnh nào đó.

Vì vậy, đây là cách tôi cài đặt MySQL từ .zip-archive, nhờ @RolandoMySQLDBA :

  1. Giải nén lưu trữ, chuẩn bị my.ini.
  2. Thực thi mysqld.exe --initialize, lấy mật khẩu tạm thời từ .errtập tin.
  3. Cài đặt MySQL như một dịch vụ và chạy nó

    mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
  4. Kết nối với nó mysql -u root -pbằng mật khẩu tạm thời.

  5. Thay đổi mật khẩu tạm thời:

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

Câu trả lời:


6

Vì bạn đã bắt đầu mysqldvới --skip-Grant-bảng , bạn không thể thực thi bất kỳ lệnh GRANT , REVOKE hoặc SET PASSWORD tiêu chuẩn nào . Mặc dù vậy, bạn có thể thay đổi mật khẩu root@localhostnhư sau:

UPDATE mysql.user SET password=PASSWORD(‘passhere') WHERE user='root' and host='localhost';

Sau đó, khởi động lại mysqld và bạn đã trở lại trong công việc.

Đối với bạn là ẩn danh, nếu bạn đăng nhập ngay bây giờ và chạy

SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;

Bạn sẽ lưu ý rằng HowYouWereAllowedToLoginsẽ có một tên người dùng trống và một số máy chủ lưu trữ.

HÃY THỬ MỘT LẦN !!!

CẬP NHẬT 2015-11-17 16:24 EST

Cột được gọi là passwordtrong mysql.userkhông còn tồn tại trong MySQL 5.7.

Nó đã được đổi tên authentication_string.

Cách tiếp cận đúng

Những gì bạn nên làm là chạy

mysqld --initialize

Điều đó sẽ tạo thư mục dữ liệu cho bạn.

Root @ localhost được gán một mật khẩu tạm thời, có thể nhìn thấy trong tệp lỗi bắt đầu bằng chuỗi thời gian và chuỗi sau

2015-11-17T20:56:02.175980Z 1 [Note] A temporary password is generated for root@localhost:

Bạn có thể đăng nhập với nó và sau đó chạy ALTER USER

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Xem Tài liệu MySQL 5.7 trên SET PASSWORD


Cảm ơn bạn đã trả lời. Vâng, tôi biết những hạn chế như vậy. Nhưng đây là các bước từ hướng dẫn của MySQL. Và tôi đã cố gắng làm theo hướng dẫn của bạn, xin vui lòng xem câu hỏi được chỉnh sửa của tôi.
retif

Không có cột mật khẩu nữa trong mysql.user, vì vậy phương pháp này sẽ không bao giờ hoạt động trở lại. Tuy nhiên, hiện tại cũng có các phương thức khác (thông qua --skip-Grant-bảng và --init-file) bị hỏng, do đó bạn không thể đặt lại mật khẩu trong 5.7.9 atm.
Mike Lischke

@MikeLischke Cảm ơn bạn. Tôi cần xóa câu trả lời này
RolandoMySQLDBA

@MikeLischke Tôi mới nhận ra passwordcột đã được đổi tên authentication_string.
RolandoMySQLDBA

Chà, thực sự sửa đổi trực tiếp bảng người dùng đã là quá khứ và sẽ biến mất, nhưng ngay cả việc sử dụng các lệnh tiêu chuẩn (như người dùng thay đổi) không hoạt động vì hiện tại họ bị từ chối vì bạn được coi là người dùng ẩn danh không được phép để ban hành các lệnh đó (nếu bạn khởi động máy chủ với --skip-Grant-bảng hoặc --init-file). Tuy nhiên, tùy chọn --initialize là cách phù hợp để thiết lập lại pw gốc.
Mike Lischke
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.