Cách đổi mật khẩu root của MySQL hoặc MariaDB trong CentOS 7

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

Quảng cáo

Ủng hộ website

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