Thiết lập lại root password MySQL / MariaDB trên Ubuntu 20.04

Quên root password cơ sở dữ liệu? Điều đó xảy ra với tất cả chúng ta. Nếu bạn đã quên hoặc mất mật khẩu root của cơ sở dữ liệu MySQL hoặc MariaDB, bạn vẫn có thể lấy lại quyền truy cập và thiết lập lại mật khẩu nếu bạn có quyền truy cập vào máy chủ và một tài khoản người dùng với đặc quyền sudo.

Bài viết này sẽ hướng dẫn cách thiết lập lại root password cho cơ sở dữ liệu MySQL và MariaDB được cài đặt bằng trình quản lý gói apt trên Ubuntu Quy trình thay đổi mật khẩu root khác nhau tùy thuộc vào việc bạn đã cài đặt MySQL/MariaDB và 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ù các hướng dẫn trong bài viết này có thể hoạt động với các phiên bản hệ thống hoặc máy chủ cơ sở dữ liệu khác, tuy nhiên chúng đã được thử nghiệm trên Ubuntu 20.04 và các gói phân phối từ nhà cung cấp.

Lưu ý: Trên cài đặt mới của Ubuntu 20.04, cấu hình mặc định của MySQL hoặc MariaDB thường cho phép bạn truy cập vào cơ sở dữ liệu (với đầy đủ quyền quản trị) mà không cần cung cấp mật khẩu miễn là bạn kết nối từ tài khoản root của hệ thống. Trong tình huống này, có thể không cần thiết phải đặt lại mật khẩu. Trước khi tiến hành đặt lại root password cơ sở dữ liệu, bạn hãy thử truy cập vào cơ sở dữ liệu với lệnh sudo mysql. Chỉ khi cấu hình mặc định cho xác thực đã bị thay đổi và dẫn đến lỗi truy cập bị từ chối, bạn mới tiếp tục theo các bước trong hướng dẫn này.

Yêu cầu tiên quyết trước khi đặt lại root password MySQL/MariaDB 

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

  • Truy cập vào máy chủ Ubuntu 20.04 đang chạy MySQL hoặc MariaDB với người dùng có quyền sudo hoặc một cách khác để truy cập vào máy chủ với quyền root.
  • Để thử nghiệm các phương pháp khôi phục trong hướng dẫn này mà không ảnh hưởng đến máy chủ sản xuất, bạn hãy tạo một máy chủ thử nghiệm và sau đó tuân theo hướng dẫn về thiết lập ban đầu của máy chủ. Hãy đảm bảo tạo một người dùng thông thường, không phải là người dùng root và có đặc quyền sudo. Sau đó, cài đặt MySQL trên Ubuntu 20.04 hoặc cài đặt MariaDB trên Ubuntu 20.04.

Lưu ý: Cả hai cài đặt giữ nguyên cấu hình mặc định cho tài khoản root của cơ sở dữ liệu, trong đó không cần mật khẩu để xác thực, miễn là bạn có thể truy cập vào tài khoản root của hệ thống. Bạn vẫn có thể tuân theo hướng dẫn này để đặt và xác minh mật khẩu mới.

Cách cài đặt lại root password MySQL/MariaDB trên Ubuntu 20.04

Bước 1 - Xác định phiên bản cơ sở dữ liệu và dừng máy chủ

Ubuntu 20.04 chạy MySQL hoặc MariaDB - một sự thay thế phổ biến mà hoàn toàn tương thích với MySQL. Bạn sẽ cần sử dụng các lệnh khác nhau để khôi phục mật khẩu root tùy thuộc vào bạn đã cài đặt MySQL hay MariaDB. Vì vậy hãy làm theo các bước trong phần này để xác định bạn đang chạy máy chủ cơ sở dữ liệu nào.

Kiểm tra phiên bản bằng lệnh sau:

$ mysql --version

Nếu bạn đang chạy MariaDB, bạn sẽ thấy "MariaDB" đi trước phiên bản trong kết quả đầu ra.

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

Nếu bạn đang chạy MySQL, bạn sẽ thấy đầu ra như sau:

MySQL output
mysql  Ver 8.0.22-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))

Chú ý xác định cơ sở dữ liệu bạn đang chạy. Điều này sẽ xác định các lệnh thích hợp để tiếp tục trong phần còn lại của hướng dẫn này.

Để thay đổi root password, bạn cần tắt máy chủ cơ sở dữ liệu. Nếu bạn đang chạy MariaDB, bạn có thể làm điều đó bằng lệnh sau:

$ sudo systemctl stop mariadb

Đối với MySQL, tắt máy chủ cơ sở dữ liệu bằng cách chạy lệnh sau:

$ sudo systemctl stop mysql

Sau khi tắt máy chủ cơ sở dữ liệu, bạn có thể khởi động lại nó ở chế độ an toàn để đặt lại mật khẩu root.

Bước 2 - Khởi động lại máy chủ cơ sở dữ liệu mà không kiểm tra quyền truy cập

Chạy MySQL và MariaDB mà không kiểm tra quyền truy cập sẽ cho phép bạn truy cập vào dòng lệnh cơ sở dữ liệu với quyền root nhưng không cần cung cấp mật khẩu hợp lệ. 

Để làm điều này, bạn cần dừng việc tải bảng cấp quyền của cơ sở dữ liệu, nơi lưu trữ thông tin đặc quyền người dùng. Vì đây là một mối đe dọa về bảo mật, bạn cũng có thể muốn tắt kết nối mạng để ngăn các khách hàng khác kết nối vào máy chủ tạm thời có lỗ hổng.

Tuy còn phụ thuộc vào máy chủ cơ sở dữ liệu đã cài đặt nhưng cách khởi động máy chủ mà không cần tải bảng cấp quyền sẽ khác nhau.

  • Cấu hình MariaDB để khởi động mà không tải bảng cấp quyền

Để khởi động máy chủ MariaDB mà không tải bảng cấp quyền, chúng ta sẽ sử dụng tệp đơn vị systemd để đặt các thông số bổ sung cho tiến trình máy chủ MariaDB.

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

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

Sau đó, khởi động máy chủ MariaDB:

$ sudo systemctl start mariadb

Lệnh này sẽ không tạo ra bất kỳ đầu ra nào nhưng nó sẽ khởi động lại máy chủ cơ sở dữ liệu, áp dụng các thiết lập biến môi trường mới.

Bạn có thể đảm bảo rằng nó đã khởi động bằng cách chạy lệnh sau: sudo systemctl status mariadb.

Bây giờ bạn có thể kết nối vào cơ sở dữ liệu với tư cách là người dùng root của MariaDB mà không cần cung cấp mật khẩu:

$ sudo mysql -u root

Ngay lập tức, bạn sẽ thấy dấu nhắc của dòng lệnh cơ sở dữ liệu:

MariaDB [(none)]> 

Bây giờ bạn đã có quyền truy cập vào máy chủ cơ sở dữ liệu, bạn có thể thay đổi root password như được hiển thị trong bước 3.

  • Cấu hình MySQL để khởi động mà không tải bảng cấp quyền

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

Để làm điều này, thực thi lệnh sau:

$ sudo systemctl edit mysql

Lệnh này sẽ mở một tệp tin mới trong trình soạn thảo nano, bạn sẽ sử dụng để chỉnh sửa các ghi đè dịch vụ cho MySQL. Điều này thay đổi các thông số dịch vụ mặc định cho MySQL.

Tệp tin này sẽ trống. Hãy thêm nội dung sau:

[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --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 tệp tin, sau đó nhấn Y để lưu các thay đổi mà bạn đã thực hiện, tiếp đến nhấn ENTER để xác nhận tên tệp tin.

Tải lại cấu hình systemd để áp dụng các thay đổi này:

$ sudo systemctl daemon-reload

Bây giờ hãy khởi động máy chủ MySQL:

$ sudo systemctl start mysql

Lệnh này sẽ không hiển thị bất kỳ đầu ra nào nhưng máy chủ cơ sở dữ liệu sẽ khởi động. Bảng cấp quyền và tính năng mạng sẽ không được kích hoạt.

Kết nối vào cơ sở dữ liệu với tư cách là người dùng root:

$ sudo mysql -u root

Ngay lập tức, bạn sẽ thấy dấu nhắc của dòng lệnh cơ sở dữ liệu:

msql>

Bây giờ bạn đã có quyền truy cập vào máy chủ, bạn có thể thay đổi root password.

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

Máy chủ cơ sở dữ liệu hiện đang chạy ở chế độ hạn chế, bên cạnh đó bảng cấp quyền không được tải và không có hỗ trợ mạng được kích hoạt. Điều này cho phép bạn truy cập vào máy chủ mà không cần cung cấp mật khẩu nhưng nó cấm bạn thực hiện các lệnh thay đổi dữ liệu. Để đặt lại mật khẩu root, bạn phải tải lại bảng cấp quyền sau khi đã truy cập được vào máy chủ.

Để yêu cầu máy chủ cơ sở dữ liệu tải lại bảng cấp quyền, hãy thực hiện lệnh FLUSH PRIVILEGES:

mysql> FLUSH PRIVILEGES;

Bây giờ bạn có thể thay đổi mật khẩu root. 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 root password MariaDB

Nếu bạn đang sử dụng MariaDB, thực thi câu lệnh sau để đặt mật khẩu cho tài khoản root. Hãy chắc chắn thay new_password bằng một mật khẩu mới mạnh mà bạn sẽ nhớ:

MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Bạn sẽ thấy thông báo này cho biết mật khẩu đã được thay đổi.

Output
Query OK, 0 rows affected (0.001 sec)

MariaDB cho phép sử dụng các cơ chế xác thực tùy chỉnh, vì vậy thực hiện hai câu lệnh sau để đảm bảo MariaDB sẽ sử dụng cơ chế xác thực mặc định cho mật khẩu mới mà bạn gán vào tài khoản root.

MariaDB [(none)]> UPDATE mysql.user SET authentication_string = '' WHERE user = 'root';
MariaDB [(none)]> UPDATE mysql.user SET plugin = '' WHERE user = 'root';

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

Output
Query OK, 0 rows affected (0.01 sec)

Mật khẩu đã được thay đổi. Gõ 'exit' để thoát khỏi MariaDB console và tiếp tục Bước 4 để khởi động lại máy chủ cơ sở dữ liệu ở chế độ bình thường.

  • Thay đổi root password MySQL

Để thay đổi mật khẩu của người dùng root trong MySQL, bạn hãy thực hiện câu lệnh sau. Hãy thay new_password bằng một mật khẩu mạnh mà bạn có thể nhớ được. MySQL cho phép sử dụng các cơ chế xác thực tùy chỉnh, vì vậy câu lệnh sau cũng đảm bảo rằng MySQL sẽ sử dụng cơ chế xác thực mặc định để xác thực người dùng root bằng mật khẩu mới:

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

Bạn sẽ thấy đầu ra sau đây cho biết mật khẩu đã được thay đổi thành công:

Output
Query OK, 0 rows affected (0.01 sec)

Mật khẩu hiện đã được thay đổi. Để thoát khỏi giao diện điều khiển MySQL, hãy gõ "exit". Hãy khởi động lại cơ sở dữ liệu ở chế độ hoạt động bình thường.

Bước 4 - Đưa máy chủ cơ sở dữ liệu của bạn trở lại cấu hình bình thường

Để khởi động lại máy chủ cơ sở dữ liệu ở chế độ bình thường, bạn phải hoàn tất các thay đổi đã thực hiện để kích hoạt mạng và tải bảng phân quyền. Một lần nữa, 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ỏ 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, xóa cấu hình systemd đã chỉnh sửa:

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

Tiếp theo, tải lại 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

Cơ sở dữ liệu đã được khởi động lại và trở về trạng thái bình thường của nó. Xác nhận rằng mật khẩu mới hoạt động bằng cách đăng nhập với tài khoản root và mật khẩu:

$ mysql -u root -p

Bạn sẽ được yêu cầu nhập mật khẩu. Hãy nhập mật khẩu mới và bạn sẽ có quyền truy cập vào dấu nhắc cơ sở dữ liệu.

Với các bước hướng dẫn đặt lại root password như trên thì bạn đã khôi phục quyền truy cập quản trị cho máy chủ MySQL/MariaDB. Lưu ý là phải đảm bảo rằng mật khẩu mới mà bạn chọn phải mạnh mẽ và an toàn.

Mọi người cũng tìm kiếm: root password ubuntu, mật khẩu mặc định của mysql, ubuntu root password, su password ubuntu, mật khẩu root ubuntu mặc định, root ubuntu 20.04, mysql ubuntu root password

Các gói dịch vụ Cloud VPS của KDATA mang đến cho bạn nhiều lựa chọn về hiệu suất cũng như khả năng lưu trữ, mọi nhu cầu về doanh nghiệp đều được đáp ứng. KDATA đảm bảo khả năng uptime lên đến 99,99%, toàn quyền quản trị và free backup hằng ngày. Tham khảo ngay các gói dịch vụ Cloud VPS:

https://kdata.vn/cloud-vps

👉 Liên hệ ngay KDATA hỗ trợ tận tình, support tối đa, giúp bạn trải nghiệm dịch vụ giá hời chất lượng tốt nhất