Thứ ba, 04/09/2018 | 00:00 GMT+7

Cách đặt lại mật khẩu gốc MySQL hoặc MariaDB của bạn trên Ubuntu 18.04

Quên password là điều tốt nhất trong ta . Nếu bạn quên hoặc mất password gốc vào database MySQL hoặc MariaDB của bạn , bạn vẫn có thể có quyền truy cập và đặt lại password nếu bạn có quyền truy cập vào server và account user có quyền sudo .

Lưu ý: Trên các bản cài đặt Ubuntu 18.04 mới, cấu hình MySQL hoặc MariaDB mặc định thường cho phép bạn truy cập database (với đầy đủ quyền quản trị) mà không cần cung cấp password miễn là bạn thực hiện kết nối từ account gốc của hệ thống. Trong trường hợp này, có thể không cần đặt lại password . Trước khi bạn tiến hành đặt lại password gốc database của bạn , hãy thử truy cập database bằng sudo mysql . Nếu điều này dẫn đến lỗi truy cập bị từ chối , hãy làm theo các bước trong hướng dẫn này.

Hướng dẫn này sẽ đặt lại password gốc cho database MySQL và MariaDB được cài đặt bằng trình quản lý gói apt trên Ubuntu 18.04. Quy trình thay đổi password root khác nhau tùy thuộc vào việc bạn đã cài đặt MySQL hay MariaDB, cũng như cấu hình systemd mặc định đi kèm với bản phân phối hoặc gói từ các nhà cung cấp khác. Mặc dù hướng dẫn trong hướng dẫn này có thể hoạt động với các version server database hoặc hệ thống khác, nhưng chúng đã được kiểm tra cụ thể với Ubuntu 18.04 và các gói do phân phối cung cấp.

Yêu cầu

Để khôi phục password gốc MySQL hoặc MariaDB của bạn, bạn cần :

  • Truy cập vào server Ubuntu 18.04 chạy MySQL hoặc MariaDB với user sudo hoặc cách khác để truy cập server có quyền root. Để thử các phương pháp khôi phục trong hướng dẫn này mà không ảnh hưởng đến server production của bạn, hãy sử dụng hướng dẫn cài đặt server ban đầu để tạo server thử nghiệm với regular user , không phải root có quyền sudo. Sau đó cài đặt MySQL sau Cách cài đặt MySQL trên Ubuntu 18.04 .

Bước 1 - Xác định Phiên bản Database và Dừng Server

Ubuntu 18.04 chạy MySQL hoặc MariaDB, một phần mềm thay thế phổ biến hoàn toàn tương thích với MySQL. Bạn cần sử dụng các lệnh khác nhau để khôi phục password root tùy thuộc vào password mà bạn đã cài đặt, vì vậy hãy làm theo các bước trong phần này để xác định server database nào bạn đang chạy.

Kiểm tra version của bạn bằng lệnh sau:

  • mysql --version

Nếu bạn đang chạy MariaDB, bạn sẽ thấy “MariaDB” đứng trước số version trong kết quả :

MariaDB output
mysql Ver 15.1 Distrib 10.1.29-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Bạn sẽ thấy kết quả như thế này nếu bạn đang chạy MySQL:

MySQL output
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper

Ghi lại database nào, vì điều này xác định các lệnh thích hợp để làm theo trong phần còn lại của hướng dẫn này.

Để thay đổi password gốc , bạn cần phải tắt server database . Nếu bạn đang chạy MariaDB, bạn có thể làm như vậy bằng lệnh sau:

  • sudo systemctl stop mariadb

Đối với MySQL, hãy tắt server database bằng lệnh:

  • sudo systemctl stop mysql

Khi database đã dừng, bạn có thể khởi động lại nó ở chế độ an toàn để đặt lại password root .

Bước 2 - Khởi động lại server database mà không cần kiểm tra quyền

Chạy MySQL và MariaDB mà không cần kiểm tra quyền cho phép truy cập dòng lệnh database với quyền root mà không cần cung cấp password hợp lệ. Để làm điều này, bạn cần ngăn database tải các bảng-cấp quyền , nơi lưu trữ thông tin quyền của user . Vì điều này có một chút rủi ro về bảo mật, bạn cũng có thể cần tắt kết nối mạng để ngăn các client khác kết nối với server tạm thời dễ bị tấn công.

Tùy thuộc vào server database nào bạn đã cài đặt, cách khởi động server mà không tải bảng-cấp quyền sẽ khác nhau.

Cấu hình MariaDB để bắt đầu mà không cần bảng-cấp quyền

