Cách cài đặt MySQL 8 trên Debian 10

theanh

Administrator
Nhân viên
MySQL là một hệ thống cơ sở dữ liệu quan hệ mã nguồn mở hoạt động trên nhiều Hệ điều hành, bao gồm Windows, Linux, macOS và FreeBSD. Đây có lẽ là RDBMS mã nguồn mở phổ biến nhất và là thành phần trung tâm của LAMP và LEMP Stacks. Nhiều ứng dụng phụ thuộc vào MySQL như WordPress, Joomla, TYPO3, phpBB và nhiều ứng dụng khác.

Một số tính năng mới đã được thêm vào MySQL 8 bao gồm hỗ trợ JSON, Transactional Data Dictionary, cấu hình thời gian chạy liên tục, Document Store, Optimizer Hints, SQL roles, CTEs, window function, Invisible indexes và nhiều tính năng khác.

Bạn sẽ học được gì?

Trong hướng dẫn này, bạn sẽ học một số thứ liên quan đến máy chủ MySQL và dưới đây là thông tin chi tiết về:
  • Cài đặt MySQL Server 8 trên Debian Buster 10
  • Thiết lập mật khẩu gốc MySQL
  • Triển khai máy chủ MySQL an toàn (Thay đổi địa chỉ liên kết, cổng, v.v.)
  • Thiết lập SSL và bật kết nối từ xa cho máy chủ MySQL
  • Cài đặt và cấu hình phpMyAdmin
  • Truy vấn MySQL cơ bản để tạo người dùng, cơ sở dữ liệu, v.v.
  • Thiết lập sao lưu tự động MySQL cơ sở dữ liệu
Điều kiện tiên quyết

Chúng tôi sẽ cài đặt MySQL Server 8.04 trên Debian Buster 10 mới nhất với 2GB RAM và 4 CPU cho hướng dẫn này. Ngoài ra, chúng tôi cần quyền root để cài đặt các gói và chỉnh sửa cấu hình hệ thống.

Bước 1 - Thêm kho lưu trữ MySQL​

Đối với hướng dẫn này, chúng tôi sẽ cài đặt MySQL Server 8 từ kho lưu trữ MySQL chính thức. Để thực hiện điều đó, chúng ta cần thêm kho lưu trữ MySQL chính thức vào Máy chủ Debian của mình.

Trước khi thêm kho lưu trữ MySQL, hãy cài đặt gói 'GnuPG' bằng lệnh apt bên dưới.
Mã:
sudo apt install gnupg -y
Sau khi hoàn tất quá trình cài đặt, hãy tải xuống kho lưu trữ MySQL APT và thêm vào hệ thống của bạn.
Mã:
wget -q http://repo.mysql.com/mysql-apt-config_0.8.15-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.15-1_all.deb
Giữ nguyên kho lưu trữ theo mặc định và chọn 'OK'.



Và kho lưu trữ MySQL chính thức đã được thêm vào.

Tiếp theo, hãy cập nhật tất cả các kho lưu trữ khả dụng trên hệ thống Debian bằng lệnh sau.
Mã:
sudo apt cập nhật
Và bạn sẽ nhận được kho lưu trữ MySQL chính thức trong danh sách bên dưới.



Như có thể thấy, kho lưu trữ MySQL chính thức đã được thêm vào và chúng ta đã sẵn sàng cài đặt MySQL Server 8.0 vào Debian Buster 10.

Bước 2 - Cài đặt MySQL Server​

Để cài đặt MySQL Server 8.0 vào hệ thống Debian, hãy chạy lệnh apt bên dưới.
Mã:
sudo apt install mysql-server
Bây giờ hãy nhập mật khẩu gốc cho cài đặt MySQL của bạn và chọn 'OK'.



Lặp lại mật khẩu cho người dùng root MySQL của bạn.



Sau đó, bạn sẽ được yêu cầu cấu hình plugin xác thực mặc định của MySQL. Chọn 'Strong Password Encryption' theo khuyến nghị và chọn 'OK'.



Và quá trình cài đặt MySQL Server 8.0 đã hoàn tất.

Bây giờ hãy kiểm tra dịch vụ MySQL bằng lệnh sau.
Mã:
systemctl is-enabled mysql
systemctl status mysql
Dưới đây là kết quả bạn sẽ nhận được.



Kết quả là dịch vụ MySQL đã hoạt động trên Debian Server. Dịch vụ sẽ tự động chạy khi khởi động hệ thống.

Bước 3 - Bảo mật triển khai MySQL bằng mysql_secure_password​

Trong bước này, chúng ta sẽ cải thiện tính bảo mật của quá trình cài đặt máy chủ MySQL bằng công cụ dòng lệnh 'mysql_secure_installation'.

Công cụ 'mysql_secure_installation' sẽ giúp bạn cải thiện quá trình triển khai MySQL của mình từ nhiều khía cạnh khác nhau như thiết lập độ mạnh của mật khẩu, vô hiệu hóa quyền truy cập từ xa và xóa người dùng ẩn danh mặc định và cơ sở dữ liệu thử nghiệm.

