DBMS (3) - Thao tác với Database Engine bằng dòng lệnh

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 selectinsertdelete, 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 selectinsertupdate on studentdb.*" - it can issue selectinsert and update (but no deletecreate/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

-----

Cập nhật: [10/8/2022]
-----