Để khởi động server MariaDB mà không có bảng-cấp quyền , ta sẽ sử dụng file đơn vị systemd để đặt các tham số bổ sung cho daemon server MariaDB.

Thực thi lệnh sau để đặt biến môi trường MYSQLD_OPTS được MariaDB sử dụng khi khởi động. Các tùy chọn --skip-networking --skip-grant-tables--skip-networking cho biết MariaDB khởi động mà không cần tải các bảng tài trợ hoặc các tính năng mạng:

  • sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"

Sau đó khởi động server MariaDB:

  • sudo systemctl start mariadb

Lệnh này sẽ không tạo ra bất kỳ kết quả nào, nhưng nó sẽ khởi động lại server database , có tính đến cài đặt biến môi trường mới.

Bạn có thể đảm bảo nó bắt đầu với sudo systemctl status mariadb .

Đến đây bạn có thể kết nối với database với quyền là user gốc MariaDB mà không cần cung cấp password :

  • sudo mysql -u root

Bạn sẽ ngay lập tức thấy một dấu nhắc shell database :

MariaDB prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>

Đến đây bạn đã có quyền truy cập vào server database , bạn có thể thay đổi password gốc như trong Bước 3.

Cấu hình MySQL để bắt đầu mà không cần bảng-cấp quyền

Để khởi động server MySQL mà không có bảng-cấp quyền của nó, bạn sẽ thay đổi cấu hình systemd cho MySQL để chuyển các tham số dòng lệnh bổ sung cho server khi khởi động.

Để thực hiện việc này, hãy thực hiện lệnh sau:

  • sudo systemctl edit mysql

Lệnh này sẽ mở một file mới trong editor nano , bạn sẽ sử dụng file này để chỉnh sửa các ghi đè dịch vụ của MySQL. Những thay đổi này thay đổi các tham số dịch vụ mặc định cho MySQL. Tệp này sẽ trống, vì vậy hãy thêm nội dung sau:

Dịch vụ MySQL overrides
[Service] ExecStart= ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid --skip-grant-tables --skip-networking 

Câu lệnh ExecStart đầu tiên xóa giá trị mặc định, trong khi câu lệnh thứ hai cung cấp cho systemd lệnh khởi động mới bao gồm các tham số để vô hiệu hóa việc tải bảng-cấp quyền và khả năng kết nối mạng.

Nhấn CTRL-x để thoát khỏi file , sau đó nhấn Y để lưu các thay đổi mà bạn đã thực hiện, sau đó ENTER để xác nhận tên file .

Reload cấu hình systemd để áp dụng những thay đổi này:

  • sudo systemctl daemon-reload

Bây giờ khởi động server MySQL:

  • sudo systemctl start mysql

Lệnh sẽ không hiển thị kết quả , nhưng server database sẽ khởi động. Bảng tài trợ và mạng sẽ không được bật.

Kết nối với database với quyền là user root :

  • sudo mysql -u root

Bạn sẽ ngay lập tức thấy một dấu nhắc shell database :

MySQL prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

Đến đây bạn đã có quyền truy cập vào server , bạn có thể thay đổi password gốc .

Bước 3 - Thay đổi password root

Server database hiện đang chạy ở chế độ hạn chế; các bảng tài trợ không được tải và không có hỗ trợ mạng nào được bật. Điều này cho phép bạn truy cập server mà không cần cung cấp password , nhưng nó cấm bạn thực hiện các lệnh làm thay đổi dữ liệu. Để đặt lại password gốc , bạn phải tải các bảng tài trợ ngay bây giờ mà bạn đã có quyền truy cập vào server .

Yêu cầu server database reload các bảng-cấp quyền bằng cách đưa ra lệnh FLUSH PRIVILEGES .

  • FLUSH PRIVILEGES;

Đến đây bạn có thể thay đổi password gốc . Phương pháp bạn sử dụng phụ thuộc vào việc bạn đang sử dụng MariaDB hay MySQL.

Thay đổi password MariaDB

Nếu bạn đang sử dụng MariaDB, hãy thực hiện câu lệnh sau để đặt password cho account gốc , đảm bảo thay thế new_password bằng một password mới mạnh mà bạn sẽ nhớ.

  • UPDATE mysql.user SET password = PASSWORD('new_password') WHERE user = 'root';

Bạn sẽ thấy kết quả này cho biết password đã thay đổi:

Output
Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0

MariaDB cho phép sử dụng cơ chế xác thực tùy chỉnh, vì vậy hãy thực thi hai câu lệnh sau đảm bảo MariaDB sẽ sử dụng cơ chế xác thực mặc định cho password mới mà bạn đã gán cho account gốc :

  • UPDATE mysql.user SET authentication_string = '' WHERE user = 'root';
  • UPDATE mysql.user SET plugin = '' WHERE user = 'root';