Bây giờ hãy chạy lệnh 'mysql_secure_installation' trên shell của bạn.
Mã:
mysql_secure_installation
Khi bắt đầu cài đặt MySQL, bạn đã định cấu hình mật khẩu gốc cho MySQL. Bây giờ hãy nhập mật khẩu để tiếp tục quá trình.
Mã:
Nhập mật khẩu cho người dùng root: NHẬP MẬT KHẨU MYSQL ROOT CỦA BẠN
Sau đó, nhập 'Y' để cấu hình thành phần 'XÁC THỰC MẬT KHẨU'.
Mã:
CÁC THÀNH PHẦN XÁC THỰC MẬT KHẨU có thể được sử dụng để kiểm tra mật khẩu
và cải thiện tính bảo mật. Nó kiểm tra độ mạnh của mật khẩu
và cho phép người dùng chỉ đặt những mật khẩu
đủ an toàn. Bạn có muốn thiết lập thành phần XÁC THỰC MẬT KHẨU không?

Nhấn y|Y để Có, bất kỳ phím nào khác để Không: Y
Bây giờ hãy chọn mức chính sách xác thực mật khẩu cho tất cả người dùng. Nhập '2' để thiết lập chính sách mức mật khẩu 'STRONG'.
Mã:
Có ba mức chính sách xác thực mật khẩu:

THẤP Chiều dài >= 8
TRUNG BÌNH Chiều dài >= 8, số, chữ hoa và chữ thường, và ký tự đặc biệt
MẠNH Chiều dài >= 8, số, chữ hoa và chữ thường, ký tự đặc biệt, và tệp từ điển

