Giới thiệu
Hướng dẫn này mô tả cách đặt lại mật khẩu root cho cơ sở dữ liệu MySQL và MariaDB. Quy trình thay đổi mật khẩu root khác nhau tùy thuộc vào việc bạn đang sử dụng MySQL hay MariaDB và cấu hình hệ thống mặc định của systemd đi kèm với bản phân phối hoặc các gói từ các nhà cung cấp khác.
Yêu cầu
Để khôi phục mật khẩu root MySQL hoặc MariaDB của bạn, bạn sẽ cần:
Quyền truy cập vào máy chủ Ubuntu chạy MySQL hoặc MariaDB với tài khoản người dùng sudo hoặc cách khác để truy cập máy chủ với quyền root.
Bước 1 — Xác định Phiên Bản Cơ Sở Dữ Liệu và Dừng Máy Chủ
Kiểm tra phiên bản 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” kèm theo số phiên bản trong kết quả:
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, kết quả sẽ như sau:
mysql Ver 8.0.22-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
Lưu ý: máy chủ cơ sở dữ liệu bạn đang sử dụng. Điều này sẽ xác định các lệnh phù hợp để làm theo trong phần còn lại của hướng dẫn này.
Để thay đổi mật khẩu root, bạn cần dừng máy chủ cơ sở dữ liệu. Nếu bạn đang sử dụng MariaDB, bạn có thể làm như sau:
# sudo systemctl stop mariadb
- Đối với MySQL, dừng máy chủ cơ sở dữ liệu bằng lệnh:
# sudo systemctl stop mysql
Khi máy chủ cơ sở dữ liệu đã dừng, 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 Máy Chủ Cơ Sở Dữ Liệu mà Không Kiểm Tra Quyền
Chạy MySQL và MariaDB mà không kiểm tra quyền cho phép truy cập vào dòng lệnh cơ sở dữ liệu với quyền root mà 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 máy chủ cơ sở dữ liệu khỏi việc tải các bảng cấp quyền, bảng này lưu trữ thông tin quyền của người dùng. Vì đây là một rủi ro bảo mật, bạn cũng có thể muốn tắt tính năng mạng để ngăn không cho các máy khách khác kết nối vào máy chủ tạm thời dễ bị tấn công này.
Tùy thuộc vào máy chủ cơ sở dữ liệu bạn đã cài đặt, cách khởi động máy chủ mà không tải các bảng cấp quyền khác nhau.
Cấu hình MariaDB để Khởi Động mà Không Cấp Quyền
Để khởi động máy chủ MariaDB mà không sử dụng bảng cấp quyền, bạn sẽ sử dụng tệp unit systemd để đặt các tham số bổ sung cho daemon MariaDB.
# sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
Sau đó khởi động lại máy chủ MariaDB:
# sudo systemctl start mariadb
Bạn có thể kiểm tra xem máy chủ có khởi động không bằng cách sử dụng:
# sudo systemctl status mariadb
Giờ đây, bạn có thể kết nối với cơ sở dữ liệu dưới quyền root của MariaDB mà không cần cung cấp mật khẩu:
# sudo mysql -u root
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 mật khẩu root như mô tả trong Bước 3.
Cấu hình MySQL để Khởi Động mà Không Cấp Quyền
Để khởi động máy chủ MySQL mà không tải các bảng cấp quyền, bạn sẽ chỉnh sửa cấu hình systemd của MySQL để cung cấp các tham số dòng lệnh bổ sung khi khởi động.
# sudo systemctl edit mysql
Lệnh này sẽ mở một tệp mới trong trình soạn thảo nano, nơi bạn sẽ chỉnh sửa các ghi đè dịch vụ của MySQL. Những thay đổi này sẽ thay đổi các tham số mặc định của dịch vụ MySQL.
Tệp này sẽ trống. Thêm nội dung sau:
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking
Dòng lệnh ExecStart
đầu tiên sẽ xóa giá trị mặc định, trong khi dòng lệnh thứ hai cung cấp cho systemd lệnh khởi động mới, bao gồm các tham số để tắt việc tải bảng cấp quyền và tính năng mạng.
Nhấn CTRL-x để thoát tệp, sau đó nhấn Y để lưu các thay đổi bạn đã thực hiện, và ENTER để xác nhận tên tệp.
Tải lại cấu hình systemd để áp dụng những thay đổi này:
# sudo systemctl daemon-reload
Bây giờ, khởi động máy chủ MySQL:
# sudo systemctl start mysql
Kết nối với cơ sở dữ liệu dưới quyền root:
# sudo mysql -u root
Giờ bạn đã có quyền truy cập vào máy chủ, bạn có thể thay đổi mật khẩu root.
Bước 3 — Thay Đổi Mật Khẩu Root
Máy chủ cơ sở dữ liệu hiện đang chạy ở chế độ hạn chế; các bảng cấp quyền không được tải và không có tính năng mạng. Điều này cho phép bạn truy cập máy chủ mà không cần cung cấp mật khẩu, nhưng nó ngăn bạn thực thi 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 các bảng cấp quyền sau khi đã truy cập 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 bằng lệnh:
FLUSH PRIVILEGES;
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 Mật Khẩu MariaDB
Nếu bạn đang sử dụng MariaDB, thực hiện câu lệnh sau để đặt mật khẩu cho tài khoản root, thay new_password
bằng một mật khẩu mạnh mới mà bạn sẽ nhớ:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Bạn sẽ thấy kết quả như sau, cho biết mật khẩu đã được thay đổi:
Query OK, 0 rows affected (0.001 sec)
Mật khẩu đã được thay đổi. Gõ exit
để thoát khỏi bảng điều khiển MariaDB và chuyển sang Bước 4 để khởi động lại máy chủ cơ sở dữ liệu ở chế độ bình thường.
Thay Đổi Mật Khẩu MySQL
Đối với MySQL, thực hiện câu lệnh sau để thay đổi mật khẩu của người dùng root, thay new_password
bằng một mật khẩu mạnh mà bạn sẽ nhớ. MySQL cho phép sử dụng cơ chế xác thực tùy chỉnh, vì vậy câu lệnh này cũng đảm bảo MySQL sẽ sử dụng cơ chế xác thực mặc định để xác thực người dùng root với mật khẩu mới:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password';
Bạn sẽ thấy kết quả như sau, cho biết mật khẩu đã được thay đổi thành công:
Query OK, 0 rows affected (0.01 sec)
Mật khẩu đã được thay đổi. Thoát khỏi bảng điều khiển MySQL bằng cách gõ exit
.
Bây giờ, chúng ta sẽ 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 Quay Lại Cài Đặt 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ác các thay đổi bạn đã thực hiện để bật lại tính năng mạng và tải lại bảng cấp 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 thiết lập biến môi trường MYSQLD_OPTS bạn đã thiết lập 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, loại bỏ cấu hình systemd đã chỉnh sửa:
# sudo systemctl revert mysql
Bạn sẽ thấy đầu ra tương tự như sau:
Removed /etc/systemd/system/mysql.service.d/override.conf.
Removed /etc/systemd/system/mysql.service.d.
Sau đó, 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
Máy chủ cơ sở dữ liệu hiện đã được khởi động lại và trở lại trạng thái bình thường. Xác nhận rằng mật khẩu mới hoạt động bằng cách đăng nhập vào cơ sở dữ liệu dưới quyền root với mật khẩu:
mysql -u root -p
Bạn sẽ được nhắc nhập mật khẩu. Nhập mật khẩu mới của bạn và bạn sẽ có quyền truy cập vào lời nhắc cơ sở dữ liệu như mong đợi.
Kết luận
Bạn đã khôi phục quyền truy cập quản trị vào máy chủ MySQL hoặc MariaDB. Đảm bảo mật khẩu mới bạn chọn là mạnh và bảo mật, và giữ nó ở một nơi an toàn.
Để biết thêm thông tin về quản lý người dùng, cơ chế xác thực hoặc các phương pháp đặt lại mật khẩu cơ sở dữ liệu cho các phiên bản khác của MySQL hoặc MariaDB, vui lòng tham khảo tài liệu chính thức của MySQL hoặc MariaDB.