Bạn sẽ thấy kết quả sau cho mỗi câu lệnh:

Output
Query OK, 0 rows affected (0.01 sec) Rows matched: 1 Changed: 0 Warnings: 0

Mật khẩu bây giờ đã được thay đổi. Gõ exit để thoát khỏi console MariaDB và chuyển sang Bước 4 để khởi động lại server database ở chế độ bình thường.

Thay đổi password MySQL

Đối với MySQL, hãy thực hiện câu lệnh sau để thay đổi password của user root , thay thế new_password bằng một password mạnh mà bạn sẽ nhớ:

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

Bạn sẽ thấy kết quả này cho biết password đã được thay đổi thành công:

Output
Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0

MySQL cho phép sử dụng cơ chế xác thực tùy chỉnh, vì vậy hãy thực thi câu lệnh sau để yêu cầu MySQL sử dụng cơ chế xác thực mặc định của nó để xác thực user root bằng password mới:

  • UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root';

Bạn sẽ thấy kết quả tương tự như lệnh trước:

Output
Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0

Mật khẩu bây giờ đã được thay đổi. Thoát khỏi console MySQL bằng lệnh exit .

Hãy khởi động lại database ở chế độ hoạt động bình thường.

Bước 4 - Hoàn nguyên Server Database của Bạn về Cài đặt Bình thường

Để khởi động lại server database ở chế độ bình thường, bạn phải hoàn nguyên các thay đổi bạn đã thực hiện để kích hoạt kết nối mạng và tải các bảng-cấp quyền . , phương pháp bạn sử dụng phụ thuộc vào việc bạn sử dụng MariaDB hay MySQL.

Đối với MariaDB, hãy bỏ đặt biến môi trường MYSQLD_OPTS mà bạn đã đặt trước đó:

  • sudo systemctl unset-environment MYSQLD_OPTS

Sau đó, khởi động lại dịch vụ bằng systemctl :

  • sudo systemctl restart mariadb

Đối với MySQL, hãy xóa cấu hình systemd đã sửa đổi:

  • sudo systemctl revert mysql

Bạn sẽ thấy kết quả tương tự như sau:

Output
Removed /etc/systemd/system/mysql.service.d/override.conf. Removed /etc/systemd/system/mysql.service.d.

Sau đó, reload cấu hình systemd để áp dụng các thay đổi:

  • sudo systemctl daemon-reload

Cuối cùng, khởi động lại dịch vụ:

  • sudo systemctl restart mysql

Database hiện đã được khởi động lại và trở lại trạng thái bình thường. Xác nhận password mới hoạt động bằng cách đăng nhập với quyền user root bằng password :

  • mysql -u root -p

Bạn sẽ được yêu cầu nhập password . Nhập password mới của bạn và bạn sẽ có quyền truy cập vào dấu nhắc database như mong đợi.

Kết luận

Bạn đã khôi phục quyền truy cập quản trị vào server MySQL hoặc MariaDB. Đảm bảo password mới bạn chọn là mạnh và an toàn và giữ nó ở nơi an toàn.

Để biết thêm thông tin về quản lý user , cơ chế xác thực hoặc cách đặt lại password database cho version MySQL hoặc MariaDB khác, vui lòng tham khảo tài liệu MySQL chính thức hoặc tài liệu MariaDB .


Tags:

Các tin liên quan

Cách tạo một cụm MySQL nhiều node trên Ubuntu 18.04
2018-07-26
Cách cài đặt MySQL mới nhất trên Ubuntu 18.04
2018-07-12
Cách di chuyển thư mục dữ liệu MySQL đến vị trí mới trên Ubuntu 18.04
2018-07-06
Cách triển khai ứng dụng Elixir-Phoenix với MySQL trên Ubuntu 16.04
2018-05-07
Cách sử dụng ProxySQL làm Bộ cân bằng tải cho MySQL trên Ubuntu 16.04
2018-01-08
Cách backup database MySQL vào lưu trữ đối tượng với Percona trên Ubuntu 16.04
2017-10-19
Cách cài đặt Lighttpd với MySQL và PHP trên FreeBSD 11.0
2017-09-18
Cách cấu hình backup MySQL với Percona XtraBackup trên Ubuntu 16.04
2017-08-30
Cách cấu hình sao chép nhóm MySQL trên Ubuntu 16.04
2017-04-13
Cách cài đặt MySQL mới nhất trên Ubuntu 16.04
2017-04-06