Một ngày đẹp trời bạn vô tình quên mật khẩu của MySQL hoặc MariaDB của máy chủ Linux thì cũng đừng quá lo lắng nếu bạn vẫn có thể truy cập server với quyền quản trị cao nhất (root). Mình sẽ hướng dẫn các bạn reset lại mật khẩu của MySQL hoặc MariaDB
Để khôi phục lại mật khẩu quản lý MySQL/MariaDB bạn cần truy cập server với quyền quản trị root
# sudo su
Bước 1. Kiểm tra lại phiên bản của MySQL hoặc MariaDB
# mysql --version
Nếu là MySQL kết quả sẽ là:
mysql Ver 15.1 Distrib 10.0.35, for Linux (x86_64) using readline 5.1
Nếu là MariaDB kết quả sẽ là:
mysql Ver 15.1 Distrib 10.0.35-MariaDB, for Linux (x86_64) using readline 5.1
Bước 2: Tắt Máy chủ cơ sở dữ liệu (Database Server)
Nếu là MySQL
# sudo systemctl stop mysql
Nếu là MariaDB
# sudo systemctl stop mariadb
Lưu ý bạn phải tắt Database Server thì mới khôi phục lại mật khẩu được.
Bước 3. Khởi động lại máy chủ cơ sở dữ liệu mà không kiểm tra các quyền
Chạy lệnh
# mysqld_safe --skip-grant-tables --skip-networking &
Khi bạn khởi động lại máy chủ MySQL / MariaDB mà không tải các bảng grant có chứa các thông tin về quyền người dùng (user privileges) thì mặc nhiên nó sẽ cho bạn truy cập dòng lệnh database với quyền cao nhất mà không cần mật khẩu. Do đó có tùy chọn –skip-grant-tables. Tuy nhiên thì lúc thực hiện khá là nguy hiểm nếu ai đó vô tình kết nối đến database server vì thế bạn cần thêm tùy chọn –skip-networking vào câu lệnh trên.
Tiếp đến chạy lệnh dưới, nó sẽ bỏ qua hỏi mật khẩu:
# mysql -u root
Dòng lệnh của MySQL sẽ hiện ra
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 115633 Server version: 10.0.35-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
Bước 4. Đổi mật khẩu
Các đơn giản nhất để đổi mật khẩu MySQL là sử dụng câu lệnh ALTER USER tuy nhiên thì hiện giờ câu lệnh sẽ không dùng được do bảng grant không được tải lên. Để tải lại bảng grant thì các bạn dùng câu lệnh
MariaDB [(none)]> FLUSH PRIVILEGES;
Với MySQL phiên bản 5.7.6 trở lên hoặc MariaDB phiên bản 10.1.20 trở lên ta dùng lệnh sau để đổi mật khẩu:
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mat_khau_cua_ban';
Với MySQL phiên bản 5.7.5 trở xuống hoặc MariaDB phiên bản 10.1.20 trở xuống ta dùng lệnh sau
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mat_khau_cua_ban');
Chỗ ‘mat_khau_cua_ban’ các bạn thay bằng mật khẩu mà các bạn muốn nhé.
Lưu ý: Nếu lệnh ALTER USER không hoạt động thì bạn có thể thử lệnh UPDATE … SET
MariaDB [(none)]> UPDATE mysql.user SET authentication_string = PASSWORD('mat_khau_cua_ban') WHERE User = 'root' AND Host = 'localhost';
Nhớ đến bước này phải tải lại bảng grant
MariaDB [(none)]> FLUSH PRIVILEGES;
Trong cả 2 trường hợp nếu bạn thấy hiện ra kết quả bên dưới là đã thành công
Output Query OK, 0 rows affected (0.00 sec) The password has been changed, so you can now stop the manual instance of the database server and restart it as it was before.
Bước 5: Khởi động lại Database Server
Đầu tiên bạn phải tắt hoàn toàn database server mà bạn đã khởi động thủ công tại bước 3. Lệnh bên dưới sẽ tìm kiếm PID của tiến trình MySQL\MariaDB để gửi lệnh cho các tiến trình ấy thoát ra một cách trơn tru.
Với MySQL dùng lệnh:
# sudo kill 'cat /var/run/mysqld/mysqld.pid'
Với MariaDB dùng lệnh:
# sudo kill '/var/run/mariadb/mariadb.pid'
Sau đó khởi động lại services dùng systemctl
Với MySQL dùng lệnh:
# sudo systemctl start mysql
Với MariaDB dùng lệnh:
# sudo systemctl start mariadb
Bây giờ bạn đã có thể truy cập MySQL\MariaDB bằng lệnh mật khẩu bạn vừa tạo
# mysql -u root -p