Vui lòng nhập 0 = THẤP, 1 = TRUNG BÌNH và 2 = MẠNH: 2
Sử dụng mật khẩu hiện có cho root.
Bây giờ lệnh 'mysql_secure_installation' sẽ kiểm tra độ mạnh của mật khẩu hiện tại của bạn. Như có thể thấy, độ mạnh của mật khẩu hiện tại của chúng ta là '50'. Bây giờ hãy nhập 'Y' để thay đổi mật khẩu hiện tại bằng mật khẩu mới mạnh hơn.
Mã:
Độ mạnh ước tính của mật khẩu: 50 
Đổi mật khẩu cho root? ((Nhấn y|Y để Có, bất kỳ phím nào khác để Không): Y
Bây giờ hãy nhập mật khẩu mạnh của bạn và đảm bảo có điểm 100, sau đó nhập 'Y' để tiếp tục với mật khẩu mới.
Mã:
Mật khẩu mới: 

Nhập lại mật khẩu mới: 

Độ mạnh ước tính của mật khẩu: 100 
Bạn có muốn tiếp tục với mật khẩu đã cung cấp không? (Nhấn y|Y để Có, bất kỳ phím nào khác để Không): Y
Kết quả là, thành phần MySQL 'VALIDATE PASSWORD' đã được định cấu hình với chính sách mật khẩu mạnh và mật khẩu MySQL mới đã được tạo.

Tiếp theo, bạn sẽ được yêu cầu xóa người dùng ẩn danh mặc định. Nhập 'Y' để xóa người dùng ẩn danh mặc định cho cài đặt của bạn.
Mã:
Theo mặc định, cài đặt MySQL có một người dùng ẩn danh,
cho phép bất kỳ ai đăng nhập vào MySQL mà không cần tạo người dùng tài khoản. Điều này chỉ dành cho mục đích thử nghiệm và để quá trình cài đặt diễn ra suôn sẻ hơn một chút.
Bạn nên xóa chúng trước khi chuyển sang môi trường sản xuất.

Xóa người dùng ẩn danh? (Nhấn y|Y để Có, bất kỳ phím nào khác để Không): Y
Tiếp theo, nhập 'Y' một lần nữa để tắt đăng nhập từ xa MySQL và nếu bạn muốn máy chủ MySQL chỉ có thể truy cập cục bộ.
Mã:
Thông thường, root chỉ được phép kết nối từ 
'localhost'. Điều này đảm bảo rằng ai đó không thể đoán được 
mật khẩu root từ mạng.

Không cho phép root đăng nhập từ xa? (Nhấn y|Y để Có, bất kỳ phím nào khác để Không): Y
Sau đó, xóa cơ sở dữ liệu mặc định 'test' khỏi Máy chủ MySQL của bạn. Nhập 'Y' và nhấn Enter để tiếp tục.
Mã:
Theo mặc định, MySQL đi kèm với một cơ sở dữ liệu có tên là 'test' mà 
bất kỳ ai cũng có thể truy cập. Điều này cũng chỉ dành cho mục đích thử nghiệm,
và nên được xóa trước khi chuyển sang môi trường sản xuất.

Xóa cơ sở dữ liệu thử nghiệm và quyền truy cập vào cơ sở dữ liệu đó? (Nhấn y|Y để có, bất kỳ phím nào khác để không): Y
Tiếp theo, nhập 'Y' một lần nữa để tải lại các bảng đặc quyền. Trên thực tế, các thay đổi cấu hình MySQL mới đã được áp dụng.
Mã:
Tải lại các bảng đặc quyền sẽ đảm bảo rằng tất cả các thay đổi
đã thực hiện cho đến nay sẽ có hiệu lực ngay lập tức.

Tải lại các bảng đặc quyền ngay bây giờ? (Nhấn y|Y để có, bất kỳ phím nào khác để không): Y
Kết quả là, Triển khai Máy chủ MySQL An toàn bằng tập lệnh 'mysql_secure_installation' đã hoàn tất. Ở giai đoạn này, bạn đã kích hoạt thành phần 'XÁC THỰC MẬT KHẨU' với chính sách mật khẩu mạnh cấp độ '2', mật khẩu gốc mạnh mới cho MySQL cũng đã được cấu hình.

Bước 4 - Bảo mật máy chủ MySQL bằng cấu hình bổ sung​

Đối với hướng dẫn này, chúng tôi sẽ thêm cấu hình bổ sung để cải thiện việc triển khai Máy chủ MySQL. Chúng tôi sẽ chỉ định bind-address của MySQL Server, thay đổi cổng mặc định, vô hiệu hóa tệp dữ liệu tải và thiết lập chính sách hết hạn mật khẩu cho tất cả người dùng MySQL.

Bây giờ hãy đến thư mục '/etc/mysql/conf.d/' và tạo cấu hình mới 'mysqld.cnf' bằng trình soạn thảo vim.
Mã:
cd /etc/mysql/conf.d/
vim mysqld.cnf
Dán cấu hình sau vào đó.
Mã:
[mysqld]

# MySQL chạy trên 127.0.0.1 với cổng 8320
bind-address=127.0.0.1
port=8320

# Vô hiệu hóa LOAD DATA LOCA
local-infile=0

# Hết hạn mật khẩu thành 60 ngày
default_password_lifetime=60

# Plugin MySQLX đang chạy trên 127.0.0.1 với cổng 8321
mysqlx_bind_address=127.0.0.1
mysqlx_port=8321
Lưu và đóng.

Tiếp theo, khởi động lại dịch vụ MySQL và kiểm tra các cổng mở trên hệ thống bằng lệnh sau.
Mã:
systemctl restart mysql
ss -plnt
Dưới đây là kết quả bạn sẽ nhận được.



Như có thể thấy, Máy chủ MySQL đang hoạt động trên địa chỉ IP cục bộ '127.0.0.1' trên cổng TCP không phải mặc định '8320'.

Tiếp theo, để đăng nhập vào shell MySQL bằng cổng tùy chỉnh, bạn có thể sử dụng lệnh 'mysql' với tùy chọn '-P port' như bên dưới.
Mã:
mysql -u root -P 8320 -p
Nhập mật khẩu gốc cho Máy chủ MySQL.

Sau khi đăng nhập, hãy chạy truy vấn sau để kiểm tra cấu hình cổng của Máy chủ MySQL.
Mã:
hiển thị các biến như 'cổng';
Và bạn sẽ nhận được thông báo Máy chủ MySQL đang chạy trên cổng tùy chỉnh '8320' như bên dưới.



Kết quả là, bạn đã cấu hình Máy chủ MySQL để chạy trên địa chỉ IP cục bộ '127.0.0.1' với cổng TCP tùy chỉnh '8320'.

Bước 5 - Bảo mật và kích hoạt Kết nối từ xa MySQL bằng SSL​

Giả sử bạn muốn triển khai Máy chủ MySQL trên mạng nội bộ và cho phép các máy chủ khác trên cùng mạng truy cập cơ sở dữ liệu trên Máy chủ MySQL. Trong trường hợp đó, bạn nên bật SSL cho quá trình triển khai MySQL Server của mình.

Trong bước này, bạn sẽ tìm hiểu cách thiết lập và bật SSL và truy cập từ xa trên MySQL Server.

Tạo chứng chỉ SSL​

Theo mặc định, MySQL Server 8.0 sẽ tự động tạo chứng chỉ SSL trong quá trình cài đặt. Tất cả các chứng chỉ SSL mặc định đều có sẵn tại thư mục '/var/lib/mysql'.

Đối với bước này, chúng ta sẽ tạo một chứng chỉ SSL mới cho Máy chủ MySQL bằng công cụ dòng lệnh 'mysql_ssl_rsa_setup'.

Bây giờ, hãy tạo một thư mục SSL mới '/etc/mysql/certs' và thay đổi quyền sở hữu thư mục đó thành người dùng 'mysql'.
Mã:
mkdir -p /etc/mysql/certs/
sudo chown -R mysql:mysql /etc/mysql/certs
Tiếp theo, tạo các chứng chỉ SSL mới cho Máy chủ MySQL bằng lệnh sau. Và hãy đảm bảo thay đổi '--suffix=STRING' bằng Tên chung của bạn.
Mã:
sudo mysql_ssl_rsa_setup --suffix=HakasMySQLSrv --uid=mysql --datadir=/etc/mysql/certs/
Sau khi hoàn tất, chứng chỉ SSL mới cho Máy chủ MySQL đã được tạo tại thư mục '/etc/mysql/certs'.



Kiểm tra chứng chỉ SSL của bạn bằng lệnh sau.
Mã:
ls -lah /etc/mysql/certs/
openssl verify -CAfile /etc/mysql/certs/ca.pem /etc/mysql/certs/server-cert.pem /etc/mysql/certs/client-cert.pem
Dưới đây là kết quả bạn sẽ lấy.



Chứng chỉ SSL mới cho MySQL Server đã được tạo vào thư mục '/etc/mysql/certs/'.

Bật SSL và Truy cập từ xa vào MySQL Server​

Để bật SSL và truy cập từ xa trên MySQL Server, bạn sẽ cần thay đổi tùy chọn 'bind-address' bằng địa chỉ IP của mạng nội bộ và thêm cấu hình SSL cho MySQL.

Bây giờ hãy chuyển đến thư mục '/etc/mysql/conf.d/' và chỉnh sửa cấu hình mà chúng ta đã tạo ở trên cùng 'mysqld.cnf' bằng trình soạn thảo vim.
Mã:
cd /etc/mysql/conf.d/
vim mysqld.cnf
Thay đổi 'bind-address' bằng địa chỉ IP nội bộ của bạn như bên dưới.
Mã:
bind-address=172.16.0.3
Tiếp theo, thêm Cấu hình SSL cho Máy chủ MySQL bên dưới và thay đổi đường dẫn SSL theo đường dẫn của riêng bạn.
Mã:
ssl-ca=/etc/mysql/certs/ca.pem
ssl-cert=/etc/mysql/certs/server-cert.pem
ssl-key=/etc/mysql/certs/server-key.pem
Ngoài ra, bạn có thể chỉ định phiên bản TLS của tất cả các máy khách của mình và buộc chúng chỉ sử dụng kết nối SSL an toàn bằng cách sử dụng cấu hình sau.
Mã:
#require_secure_transport=ON
tls_version=TLSv1.1,TLSv1.2
Lưu và đóng.

Tiếp theo, khởi động lại dịch vụ MySQL để áp dụng cấu hình mới và kiểm tra địa chỉ IP của máy chủ MySQL bằng lệnh sau.
Mã:
systemctl restart mysql
ss -plnt
Và bạn sẽ nhận được thông báo Máy chủ MySQL đã hoạt động trên địa chỉ IP mạng nội bộ có bật SSL.


Thiết lập máy khách và kiểm tra kết nối SSL​

Để kết nối với máy chủ MySQL từ máy chủ/máy khách khác, bạn phải tạo người dùng MySQL mới, sao chép chứng chỉ máy khách và thêm cấu hình MySQL cho máy khách.

Đăng nhập vào shell MySQL bằng lệnh sau.
Mã:
mysql -u root -P 8320 -p
Bây giờ hãy tạo người dùng MySQL mới để kết nối từ xa bằng truy vấn sau.
Mã:
TẠO NGƯỜI DÙNG 'remoteuser'@'%' ĐƯỢC XÁC ĐỊNH VỚI mysql_native_password BỞI 'MyRemoteUserPasswordMySQL39==' YÊU CẦU SSL;
CẤP TẤT CẢ CÁC QUYỀN TRÊN *.* CHO 'remoteuser'@'%' VỚI TÙY CHỌN CẤP;
XẢ QUYỀN;
Nhập 'exit' để đăng xuất khỏi shell MySQL.



Tiếp theo, bạn cần sao chép CA và chứng chỉ máy khách và khóa vào máy khách bằng lệnh SCP như bên dưới.
Mã:
scp /etc/mysql/certs/ca.pem root@clientIP:/certificates/directory/
scp /etc/mysql/certs/client-cert.pem root@clientIP:/certificates/directory/
scp /etc/mysql/certs/client-key.pem root@clientIP:/certificates/directory/
Sau đó, kết nối với máy khách của bạn và tạo cấu hình mới bằng trình soạn thảo vim.
Mã:
vim ~/.my.cnf
Dán cấu hình máy khách MySQL như bên dưới và thay đổi đường dẫn chứng chỉ SSL của máy khách bằng đường dẫn của riêng bạn.
Mã:
[client]
ssl-ca=/home/gpk/certs/ca.pem
ssl-cert=/home/gpk/certs/client-cert.pem
ssl-key=/home/gpk/certs/client-key.pem
Lưu và đóng.

Để kết nối với Máy chủ MySQL từ xa bằng cổng tùy chỉnh, hãy chạy lệnh 'mysql' bên dưới.
Mã:
mysql -u remoteuser -h 172.16.0.3 -P 8320 -p


Sau khi đăng nhập, hãy kiểm tra trạng thái kết nối của bạn bằng truy vấn sau.
Mã:
TRẠNG THÁI
SELECT * FROM performance_schema.session_status
 WHERE VARIABLE_NAME IN ('Ssl_version','Ssl_cipher');
Dưới đây là kết quả bạn sẽ nhận được.



Như có thể thấy, bạn đã đăng nhập bằng kết nối bảo mật SSL TLSv1.2 vào Máy chủ MySQL.

Do đó, quyền truy cập từ xa bằng kết nối SSL bảo mật cho Máy chủ MySQL đã được bật.

Bước 6 - Cài đặt và cấu hình phpMyAdmin​

Trong bước này, bạn sẽ tìm hiểu cách cài đặt phpMyAdmin mới nhất với máy chủ web Apache. Bạn cũng sẽ học cách kết nối với MySQL Server trên máy chủ từ xa bằng một cổng tùy chỉnh và lưu trữ an toàn thông qua SSL từ phpMyAdmin.

Trước khi đi xa hơn, hãy cài đặt một số gói phụ thuộc bằng lệnh apt bên dưới.
Mã:
sudo apt install apache2 libapache2-mod-php php-imagick php-phpseclib php-php-gettext php-common php-mysql php-gd php-imap php-json php-curl php-zip php-xml php-mbstring php-bz2 php-intl php-gmp unzip
Tiếp theo, hãy đến thư mục '/var/www/html' và tải xuống mã nguồn phpMyAdmin mới nhất.
Mã:
cd /var/www/html/
wget -q https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
Bây giờ hãy giải nén mã nguồn phpMyAdmin và đổi tên vào thư mục mới có tên 'phpMyAdmin'.
Mã:
tar -xf phpMyAdmin-latest-all-languages.tar.gz
mv phpMyAdmin-5.0.2-all-languages phpMyAdmin
Tiếp theo, hãy vào thư mục '/var/www/phpMyAdmin' và sao chép tệp cấu hình mặc định vào 'config.inc.php'.
Mã:
cd /var/www/html/phpMyAdmin/
cp config.sample.inc.php config.inc.php
Chỉnh sửa tệp cấu hình 'config.inc.php' bằng trình soạn thảo vim.
Mã:
vim config.inc.php
Tạo mã bí mật blowfish bằng liên kết này và dán mã vào dòng 'blowfish_secret' như bên dưới.
Mã:
$cfg['blowfish_secret'] = '6}2]RFleN-JT=/vXD}L/0j0v.YALV/e3'; /* BẠN PHẢI ĐIỀN VÀO ĐÂY ĐỂ XÁC THỰC COOKIE! */
Tiếp theo, nhập thông tin chi tiết về Máy chủ MySQL của bạn vào dòng 'Cấu hình máy chủ' như bên dưới.
Mã:
/**
* Cấu hình máy chủ
*/
$i = 0;

.....
/* Cấu hình máy chủ MySQL tùy chỉnh */
$cfg['Máy chủ'][$i]['host'] = '172.16.0.3';
$cfg['Máy chủ'][$i]['port'] = '8320';
.....
Sau đó, dán cấu hình sau để kích hoạt giao tiếp SSL từ phpMyAdmin đến Máy chủ MySQL. Và hãy đảm bảo thay đổi đường dẫn chứng chỉ CA và máy khách bằng đường dẫn của riêng bạn và đảm bảo người dùng 'www-data' có thể truy cập chứng chỉ CA và máy khách.
Mã:
/* Cấu hình SSL */
$cfg['Servers'][$i]['ssl'] = true;
$cfg['Servers'][$i]['ssl_key'] = '/opt/mysql/certs/client-key.pem';
$cfg['Servers'][$i]['ssl_cert'] = '/opt/mysql/certs/client-cert.pem';
$cfg['Servers'][$i]['ssl_ca'] = '/opt/mysql/certs/ca.pem';

/* Vô hiệu hóa Xác minh SSL cho chứng chỉ tự ký */
/* Điểm tốt: Kết nối giữa phpMyAdmin và Máy chủ MySQL được Mã hóa */
/* Nhưng bạn vẫn dễ bị tấn công với MiTM */
$cfg['Servers'][$i]['ssl_verify'] = false;

/* Ẩn một số cơ sở dữ liệu */
$cfg['Servers'][$i]['hide_db'] = '(information_schema|performance_schema|sys|mysql)';
Lưu và đóng.

Bây giờ hãy thay đổi quyền sở hữu thư mục 'phpMyAdmin' thành người dùng 'www-data'.
Mã:
sudo chown -R www-data:www-data /var/www/html/phpMyAdmin
Và quá trình cài đặt phpMyAdmin và cấu hình phpMyAdmin đã hoàn tất.



Bây giờ hãy đăng nhập vào Máy chủ MySQL, kiểm tra trạng thái SSL của MySQL, tạo cơ sở dữ liệu và người dùng mới cho phpMyAdmin.

Đăng nhập vào Máy chủ MySQL bằng lệnh sau lệnh.
Mã:
mysql -u root -P 8329 -p
Bây giờ hãy kiểm tra trạng thái SSL bằng các truy vấn sau.
Mã:
SHOW VARIABLES LIKE '%ssl%';
STATUS
Dưới đây là kết quả bạn sẽ nhận được.



Như có thể thấy, máy chủ MySQL đang hoạt động với SSL được bật và đang sử dụng chứng chỉ SSL mà chúng tôi đã tạo. Chúng tôi cũng được kết nối với Máy chủ MySQL thông qua kết nối bảo mật SSL bằng tệp cấu hình '~/.my.cnf'.

Tiếp theo, tạo một cơ sở dữ liệu và người dùng mới có tên 'phpmyadmin' bằng truy vấn sau.
Mã:
TẠO CƠ SỞ DỮ LIỆU phpmyadmin;
TẠO NGƯỜI DÙNG 'phpmyadmin'@'%' ĐƯỢC XÁC ĐỊNH BẰNG mysql_native_password BỞI 'phpMyAdminAdmn352#$';
CẤP TẤT CẢ CÁC QUYỀN TRÊN *.* CHO 'phpmyadmin'@'%' BẰNG TÙY CHỌN CẤP;
XẢ QUYỀN;
Nhập 'exit' để đăng xuất khỏi MySQL Shell.



Bây giờ hãy mở trình duyệt web của bạn và nhập địa chỉ IP của máy chủ với đường dẫn 'phpMyAdmin' trên thanh địa chỉ.


Trên trang Đăng nhập phpMyAdmin, nhập người dùng 'phpmyadmin' với mật khẩu mà chúng ta đã tạo ở trên cùng và nhấp vào nút 'GO'.



Và bạn sẽ nhận được Bảng điều khiển phpMyAdmin như bên dưới.



Kết quả là quá trình cài đặt và cấu hình phpMyAdmin đã hoàn tất.

Bước 7 - Tạo người dùng và cơ sở dữ liệu MySQL​

Đối với bước này, bạn sẽ tìm hiểu cách sử dụng chính của các truy vấn MySQL để quản lý người dùng, cơ sở dữ liệu và lệnh mysqldump cơ bản để sao lưu cơ sở dữ liệu.

Kết nối với máy chủ MySQL và kiểm tra trạng thái kết nối​

Để kết nối với máy chủ MySQL, bạn có thể sử dụng dòng lệnh 'mysql'. Và theo mặc định, tất cả các kết nối từ Máy chủ MySQL cục bộ sẽ sử dụng socket Unix, kết nối SSL không làm cho kết nối an toàn hơn.

Kết nối với Máy chủ MySQL với cấu hình mặc định bằng lệnh sau.
Mã:
mysql -u username -p
Nếu Máy chủ MySQL của bạn đang chạy trên cổng tùy chỉnh, hãy sử dụng tùy chọn '-P port' bên dưới.
Mã:
mysql -u root -P 8320 -p
Nếu máy chủ MySQL của bạn chạy trên mạng cục bộ với cổng tùy chỉnh, hãy sử dụng tùy chọn 'h host/IP Address' và '-P port' bên dưới.
Mã:
mysql -u root -h 172.16.0.3 -P 8320 -p
Sau khi bạn đã kết nối với Máy chủ MySQL của mình, hãy chạy truy vấn sau để kiểm tra trạng thái kết nối.
Mã:
TRẠNG THÁI
Và bạn sẽ nhận được thông báo sau kết quả.



Và bạn đã kết nối thành công với Máy chủ MySQL.

Tạo và Hiển thị Cơ sở dữ liệu​

Sau khi kết nối với shell MySQL, bạn sẽ học cách tạo cơ sở dữ liệu MySQL, chọn cơ sở dữ liệu, tạo bảng và chèn dữ liệu.

Để tạo cơ sở dữ liệu MySQL mới, hãy sử dụng truy vấn sau.
Mã:
CREATE DATABASE hakase_db;
CREATE DATABASE yume_db;
CREATE DATABASE juice_db;
Bây giờ hãy kiểm tra tất cả các cơ sở dữ liệu danh sách trên máy chủ MySQL của bạn bằng truy vấn sau.
Mã:
SHOW DATABASES;
SHOW DATABASES LIKE "%db%";


Tiếp theo, bạn có thể chuyển đổi và chọn cơ sở dữ liệu bằng truy vấn sau.
Mã:
USE hakase_db;
Tiếp theo, bạn có thể tạo một bảng trên cơ sở dữ liệu của bạn bằng truy vấn 'CREATE TABLE' như bên dưới.
Mã:
CREATE TABLE users (first VARCHAR(20), last VARCHAR(20),
 email VARCHAR(20), birth DATE, country VARCHAR(20));
Bây giờ bạn có thể sử dụng 'DESCRIBE table-name' để kiểm tra tất cả các trường trên cơ sở dữ liệu của bạn.
Mã:
DESCRIBE users;
Và bạn sẽ nhận được tất cả các trường chi tiết trên bảng 'users'.



Tiếp theo, bạn có thể chèn dữ liệu thủ công vào bảng của mình bằng truy vấn 'INSERT' như bên dưới.
Mã:
INSERT INTO users
 VALUES ('Mark','Mine','[emailprotected]','1999-03-20','Canada');
Bây giờ bạn đã chèn dữ liệu thành công vào cơ sở dữ liệu MySQL. Tiếp theo, kiểm tra tất cả dữ liệu trên bảng bằng truy vấn 'SELECT' như bên dưới.
Mã:
SELECT * FROM users;
SELECT email, birth, country FROM users;
Và bạn sẽ nhận được tất cả dữ liệu từ bảng của mình.


Tạo Người dùng MySQL​

Sau khi tạo cơ sở dữ liệu, bạn sẽ học cách tạo người dùng trên Máy chủ MySQL và cấp quyền cho người dùng đó đối với cơ sở dữ liệu.

Truy vấn MySQL cơ bản để tạo người dùng là sử dụng truy vấn 'CREATE USER'. Sau đó, bạn có thể cấp quyền của cơ sở dữ liệu cho người dùng của mình bằng lệnh 'GRANT' theo sau là các tùy chọn của lệnh này. Và cuối cùng, bạn phải tải lại các bảng cấp quyền để áp dụng các thay đổi mới.
  • Cơ bản
Tạo người dùng mới có tên 'hakase@localhost' với mật khẩu 'MyHakasePasswordMySQL39==' và cấp mọi quyền của 'hakase_db' cho người dùng bằng truy vấn sau.
Mã:
CREATE USER 'hakase'@'localhost' IDENTIFIED BY 'MyHakasePasswordMySQL39==';
GRANT ALL PRIVILEGES ON hakase_db.* TO 'hakase'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Thông tin bổ sung, tên máy chủ 'user@localhost' là một phần của tên tài khoản. '@localhost' chỉ cho phép người dùng kết nối từ máy chủ cục bộ. Nếu không được cung cấp, giá trị mặc định là '%' cho phép người dùng từ mọi nơi.


  • Tạo người dùng để truy cập từ xa bằng plugin xác thực cụ thể
Chúng tôi sẽ tạo một người dùng mới chỉ có thể đăng nhập từ địa chỉ IP máy chủ cụ thể và sử dụng plugin xác thực cụ thể.

Chúng tôi sẽ tạo một người dùng mới có tên 'yume' kết nối thông qua IP máy khách '172.16.0.4' với plugin xác thực 'mysql_native_password' và người dùng sẽ chỉ được phép truy cập cơ sở dữ liệu 'yume_db'.
Mã:
TẠO NGƯỜI DÙNG 'yume'@'172.16.0.4' ĐƯỢC XÁC ĐỊNH VỚI mysql_native_password BỞI 'MyYumePasswordMySQL39==';
CẤP TẤT CẢ CÁC QUYỀN TRÊN yume_db.* CHO 'yume'@'172.16.0.4' VỚI TÙY CHỌN CẤP;
XẢ QUYỀN;
Do đó, người dùng 'yume' sẽ chỉ kết nối với máy chủ MySQL có địa chỉ IP '172.16.0.4'. Nếu không, xác thực người dùng sẽ bị MySQL Server từ chối.


  • Tạo người dùng và buộc sử dụng kết nối SSL được mã hóa
Để buộc người dùng sử dụng kết nối bảo mật SSL, bạn có thể sử dụng tùy chọn 'REQUIRE SSL'. Nếu kết nối bảo mật không thành công, bạn không thể kết nối với MySQL Server (không thể thiết lập kết nối).

Đối với trường hợp bảo mật hơn, bạn có thể sử dụng truy vấn 'REQUIRE X509', nghĩa là kết nối với MySQL Server chỉ được thiết lập khi máy người dùng/máy khách cung cấp chứng chỉ CA và máy khách.

Tạo người dùng mới có tên 'juice' với tên máy chủ '%'. Tùy chọn tên máy chủ '%' này cho phép người dùng 'juice' kết nối từ bất kỳ địa chỉ IP nào, nhưng kết nối sẽ được thiết lập khi máy khách cung cấp chứng chỉ CA và máy khách.
Mã:
CREATE USER 'juice'@'%' IDENTIFIED WITH mysql_native_password BY 'MyJuicePasswordMySQL39==' REQUIRE X509;
GRANT ALL PRIVILEGES ON juice_db.* TO 'juice'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Do đó, người dùng 'juice' có thể kết nối với Máy chủ MySQL khi máy khách cung cấp chứng chỉ CA và máy khách.


Show All Available user and Grants​

Sau khi tạo tất cả người dùng, hãy kiểm tra tất cả người dùng bằng các truy vấn sau.
Mã:
SELECT User, Host FROM mysql.user;
SELECT Người dùng, Máy chủ, plugin FROM mysql.user;
Bây giờ bạn sẽ nhận được thông tin chi tiết về người dùng, máy chủ và các plugin xác thực được người dùng sử dụng.



Tiếp theo, hãy kiểm tra tất cả các quyền của người dùng bằng truy vấn 'SHOW GRANTS' như bên dưới.
Mã:
SHOW GRANTS FOR 'hakase'@'localhost';
SHOW GRANTS FOR 'yume'@'172.16.0.3';
SHOW GRANTS FOR 'juice'@'%';
Bây giờ bạn sẽ nhận được thông tin chi tiết về các quyền của người dùng.



Kết quả là bạn đã học được cách sử dụng chính của MySQL Server, bao gồm tạo cơ sở dữ liệu, tạo bảng, chèn dữ liệu vào bảng, tạo và hiển thị người dùng và hiển thị thông tin chi tiết về các quyền của từng người dùng.

Bước 8 - Bổ sung: Tạo bản sao lưu gia tăng MySQL Cơ sở dữ liệu​

Đối với bước này, bạn sẽ tìm hiểu cách sử dụng chính của lệnh 'mysqldump' để sao lưu tất cả các cơ sở dữ liệu MySQL. Dòng lệnh 'mysqldump' cho phép bạn sao lưu tất cả các cơ sở dữ liệu, cơ sở dữ liệu cụ thể hoặc nhiều cơ sở dữ liệu và sao lưu các bảng.

Trước khi thực hiện bất kỳ bước nào khác, hãy tạo thư mục sao lưu và vào đó.
Mã:
mkdir -p ~/backup; cd ~/backup
Và bạn đã sẵn sàng để tạo bản sao lưu cơ sở dữ liệu MySQL bằng tiện ích 'mysqldump'.

Sao lưu tất cả các cơ sở dữ liệu​

Để sao lưu tất cả các cơ sở dữ liệu trên Máy chủ MySQL, hãy sử dụng lệnh mysqldump với tùy chọn '--add-databases' bên dưới.
Mã:
mysqldump -u root -P 8320 --all-databases -p > alldbs.sql
Bây giờ bạn sẽ nhận được tất cả bản sao lưu cơ sở dữ liệu của mình vào tệp SQL duy nhất có tên 'alldbs.sql'.

Sao lưu cơ sở dữ liệu cụ thể​

Để sao lưu cơ sở dữ liệu MySQL cụ thể, hãy bao gồm tên cơ sở dữ liệu của bạn vào lệnh mysqldump bên dưới.
Mã:
mysqldump -u root -P 8320 -p hakase_db > backup_hakase_db.sql
Kết quả là, bạn sẽ nhận được tệp sao lưu SQL từ cơ sở dữ liệu 'hakase_db' có tên là 'backup_hakase_db.sql' trên thư mục sao lưu.

Sao lưu nhiều cơ sở dữ liệu​

Nếu bạn muốn tạo bản sao lưu của nhiều cơ sở dữ liệu (không phải tất cả cơ sở dữ liệu trên Máy chủ MySQL), hãy sử dụng tùy chọn '--databases' bên dưới.
Mã:
mysqldump -u root -P 8320 -p --databases yume_db juice_db > multi-db-once.sql
Kết quả là, tệp sao lưu cho hai cơ sở dữ liệu 'yume_db' và 'juice_db' của bạn đã được tạo, được đặt tên là tệp 'multi-db-once.sql'.


Sao lưu tự động cơ sở dữ liệu MySQL​

Để thiết lập sao lưu tự động cho MySQL, chúng ta sẽ sử dụng 'cron' của Linux. Chúng ta sẽ tạo một tập lệnh bash mới cho cơ sở dữ liệu MySQL và chạy nó tự động tại một thời điểm cụ thể bằng cách sử dụng Linux Cron.

Trước khi thực hiện tiếp, hãy đăng nhập vào shell MySQL bằng lệnh sau.
Mã:
mysql -u root -P 8320 -p
Tạo một người dùng sao lưu mới với một số đặc quyền bằng cách sử dụng truy vấn sau.
Mã:
TẠO NGƯỜI DÙNG 'backup'@'localhost' ĐƯỢC XÁC ĐỊNH VỚI mysql_native_password BỞI 'MyBackupPasswordMySQL39==';
CẤP QUY TRÌNH, CHỌN, KHÓA BẢNG, HIỂN THỊ CHẾ ĐỘ XEM, SỰ KIỆN TRÊN *.* CHO 'backup'@'localhost' VỚI TÙY CHỌN CẤP;
XẢ QUYỀN;
Bây giờ hãy nhập 'exit' để đăng xuất khỏi shell MySQL.



Tiếp theo, tạo một thư mục sao lưu mới '/opt/backup/mysql' để lưu trữ tất cả các tệp sao lưu cơ sở dữ liệu của bạn.
Mã:
mkdir -p /opt/backup/mysql
Sau đó, hãy đến thư mục '/usr/local/sbin' và tạo một tệp bash mới 'auto_backup.sh' bằng trình soạn thảo vim.
Mã:
cd /usr/local/sbin/
vim auto_backup.sh
Thay đổi thông tin người dùng, mật khẩu và cổng theo thông tin của riêng bạn và dán cấu hình vào đó.
Mã:
#!/bin/bash

# Cấu hình cơ bản: dấu ngày tháng, ví dụ: YYYYMMDD
DATE=$(date +"%Y%m%d")

# Vị trí sao lưu của bạn (tạo thư mục trước!)
BACKUP_DIR="/opt/backup/mysql"

# Chi tiết đăng nhập MySQL
MYSQL_USER="backup"
MYSQL_PASSWORD="MyBackupPasswordMySQL39=="

# Vị trí thực thi MySQL (không cần thay đổi mục này)
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump

# Cơ sở dữ liệu MySQL bạn muốn skip
SKIPDATABASES="Database|information_schema|performance_schema|mysql"

# Số ngày giữ các thư mục (các thư mục cũ hơn X ngày sẽ bị xóa)
RETENTION=14

# ---- KHÔNG THAY ĐỔI DƯỚI DÒNG NÀY ---------------------------------------
#
# Tạo một thư mục mới vào vị trí thư mục sao lưu cho ngày này
mkdir -p $BACKUP_DIR/$DATE

# Truy xuất danh sách tất cả các cơ sở dữ liệu
databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`

# Làm cho các cơ sở dữ liệu trở nên đơn giản hơn bằng các tên riêng biệt và nén tệp .sql
cho db trong $databases; do
echo $db
$MYSQLDUMP --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz"
done

# Xóa các tệp cũ hơn X ngày
find $BACKUP_DIR/* -mtime +$RETENTION -delete
Lưu và đóng.

Bây giờ, hãy thực thi tập lệnh 'auto_backup.sh' và chạy tập lệnh để kiểm tra.
Mã:
chmod +x auto_backup.sh
./auto_backup.sh


Kết quả là, bạn sẽ nhận được các tệp sao lưu cơ sở dữ liệu của mình trong thư mục '/opt/mysql/backup-current-date'. Kiểm tra bằng lệnh sau.
Mã:
ls -lah /opt/backup/mysql/
ls -lah /opt/backup/mysql/datedir/
Dưới đây là kết quả bạn sẽ nhận được.



Kết quả là, bạn sẽ nhận được các tệp nén của bản sao lưu cơ sở dữ liệu của mình, điều đó có nghĩa là tập lệnh đang hoạt động.

Tiếp theo, tạo một cronjob mới sẽ chạy tập lệnh sao lưu tự động MySQL 'auto_backup.sh' hàng ngày vào thời điểm '00:00'.

Đặt trình chỉnh sửa mặc định thành 'vim' và tạo một cronjob mới dưới dạng người dùng root bằng lệnh sau.
Mã:
export EDITOR=vim
crontab -u root -e
Bây giờ hãy dán cấu hình sau vào đó.
Mã:
0 0 * * * sh /usr/local/sbin/auto_backup.sh
Lưu và đóng.

Cronjob mới cho người dùng root đã được tạo. Kiểm tra tất cả danh sách cronjob cho người dùng root bằng lệnh sau.
Mã:
crontab -u root -l
Và bạn sẽ nhận được cấu hình cron chi tiết cho người dùng root.



Kết quả là bạn đã thiết lập thành công sao lưu cơ sở dữ liệu MySQL tự động bằng tập lệnh bash và Linux Cron.

Cuối cùng, bạn đã học cách cài đặt và bảo mật MySQL Database Server trên Debian Buster 10 với quản lý cơ sở dữ liệu dựa trên web phpMyAdmin. Ngoài ra, bạn đã học truy vấn MySQL cơ bản để quản lý người dùng, tạo cơ sở dữ liệu và bảng, và sử dụng tiện ích mysqldump để sao lưu cơ sở dữ liệu.

Tài liệu tham khảo​

 
Back
Bên trên