Bài trước: DBMS (2) - Làm quen với DBMS
-----
1.1
Thao tác với Database Engine bằng dòng lệnh
1.1.1
Thực hành với MySQL
Ở phần trước bạn đã biết cách:
– Tải một DBMS dưới dạng một gói phần mềm, giải nén, chép
vào một vị trí trong đĩa cứng
– Khởi tạo môi trường làm việc cho một DBMS (chỉ thực hiện một
lần)
– Chạy một DBMS
– Kết nối vào DBMS bằng cửa sổ dòng lệnh
– Đổi mật khẩu cho user root
– Ngắt kết nối bằng cửa sổ dòng lệnh
– Tắt DBMS
– Chạy và tắt DBMS dưới hình thức một dịch vụ (service) bằng
cửa sổ dòng lệnh
Như các bạn đã biết, DBMS gồm 3 thành phần chính gồm hệ thống
lõi Database Engine, công cụ (tập lệnh) để thao tác với Database Engine và các
Cơ sở dữ liệu do người dùng tạo ra trên Database Engine.
Sau khi tải và khởi tạo DBMS ở bài học trước, là bạn đã tạo
ra được Database Engine. Chương trình dòng lệnh (CMD, Command Prompt) và tập lệnh
là công cụ để thao tác với Database Engine.
Để thao tác với Database Engine có 3 cách:
– Sử dụng công cụ dòng lệnh (command line)
– Sử dụng giao diện đồ họa (GUI)
– Sử dụng ngôn ngữ lập trình (API)
Phần này giúp bạn sử dụng công cụ dòng lệnh và tập lệnh để
thực hiện các thao tác trên Database Engine một cách chi tiết hơn.
Các lệnh để làm việc với Database Engine thường gồm các loại
sau:
– Lệnh khởi tạo Database Engine
– Lệnh kết nối vào MySQL server (Database Engine)
– Các lệnh liên quan đến quản trị người dùng, hệ thống
– Các lệnh liên quan đến tổ chức và lưu trữ dữ liệu
– Các lệnh liên quan đến cập nhật và khai thác dữ liệu
– Các lệnh liên quan đến bảo mật dữ liệu, theo dõi hiệu suất,
sự toàn vẹn dữ liệu, sao lưu dự phòng dữ liệu
Lệnh để khởi tạo Database Engine (mysqld --initialize)
Kí tự ‘d’ trong mysqld là viết tắt của chữ deamon có
nghĩa là chương trình nền. Chương trình nền là chương trình chạy ngầm và thường
là không cho bạn tương tác trực tiếp với nó, mà phải dùng một chương trình khác
để tương tác. Bạn nhớ lại cửa sổ dòng lệnh sau khi bạn chạy MySQL server bằng lệnh
mysqld -- console, sau khi chạy thành
công, nó sẽ không cho bạn tương tác. Như vậy, nhìn ở góc độ sử dụng, MySQL
server sẽ gồm 2 phần:
– Chương trình nền (deamon) chính là MySQL server (hay Database
Engine)
– Chương trình người dùng (client) chính là cửa sổ dòng lệnh
và tập lệnh của mysql để thao tác với
Chương trình nền.
DBMS là một ứng dụng, làm việc theo mô hình client-server. Xem
hình minh họa:
Lệnh kết nối vào MySQL server
Khi thành phần server của MySQL đã chạy, bạn có thể sử dụng
chương trình cửa sổ dòng lệnh và lệnh mysql
để kết nối vào MySQL server với tài khoản có quyền cao nhất là root.
mysql -u root -h
localhost –p
Trong đó,
– mysql là lệnh của MySQL client
– tham số -u (user)
để khai báo tên người dùng (root)
– Tham số -h (host)
để chỉ ra địa chỉ của server nằm ở đâu (truy cập trên máy cục bộ nên địa chỉ là
localhost, nếu truy cập trên máy tính khác thì sẽ là tên miền hoặc địa chỉ IP)
– Tham số -p để
nhập mật khẩu cho user
Lệnh liên quan đến quản trị người dùng, hệ thống
Tại dấu nhắc lệnh
mysql>, bạn nhập dấu ? để xem các lệnh mà bạn có thể sử dụng,
mysql> ?
? (\?) Synonym for `help'.
clear (\c) Clear the current input statement.
connect (\r) Reconnect to the server. Optional arguments are db
and host.
delimiter (\d) Set statement delimiter.
ego (\G) Send command to mysql server, display
result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
help (\h) Display this help.
notee (\t) Don't write into outfile.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name
as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile]. Append
everything into given outfile.
use (\u) Use another database. Takes database name
as argument.
charset (\C) Switch to another charset. Might be needed for
processing binlog with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.
query_attributes Sets string parameters (name1 value1 name2 value2 ...)
for the next query to pick up.
ssl_session_data_print Serializes the current SSL session data to stdout
or file
– Bạn có thể xem trạng thái của MySQL server hiện tại bằng lệnh
status
ysql> status
--------------
mysql Ver 8.0.30 for Win64 on x86_64 (MySQL Community Server -
GPL)
Connection id: 8
Current database:
Current user: root@localhost
SSL:
Cipher in use is TLS_AES_256_GCM_SHA384
Using delimiter: ;
Server version: 8.0.30 MySQL Community
Server - GPL
Protocol version: 10
Connection: localhost via
TCP/IP
…
– Thay đổi mật khẩu của một người dùng (user), ví dụ thay đổi
mật khẩu của user root thành ‘abcdef’
mysql> alter user 'root'@'localhost' identified by 'abcdef';
Query OK, 0 rows affected (0.08 sec)
– Hiển thị các tài khoản người dùng hiện có trên máy MySQL
server
mysql> select Host, User, authentication_string from mysql.user;
+-----------+------------------+--------------------------------------------+
| Host | User
| authentication_string |
+-----------+------------------+--------------------------------------------+
| localhost | mysql.infoschema |
$A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session |
$A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys |
$A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root |
$A$005$th5Y3!⌂45_♠(Sq,W.▬1l.inLKDMjTPI2vgZo73jkeSZgTPSv8KbfrcqiHNe.rvA |
+-----------+------------------+--------------------------------------------+
4 rows in set (0.00 sec)
– Tạo một tài khoản mới. Lưu ý: tài khoản root là một tài
khoản có quyền cao nhất trong hệ thống (superuser), chỉ dùng cho việc quản trị
hệ thống chứ không sử dụng trong việc thao tác với cơ sở dữ liệu. Vì vậy, bạn cần
phải tạo mới các tài khoản với quyền ít hơn để thao tác với Cơ sở dữ liệu.
Để tạo tài khoản mới, bạn cần kết nối (đăng nhập) vào MySQL
server bằng user root.
mysql> create user 'nvteo'@'localhost' identified by 'teo123';
Query OK, 0 rows affected (0.17 sec)
Trong đó,
– create user: lệnh tạo tài khoản mới
– ‘nvteo’ là tên
tài khoản
– ‘localhost là địa
chỉ của máy MySQL server , nơi chứa tài khoản ‘nvteo’
– ‘teo123’ là mật
khẩu truy cập
Kiểm tra xem
trong MySQL server đã tạo được user nvteo chưa bằng lệnh, nếu có rồi là lệnh tạo
tài khoản đã chạy thành công.
mysql> select Host, User, authentication_string from mysql.user;
– Gán quyền cho một tài khoản người dùng (user). Lưu ý: khi
bạn tạo ra một tài khoản người dùng thì tài khoản đó không có quyền làm việc
trên hệ thống server. Vì vậy, bạn cần phải phân quyền cho tài khoản đó được
phép làm gì trên từng Cơ sở dữ liệu cụ thể. ví dụ:
mysql> grant all on *.* to 'nvteo'@'localhost';
Query OK, 0 rows affected (0.07 sec)
Trong đó grant là
lệnh gán quyền, all và *.* được giải thích ở đây (bạn tập khả năng đọc hiểu tài
liệu tiếng Anh, không nên dùng phần mềm dịch) [The newly
created user has NO privilege to perform any database operation including select
. We use the "grant
" command to grant "all
" the privileges (including select
, insert
, delete
, and so on) to this new user on ALL the databases and ALL
the tables ("on *.*
"). This new user, in practice, has the same privilege
as root
, except that it cannot issue grant
command. For production, you should grant only the
necessary privileges on selected databases and selected tables, e.g., "grant
select
, insert
, update on studentdb.*
" - it can issue select
, insert
and update
(but no delete
, create/drop table
) on ALL the tables of the database studentdb
only.]
– Kiểm tra xem, hiện tại bạn đang đăng nhập bằng tài khoản
nào
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql> select current_user();
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
1.1.2 Thiết lập biến môi trường trong Windows
Ở các ví dụ bạn đã thực hiện, để chạy các lệnh mysqld, mysql, mysqladmin, bạn phải chuyển
dấu nhắc lệnh vào thư mục mysql/bin,
việc này mất khá nhiều thời gian. Vậy có cách nào để chạy các lệnh trên ở vị
trí bất kì trong cửa sổ dòng lệnh không. Câu trả lời là hãy thiết lập biến môi
trường cho các lệnh trên.
Hiểu về biến môi trường (environment variable):
– Biến môi trường được sử dụng để tham chiếu tới ứng dụng
– Giá trị của biến chính là đường dẫn tới tập tin thực thi
(.exe) của ứng dụng, các giá trị của biến được ngăn cách nhau bằng dấu chấm phẩy
(;)
– Trong cửa sổ dòng lệnh, gõ lệnh “set” để xem các biến môi
trường và giá trị tương ứng
– Biến môi trường gồm hai loại: biến hệ thống và biến người
dùng; biến hệ thống cho phép mọi người đều dùng được, admin mới được phép thay
đổi biến này; biến người dùng chỉ cho một người cụ thể được thay đổi giá trị và
sử dụng.
Cách thiết lập biến môi trường cho một tập tin thực thi
Ví dụ, thiết lập biến môi trường cho lệnh mysql.exe trên Windows 10,
– Nhấn phím window (biểu tượng cửa sổ) trên bàn phím
– Nhập chữ “system”, sẽ thấy xuất hiện mục System (control
panel), bấm vào mục System
– Tại cửa sổ System, chọn mục Advanced system settings
– Trong cửa sổ System Properties, tab Advanced, chọn mục
Environment Variables…
– Trong cửa sổ Environment Variables, mục User variables
for…, chọn Path, chọn Edit
– Trong cửa sổ Edit environment variable, bấm nút New và nhập
giá trị của biến môi trường, ví dụ: D:\mysql\bin
– Bấm OK (một số lần) để hoàn thành việc thiết lập biến môi
trường
– Để kiểm tra xem việc thiết lập thành công hay chưa, mở cửa sổ dòng lệnh (cmd), nhập lệnh mysql ở vị trí dấu nhắc lệnh bất kì, nếu các lệnh này chạy được, nghĩa việc thiết lập biến môi trường đã thành công
1.1.3 Xem và đọc thêm
– Dùng các từ khóa sau để tìm kiếm trên mạng và đọc thêm: mysqld
--initialize stand for, thiết lập biến môi trường trên Windows
– How to work with MySQL: https://www3.ntu.edu.sg/home/ehchua/programming/sql/MySQL_HowTo.html
1.1.4 Bài tập và thực hành
Bài 1. Làm lại các câu lệnh ở phần lý thuyết.
Bài 2. Tạo mới tài khoản user1, gán quyền đầy đủ cho tài khoản
này, truy cập tới MySQL server bằng tài khoản user1, thử tạo tài khoản mới tên
là user2 xem có được không? giải thích kết quả.
Bài 3. Thiết lập biến môi trường cho các lệnh mysqld, mysql, mysqladmin để bạn có thể
sử dụng các lệnh này ở bất kì vị trí nào trong cửa sổ dòng lệnh.
1.1.5 Câu hỏi ôn tập
Câu 1. Kí tự ‘d’ trong lệnh mysqld là viết tắt của chữ nào?
A. Database
B. Data
C. Deamon
D. Document
Câu 2. The newly created user has NO __________to perform
any database operation including select. We use the "grant"
command to grant "all" the _________ (including select, insert, delete,
and so on) to this new user on ALL the databases and ALL the tables ("on
*.*").
A. account/accounts
B. login/logins
C. privilege/privileges
D. database/databases
Câu 3. Trong chương trình dòng lệnh (CMD, Command Prompt),
chữ “cd” trong lệnh chuyển thư mục là viết tắt của?
A. Command Directory
B. Change Directory
C. Change Drive
D. Callback Directory
Đáp án: 1(C), 2(C), 3 (B)
////// 3
-----