Tải bản đầy đủ (.pdf) (33 trang)

Dbms report group 1

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.22 MB, 33 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH

Hệ quản trị cơ sở dữ liệu (CO3021)
MySQL & Cassandra

GVHD:
Nhóm:
SV thực hiện:

TS. Võ Thị Ngọc Châu
1
Vương Anh Khoa – 1711803
Nguyễn Phạm Duy An – 1710430
Nguyễn Xuân Trực – 1513804
Cao Nguyệt Minh – 1710188

Tp. Hồ Chí Minh, Tháng 01/2020


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Mục lục
1 Các tính năng lựa chọn

2

2 Tính năng lựa chọn cấu trúc lưu trữ cho tập
2.1 MySQL . . . . . . . . . . . . . . . . . . . . .


2.1.1 InnoDB . . . . . . . . . . . . . . . . .
2.1.2 Các kiểu dữ liệu trong MySQL . . . .
2.2 Cassandra . . . . . . . . . . . . . . . . . . . .
2.2.1 Cấu trúc chung của Cassandra . . . .
2.2.2 Các Kiểu dữ liệu trong Cassandra . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.

.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.

.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.


3
3
3
5
8
8
10

3 Tính năng thực hành với chỉ mục
3.1 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 Tổng quan . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2 Cấu trúc chỉ mục trong MySQL . . . . . . . . . . . .
3.1.3 Các câu lệnh DDL liên quan đến index trong MySQL
3.1.4 Ví dụ minh họa: . . . . . . . . . . . . . . . . . . . . .
3.2 Cassandra . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.


.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.

.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.

.
.

13
13
13
13
14
15
15

4 Tính năng thực hành phục hồi dữ liệu
4.1 MySQL . . . . . . . . . . . . . . . . .
4.1.1 Tóm tắt lý thuyết . . . . . . .
4.1.2 Thực hành phục hồi dữ liệu . .
4.2 Cassandra . . . . . . . . . . . . . . . .

.
.
.
.

.
.
.
.

.
.
.

.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.

.

.
.
.
.

.
.
.
.

18
18
18
18
19

.
.
.
.

.
.
.
.

.
.

.
.

.
.
.
.

tin dữ liệu
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.


.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.


5 Tính năng thực hành sao lưu dữ liệu
5.1 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Tóm tắt lý thuyết . . . . . . . . . . . . . . . . . . . . .
5.1.2 Thực hành sao lưu dữ liệu trên Windown . . . . . . . .
5.1.2.a Ví dụ 1: sao lưu database "quanlydean"
5.1.2.b Ví dụ 2: sao lưu database "quanlydean"
5.1.2.c Ví dụ 3: sao lưu database "quanlydean"
5.2 Cassandra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1 Snapshot tất cả không gian khóa . . . . . . . . . . . . .
5.2.2 Snapshot một khơng gian khóa . . . . . . . . . . . . . .
5.2.3 Snapshot một bảng . . . . . . . . . . . . . . . . . . . . .
5.2.4 Incremental Backup . . . . . . . . . . . . . . . . . . . .
5.2.5 Thực hành sao lưu dữ liệu với Cassandra . . . . . . . .

. . .
. . .
. . .
bằng
bằng
hoàn
. . .
. . .
. . .
. . .
. . .
. . .

. . . . . . .
. . . . . . .

. . . . . . .
dịng lệnh .
file batch .
tồn tự động
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .

21
21
21
21
21
22
24
26
27
27
28
28
29

6 Tổng kết

30

7 Phân công công việc


30

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 1/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

1

Các tính năng lựa chọn

Nhóm 1 sẽ chọn các tính năng sau để trình bày trong báo cáo:
• Lựa chọn cấu trúc lưu trữ cho tập tin dữ liệu
• Thực hành với chỉ mục
• Thực hành khơi phục dữ liệu
• Thực hành sao lưu dữ liệu

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 2/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

2


Tính năng lựa chọn cấu trúc lưu trữ cho tập tin dữ liệu

2.1

MySQL

• MySQL là cơ sở dữ liệu hướng đối tượng. Dữ liệu được tổ chức thành nhiều bản ghi (record).
Một record bao gồm nhiều trường dữ liệu (field) và các giá trị tương ứng của các trường
của record đó. Một table sẽ gồm nhiều record có cấu trúc field giống nhau. Trong mơ hình
ERD thì table tương ứng với một entity và các field của record là các thuộc tính (attribute)
của entity đó.
• Theo mặc định, các record sẽ được sắp xếp vật lí dưới đĩa dựa trên PRIMARY KEY
INDEX.
• Dạng lưu trữ hàng, cột, bảng vv... trong MySQL hay các hệ quản trị cơ sở dữ liệu khác là
cách lưu trữ luận lí nhằm giúp cho người dùng có thể dễ dàng hiểu và sử dụng cơ sở dữ
liệu. Tuy vậy, muốn hiểu việc MySQL lưu trữ dữ liệu trên ổ cứng như thế nào thì ta cần
hiểu đến khái niệm Storage Engine. Storage Engine thực chất là cách MySQL lưu trữ
dữ liệu trên đĩa cứng. MySQL lưu mỗi database như là một thư mục con nằm dưới thư
mục data. Khi một table được tạo ra, MySQL sẽ lưu định nghĩa bảng ở file đuôi .frm và
tên trùng với tên của bảng được tạo. Ta sẽ tiến hành đi tìm hiểu một Storage Engine được
sử dụng phổ biến cùng với MySQL: InnoDB.
2.1.1

InnoDB

Một bản ghi vật lí của MySQL sử dụng storage engine InnoDB sẽ gồm có 3 phần: Field Start
Offsets, Extra Bytes, Field Contents.
Name


Size

Field Start Offsets
Extra Bytes
Field Contents

(F*1) hoặc (F*2) bytes
6 bytes
Tùy thuộc vào giá trị của field

Chữ ’F’ đại diện cho số field của record.
Các bản ghi sẽ được lưu trữ vật lí vào một đơn vị, được gọi là "page" (hoặc "block").
Mỗi page có độ dài cố định là 16KB. Một page gồm có 7 phần được sắp xếp theo thứ tự như
sau: Fil Header, Page Header, Infimum + Supremum Records, User Records, Free Space, Page
Directory, Fil Trailer. Có thể thấy ở phần giữa của page là các record chứa dữ liệu và khoảng
trống free space dùng để chèn các record mới vào.
Trong nội dung bài báo cáo này, nhóm sẽ trình bày chi tiết hơn về cấu trúc lưu trữ vật lí của
bản ghi (record).
2.1.1.1

Field Start Offsets:

• Về cơ bản, phần này gồm những thông tin về địa chỉ bắt đầu của một trường dữ liệu.
• Ta có một ví dụ minh họa sau: Giả sử có một record có 3 field. Field 1 có độ dài 1, Field
2 có độ dài 2, Field 3 có độ dài 4. Trong trường hợp này, các giá trị offset của các trường
sẽ lần lượt là: 1, 3 (1+2), and 7 (1+2+4). Các giá trị này sẽ được lưu theo chiều ngược lại
nên khi lưu dưới dạng nhị phân sẽ trở thành: 07,03,01.
Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 3/32



Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

2.1.1.2

Extra Bytes:

• Là header gồm có 6 bytes (fixed-size, 48 bits).
Name

Size

Description

info_bits:
()
()
deleted_flag
min_rec_flag
n_owned
heap_no
n_fields
1byte_offs_flag
next 16 bits

??
1 bit
1 bit

1 bit
1 bit
4 bits
13 bits
10 bits
1 bit
16 bits

1 nếu record bị xóa
1 nếu record được định nghĩa tối thiểu trước
Số record
Thứ tự record trong heap của trang index
Số trường trong record này (1-1023)
1 nếu phần Field Start Offsets có độ dài 1 byte
Con trỏ đến record tiếp theo trong trang

• Giả sử cho một pointer trỏ đến điểm khởi đầu, InnoDB tìm điểm bắt đầu của một record
bằng cách:
– Cho biến X = n_fields
– Nếu 1byte_offs_flag == 0 thì X = X * 2
– Cho X = X + 6 (Cộng thêm 6 bytes của phần Extra Bytes)
– Điểm bắt đầu của record ở địa chỉ pointer value - X
2.1.1.3

Field Contents

• Đây là phần chứa dữ liệu thật sự của field. Các trường được lưu trữ theo đúng thứ tự định
nghĩa.
• Cho một ví dụ minh họa sau:
CREATE TABLE T

(FIELD1 VARCHAR(3), FIELD2 VARCHAR(3), FIELD3 VARCHAR(3))
Type=InnoDB;
• Bảng T thực chất được tạo ra với 6 cột. InnoDB tự động thêm vào 3 "cột hệ thống" vào
đầu để quản lí. 3 cột này lần lượt là row ID, transaction ID và rollback pointer.
• Tiếp theo, Thêm vào bảng một vài record:
INSERT INTO T VALUES (’PP’, ’PP’, ’PP’);
INSERT INTO T VALUES (’Q’, ’Q’, ’Q’);
INSERT INTO T VALUES (’R’, NULL, NULL);
• Khi đó, giá trị nhị phân được lưu dưới đĩa cứng sẽ như sau:
19
00
00
00

17
00
00
00

15
78
00
00

13
0D
00
00

0C

02
04
09

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

06
BF
21
2A

Field Start Offsets /* First Row */
Extra Bytes
System Column #1
System Column #2

Trang 4/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

2.1.2
2.1.2.1

80
50
50
50


00
50
50
50

00 00 2D 00 84 System Column #3
Field1 ’PP’
Field2 ’PP’
Field3 ’PP’

16
00
00
00
00
51
51
51

15 14 13 0C
00 80 0D 02
00 00 00 04
00 00 00 09
00 00 2D 00
Field1 ’Q’
Field2 ’Q’
Field3 ’Q’

06
E1

22
2B
84

Field Start Offsets /* Second Row */
Extra Bytes
System Column #1
80 System Column #2
System Column #3

94
00
00
00
80
52

94 14 13 0C
00 88 0D 00
00 00 00 04
00 00 00 09
00 00 00 2D
Field1 ’R’

06
74
23
2C
00


Field Start Offsets /* Third Row */
Extra Bytes
System Column #1
System Column #2
84 System Column #3

Các kiểu dữ liệu trong MySQL
Các kiểu số nguyên:

Các kiểu số nguyên tiêu chuẩn của SQL như INTEGER (or INT) và SMALLINT đều được
hỗ trợ bởi MySQL. Và các mở rộng tiêu chuẩn, MySQL cũng hỗ trợ các kiểu số nguyên khác như
TINYINT, MEDIUMINT, và BIGINT. Bảng dưới đây sẽ liệt kê các kiểu và khơng gian lưu trữ
địi hỏi và phạm vi của chúng (Giá trị nhỏ nhất, lớn nhất cho kiểu số ngun có dấu, và khơng
dấu).

2.1.2.2

Type

Length(byte)

Min val(Signed)

Max value(Signed)

TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT


1
2
3
4
8

-128
-32768
-8388608
-2147483648
-9223372036854775808

127
32767
8388607
2147483647
92233720368 54775807

Kiểu dấu chấm động (Floating-Point Types)

Kiểu dữ liệu FLOAT và DOUBLE mô tả gần đúng các giá trị số thực. MySQL sử dụng 4
byte để lưu trữ dữ liệu FLOAT và 8 byte dành cho kiểu dữ liệu DOUBLE.
• FLOAT(M,D): Một số chấm động (floating-point number) khơng thể khơng có dấu (unsigned). Có thể định nghĩa độ dài phần nguyên (M) và độ dài phần thập phân (D). Điều
này không bắt buộc và mặc định là 10,2, ở đây 10 là độ dài phần nguyên còn 2 là số số
thập phân. Phần thập phân có thể sử dụng 24 vị trí cho một số FLOAT.
• DOUBLE(M,D): Một số chấm động DOUBLE (Độ chính xác gấp 2) cũng khơng thể khơng
có dấu (unsigned). Có thể định nghĩa độ dài phần nguyên (M) và độ dài phần thập phân
Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021


Trang 5/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

(D). Điều này khơng bắt buộc và mặc định là 16,4, ở đó 16 là độ dài phần nguyên còn 4 là
độ dài phần thập phân. Phần thập phân có thể sử dụng tới 53 vị trí cho một số DOUBLE.
REAL là một từ đồng nghĩa với DOUBLE.
2.1.2.3

Kiểu dấu chấm cố định (Fixed-Point Types)

Kiểu dấu chấm cố định (Fixed-Point data type) được sử dụng để bảo vệ độ chính xác
(precision), ví dụ như với dữ liệu tiền tệ. Trong MySQL kiểu DECIMAL và NUMERIC lưu trữ
chính xác các dữ liệu số. MySQL 5.6 lưu trữ giá trị DECIMAL theo định dạng nhị phân.
Trong SQL chuẩn, cú pháp DECIMAL(5,2) nghĩa là độ chính xác (precision) là 5, và 2 là
phần thập phân (scale), nghĩa là nó có thể lưu trữ một giá trị có 5 chữ số trong đó có 2 số thập
phân. Vì vậy giá trị lưu trữ sẽ là -999.99 tới 999.99. Cú pháp DECIMAL(M) tương đương với
DECIMAL(M,0). Tương tự DECIMAL tương đương với DECIMAL(M,0) ở đây M mặc định là
10. Độ dài tối đa các con số cho DECIMAL là 65.

2.1.2.4

Kiểu dữ liệu DATETIME, DATE, và TIMESTAMP

• DATETIME: Sử dụng khi cần giá trị lưu trữ cả hai thông tin ngày tháng và thời gian. Ví
dụ: 2020-03-20 07:30:45
• DATE: Sử dụng khi muốn lưu trữ chỉ thơng tin ngày tháng. Ví dụ: 2020-03-20
• TIMESTAMP: Lưu trữ cả hai thông tin ngày tháng và thời gian. Giá trị này sẽ được chuyển

đổi từ múi giờ hiện tại sang UTC trong khi lưu trữ, và sẽ chuyển trở lại múi giờ hiện tại
khi lấy dữ liệu ra.
Kiểu dữ liệu DATETIME được sử dụng khi cần lưu trữ cả hai thông tin ngày tháng và thời
gian. MySQL lấy và hiển thị DATETIME theo định dạng ‘YYYY-MM-DD HH:MM:SS’. Và hỗ
trợ phạm vi từ ’1000-01-01 00:00:00’ tới ’9999-12-31 23:59:59’.
Kiểu dữ liệu TIMESTAMP cũng được sử dụng khi muốn lưu trữ cả hai thông tin ngày tháng
và thời gian. TIMESTAMP có phạm vi ’1970-01-01 00:00:01’ UTC tới ’2038-01-19 03:14:07’ UTC
Sự khác biệt chính của DATETIME và TIMESTAMP là giá trị của TIMESTAMP được
chuyển đổi từ múi giờ hiện tại sang UTC trong khi lưu trữ, và chuyển ngược trở lại từ UTC sang
múi giờ hiện tại trong lúc lấy ra. Cịn kiểu dữ liệu DATETIME thì khơng có gì thay đổi.
2.1.2.5

Kiểu dữ liệu CHAR và VARCHAR

Các field có thể được chia ra làm 2 loại: fixed-length và variable-length (độ dài cố định và
độ dài biến đổi). Chẳng hạn đối với MySQL, một field với type INT sẽ có độ dài cố định là
4-byte. Hoặc CHAR với độ dài cố định do người dùng định nghĩa (0-255 bytes), DBMS sẽ lưu
dữ liệu dạng CHAR bằng cách right-padding khoảng trắng để bù cho đủ độ dài định nghĩa trên.
Tuy vậy khi truy xuất dữ liệu khoảng trắng sẽ bị bỏ đi. Còn field với type VARCHAR thì
sẽ có độ dài thay đổi (Tuy vậy độ dài tối đa vẫn được định nghĩa trước, dao động cũng trong
khoảng 0-255). VARCHAR sẽ có 1 byte prefix để lưu trữ độ dài của giá trị.

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 6/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính


Hình 1: Ví dụ về lưu trữ dữ liệu theo kiểu CHAR

Hình 2: Ví dụ về lưu trữ dữ liệu theo kiểu VARCHAR

2.1.2.6

Kiểu dữ liệu BLOB

BLOB là một đối tượng nhị phân lớn (Binary Large OBject) có thể chứa một lượng lớn dữ
liệu. Có bốn loại BLOB, TINYBLOB, BLOB, MEDIUMBLOB, và LONGBLOB. Nhưng chỉ
khác nhau về độ dài tối đa của các giá trị có thể giữ. Kiểu dữ liệu BLOB thường được dùng để
lưu trữ dữ liệu dưới dạng hình ảnh.
Type

Length

TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB

255 bytes
64 kb
16 Mb
4 Gb

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 7/32



Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

2.2
2.2.1

Cassandra
Cấu trúc chung của Cassandra

Cassandra là một hệ quản trị cơ sở dữ liệu phân tán (NoSQL)
Cơ sở dữ liệu Cassandra được phân tán trên nhiều máy hoạt động với nhau (cluster). Cassandra
sắp xếp các nút trong một cluster theo định dạng vòng và gán dữ liệu cho chúng
Keyspace là vỏ bọc ngoài cùng cho dữ liệu trong Cassandra, là một kho chứa các Column
Family. Tất cả dữ liệu của Cassandra được đặt trong Keyspace nên có thể tạo một Keyspace
duy nhất cho tất các các Column Family. Các thuộc tính cơ bản của keyspace trong Cassandra
bao gồm:
• Yếu tố nhân rộng (Replication factor): là số lượng máy trong một cluster sẽ nhận
được các bản sao của cùng một dữ liệu.
• Chiến lược đặt bản sao (Replica placement strategy): chiến lược để đặt bản sao
trong vòng (chiến lược đơn giản , chiến lược cấu trúc , chiến lược liên kết mạng).

Hình 3: Hình ảnh minh họa cấu trúc Keyspace

Dữ liệu được lưu trữ trong DB của Cassandra thuộc dạng Key value store (KVS)

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 8/32



Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Mơ hình dữ liệu Cassandra tn theo quy tắc hệ thống cột (the column family):
• Column Family: là một đối tượng của NoSQL nơi chứa các cột dữ liệu. Nó là một tập
hợp dữ liệu chứa các cặp “khóa – giá trị”. Trong đó “khóa” được ánh xạ đến một giá trị
gồm tập hợp các cột. Tương tự với RDBMS, column family là một bảng, mỗi cặp “khóa –
giá trị” là một hàng

Hình 4: Hình ảnh minh họa cấu trúc Column family

• Cột là một tập hợp dữ liệu (bộ 3) gồm tên cột, giá trị, và mốc thời gian.

Hình 5: Hình ảnh minh họa cấu trúc cột

• Siêu cột một cột đặc biệt lưu trữ bản đồ (map) của các cột. Nó giúp lưu trữ cũng như
truy xuất dữ liệu dễ dàng và nhanh chóng hơn.

Hình 6: Hình ảnh minh họa cấu trúc siêu cột

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 9/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

2.2.2

2.2.2.1

Các Kiểu dữ liệu trong Cassandra
Các kiểu dữ liệu cơ bản:

• ascii: Biểu diễn cho một chuỗi ký tự ASCII. Việc chèn bất kỳ ký tự không phải ASCII vào
một cột của kiểu dữ liệu này sẽ cho ra một lỗi.
• bigint: Đại diện cho số nguyên có dấu dài 64-bit. Được sử dụng để lưu trữ những con số
dài. Nó nên được sử dụng chỉ khi chúng ta chắc chắn cần các số dài vì nó chiếm nhiều
khơng gian bộ nhớ hơn so với int.
• blob: dùng để lưu trữ các byte tuỳ ý. Nó ở hệ thập lục phân, và bất kỳ dữ liệu nào khơng
cần xác nhận có thể được lưu trữ trong trường này.
• boolean: Lưu trữ true hoặc false.
• counter: Đại diện cho một số nguyên dài 64-bit, nhưng giá trị của cột này khơng thể thiết
lập. Chỉ có hai hoạt động trên cột này, tăng và giảm. Trong một bảng với một cột counter,
chỉ có các kiểu counter và khóa chính là được phép. Khơng có câu lệnh INSERT được phép
trong một bảng với các column counter; chỉ UPDATE có thể được sử dụng. Ví dụ:
> CREATE TABLE website_tracker (
id int PRIMARY KEY,
url text,
visitor_count counter
);
> UPDATE website_tracker
SET visitor_count = visitor_count + 1
WHERE id = 1;
> SELECT * FROM website_tracker;
id | url
| count
----+------+-----1 | a.com | 1
(1 rows)

• date: Đại diện cho một giá trị ngày mà khơng có một giá trị giờ. Cassandra mã hóa giống
như một giá trị số nguyên kể từ epoch. Ngày có thể được biểu diễn như là chuỗi trong định
dạng yyyy-mm-dd.
• decimal: Đại diện cho một biến-giá trị thập phân chính xác. Dùng tốt nhất trong việc lưu
trữ tiền tệ hoặc các giá trị tài chính.
• double: Lưu trữ một giá trị dấu chấm động dài 64-bit.
• float: Lưu trữ một giá trị dấu chấm động 32-bit.
• inet: Biểu diễn cho một chuỗi địa chỉ IP trong định dạng của IPv4 hoặc IPv6.
• int: Biểu diễn cho một số nguyên có dấu dài 32-bit. Sử dụng chủ yếu để lưu trữ các giá trị
số nguyên.
Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 10/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

• smallint: Biểu diễn cho một số nguyên 2 byte (16-bit). Có thể được ưu tiên hơn so với
kiểu int để lưu trữ các giá trị số ngun nhỏ để tiết kiệm khơng gian lưu trữ.
• text: Biểu diễn cho một chuỗi mã hoá UTF-8. Nên được sử dụng khi chúng ta muốn lưu
trữ các ký tự khơng phải mã ASCII.
• time: Biểu diễn cho một giá trị thời gian. Đại diện như một chuỗi ở dạng 01:02:03.123 và
lưu trữ số nguyên có dấu dài 64-bit đại diện cho số nano giây trôi qua kể từ nửa đêm.
• timestamp: Lưu trữ cả thành phần ngày và giờ với độ chính xác milli giây. Có thể được
biểu diễn dưới dạng văn bản ở định dạng 2016-12-01 01:02:03.123.
• tinyint: Biểu diễn cho một số nguyên 1 byte (8 bit). Có thể được ưu tiên hơn so với kiểu
int hoặc smallint để lưu trữ các giá trị số nguyên nhỏ để tiết kiệm khơng gian lưu trữ.
• timeuuid: Lưu trữ phiên bản 1 UUID.
• uuid: UUID ở định dạng chuẩn. Đây là một giá trị lớn hơn so với timeuuid.

• varchar: Tương tự như văn bản. Cả hai có thể được sử dụng để thay thế cho nhau.
• variant: Một giá trị số nguyên với độ chính xác tùy ý. Nó được khuyên nên sử dụng một
kiểu dữ liệu với độ chính xác cần thiết.
• bigint:
2.2.2.2

Các kiểu Dữ liệu Tập hợp:

• set: Kiểu này lưu trữ một bộ sưu tập các giá trị. Các giá trị được lưu trữ khơng có thứ tự,
nhưng CQLSH sẽ trả về dữ liệu đã được sắp xếp. Ví dụ: chuỗi sẽ được sắp xếp theo thứ tự
ABC. Hãy sửa đổi bảng mà chúng ta đã tạo ra ở trên:
> ALTER TABLE website_tracker ADD tagsSet set<text>;
> UPDATE website_tracker SET tagsSet = {’tag1’} WHERE id = 1;
> SELECT tagsSet FROM website_tracker WHERE id = 1;
tagsSet
---------{’tag1’}
> UPDATE website_tracker SET tagsSet = tagsSet + {’gat2’} WHERE id = 1;
> SELECT tagsSet FROM website_tracker WHERE id = 1;
tagsSet
-----------------{’gat2’, ’tag1’}

Bạn có thể sử dụng các tốn tử tập hợp thông thường như difference để loại bỏ các phần
tử. Để xóa hoặc thay thế tồn bộ tập hợp, thực hiện SET tags = <thứ gì đó>.
Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 11/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính


• list: Một danh sách cũng lưu trữ một bộ sưu tập các giá trị nhưng lưu trữ chúng theo kiểu
đã được sắp xếp, mặc định sắp theo thứ tự chèn vào. Hãy thử làm điều tương tự như chúng
ta đã làm ở trên với bộ sưu tập với một danh sách ngay bây giờ:
> ALTER TABLE website_tracker ADD tagsList list<text>;
> UPDATE website_tracker SET tagsList = [’tag1’] WHERE id = 1;
> SELECT tagsList FROM website_tracker WHERE id = 1;
tagsList
---------[’tag1’]
> UPDATE website_tracker SET tagsList = tagsList + [’gat2’] WHERE id = 1;
> SELECT tagsList FROM website_tracker WHERE id = 1;
tagsList
-----------------[’tag1’, ’gat2’]

Trong một danh sách, các giá trị có thể được thêm vào đằng trước, trừ ra (như trong bộ
sưu tập), chèn/thay thế /xóa bởi giá trị index (SET tags[1] = ’<một số giá trị>’), vv.
• map: Một bản đồ chứa một bộ sưu tập của các cặp khóa-giá trị. Đây có thể là bất cứ điều
gì ngoại trừ kiểu counter. Hãy xem mô tả nhỏ cho mỗi thẻ.
> ALTER TABLE website_tracker ADD tagsMap map<text, text>;
> UPDATE website_tracker SET tagsMap = {’tag1’: ’Tag One’} WHERE id = 1;
> SELECT tagsMap FROM website_tracker WHERE id = 1;
tagsMap
---------------------{’tag1’: ’Tag One’}
> UPDATE website_tracker SET tagsMap[’tag2’] = ’Tag Two’ WHERE id = 1;
> SELECT tagsMap FROM website_tracker WHERE id = 1;
tagsMap
-----------------{’tag1’: ’Tag One’, ’tag2’: ’Tag Two’}

2.2.2.3 Các kiểu Dữ liệu Tập hợp:
Chúng ta có thể định nghĩa các kiểu dữ liệu của riêng mình trong Cassandra. Điều này tạo ra

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 12/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

rất nhiều sự linh hoạt và dễ dàng bảo dưỡng tổng thể. Giả sử chúng ta muốn lưu trữ địa chỉ
đăng ký của trang web.
> CREATE TYPE address (
... street text,
... city text,
... state text);
> ALTER TABLE website_tracker ADD reg_address address;
Để sử dụng một kiểu dữ liệu tuỳ biến trong một bộ sưu tập lồng nhau, chúng ta cần phải xác
định nó như là một bộ sưu tập frozen.
> ALTER TABLE website_tracker ADD reg_addresses map
3

Tính năng thực hành với chỉ mục

3.1
3.1.1

MySQL
Tổng quan

• Chỉ mục (Index) là một bảng tra cứu đặc biệt mà Database Search Engine có thể sử

dụng để tăng nhanh thời gian và hiệu suất thu thập dữ liệu. Hiểu đơn giản, một chỉ mục
là một con trỏ tới dữ liệu trong một bảng. Một chỉ mục trong một Database là tương tự
như một chỉ mục trong Mục lục của cuốn sách.
• Người sử dụng khơng thể nhìn thấy các index, chúng chỉ được sử dụng để tăng tốc độ truy
vấn và sẽ được sử dụng bởi cơ sở dữ liệu tìm kiếm để xác định vị trí bản ghi rất nhanh.
• Các lệnh INSERT và UPDATE tốn nhiều thời gian hơn trên các bảng có index trong khi
các lệnh SELECT trở nên nhanh hơn trên các bảng này. Lý do là vì, trong khi chèn và cập
nhật, database cũng phải cần chèn hoặc cập nhật các giá trị index.
• Ta có thể tạo một index cho một tập hợp nhiều cột trong table. Giá trị của một index key
là phép concat các giá trị từ các record của các cột đó. Chẳng hạn nếu ta tạo index cho
chỉ một cột col_1 thì index key sẽ chỉ có giá trị tương ứng với giá trị record của cột đó.
Cịn nếu tạo index với 3 cột gộp col_1, col_2, col_3 thì giá trị của index key sẽ là phép
cộng concat của giá trị record 3 cột đó lại với nhau.
3.1.2

Cấu trúc chỉ mục trong MySQL

• Các loại index trong MySQL: Clustered - PRIMARY, UNIQUE (NOT NULL). Nếu
trong table khơng có cả 2 loại trên thì MySQL sẽ tự tạo một clustered index ẩn tên là
GEN_CLUST_INDEX trên một field ẩn tự động chứa id của các hàng (auto-increment,
6-byte). Loại thứ 2: Secondary bao gồm các loại index cịn lại: INDEX.
• Loại cấu trúc của chỉ mục được hiện thực trong MySQL là BTREE, Các bản ghi chỉ mục
được lưu trữ trong các trang lá của cấu trúc dữ liệu cây BTREE này. Kích thước mặc định
của trang chỉ mục là 16KB.
• MySQL thực hiện tải hàng loạt thay vì chèn từng bản ghi chỉ mục khi tạo hoặc xây dựng
lại chỉ mục. Phương pháp tạo chỉ mục này còn được gọi là Sorted index build.

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 13/32



Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

• Có ba giai đoạn để xây dựng chỉ mục theo phương pháp trên. Trong giai đoạn đầu, chỉ
mục cụm được quét, và các index entry được tạo và thêm vào bộ đệm sắp xếp. Khi bộ đệm
sắp xếp đầy, các entry sẽ được sắp xếp và ghi vào tệp trung gian tạm thời. Quá trình này
còn được gọi là ’run’. Trong giai đoạn thứ hai, với một hoặc nhiều lần run được ghi vào
tệp trung gian tạm thời, merge sort được thực hiện trên tất cả entry trong tệp. Trong giai
đoạn thứ ba và cũng là giai đoạn cuối cùng, các entry đã sắp xếp trong tệp được chèn vào
B-tree.
3.1.3

Các câu lệnh DDL liên quan đến index trong MySQL

• Ta có thể tạo index theo 2 cách: Chỉ định index ngay khi tạo table hoặc tạo index cho 1
hay nhiều cột sau khi đã tạo table. Ví dụ tạo bảng đồng thời gán index:
CREATE TABLE t(
c1 INT PRIMARY KEY,
c2 INT NOT NULL,
c3 INT NOT NULL,
c4 VARCHAR(10),
INDEX (c2,c3)
);
• Thêm index cho bảng, với index mang tính duy nhất và không thể null
ALTER TABLE tbl_name ADD PRIMARY KEY (column)
• Thêm index cho bảng, với index mang tính duy nhất nhưng có thể null
ALTER TABLE tbl_name ADD UNIQUE index_name (column_1, column_2,..)
• Thêm index cho bảng, có thể trùng lặp

ALTER TABLE tbl_name ADD INDEX index_name (column_1, column_2,..)
• Một chỉ mục có thể bị xóa bởi sử dụng lệnh DROP INDEX trong SQL nói chung
DROP INDEX index_name ON table_name
• Ngồi ra, index có thể được tạo mà chỉ dùng một phần của giá trị record trong column
(Thay vì tồn bộ giá trị của record). Thông thường để sử dụng điều trên thì kiểu dữ thường
là là CHAR, VARCHAR, tức kiểu chuỗi kí tự. Ví dụ tạo chỉ mục với chỉ 10 chữ cái đầu
tiên trong field name:
CREATE INDEX part_of_name ON customer (name(10));
• Nếu các giá trị trường field trong cột customer thường khác nhau trong 10 ký tự đầu tiên,
thì việc tra cứu được thực hiện bằng chỉ mục này sẽ không chậm hơn nhiều so với việc sử
dụng một chỉ mục được tạo từ toàn bộ cột tên. Ngoài ra, việc sử dụng prefix cột cho các
chỉ mục có thể làm cho tệp chỉ mục nhỏ hơn nhiều, điều này có thể tiết kiệm nhiều dung
lượng đĩa.

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 14/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

3.1.4

Ví dụ minh họa:

• Giả sử ta có một table chứa thơng tin về nhân viên với các field id, username, email, phone
và gender với khoảng 4 triệu bản ghi.
• Ta sẽ thực hiện một câu lệnh SQL để query dữ liệu như sau:
SELECT * FROM‘users‘ WHERE ‘email‘ = ’’

• Nếu khơng sử dụng index thì cầu lệnh trên mất hơn 11s để trả về kết quả:

• Để xem MySQl xử lý câu lệnh đó chi tiết như thế nào, chúng ta sẽ thêm từ khóa EXPLAIN
phía trước câu truy vấn.
EXPLAIN SELECT * FROM‘users‘ WHERE ‘email‘ = ’’

• Ở đây, ta chú ý đến thơng tin quan trọng ở cột rows 4015335, tức số hàng mà MySQL
phải duyệt qua để thực hiện câu query trên.
• Bây giờ ta sẽ thêm index vào chính field email mà chúng ta sử dụng trong mệnh đề WHERE
ở trên. Do email của mỗi người là duy nhất nên ta có thể đánh chỉ mục UNIQUE như sau:
ALTER TABLE ‘users‘ ADD UNIQUE idx_email (‘email‘)
• Ta thực hiện xem lại chi tiết việc MySQL xử lí câu lệnh truy vấn cũ với index mới được
thêm vào và thu được kết quả:

• Kết quả cho thấy MySQL chỉ phải duyệt qua 1 hàng giúp tiết kiệm thời gian một cách
đáng kể.

3.2

Cassandra

• Vì Cassandra là một cơ sở dữ liệu phân tán và phi tập trung với dữ liệu được tổ chức theo
khóa phân vùng (partition key), Trong trường hợp chung, để thực thi các câu truy vấn
mệnh đề WHERE, tối thiểu chúng ta phải cung cấp đầy đủ khóa phân vùng . Nếu như ta
thực thi câu truy vấn như tìm kiếm hoặc lọc trên các cột khơng chứa khóa phân vùng thì
câu truy vấn đó sẽ khơng được thực thi và sẽ xuất hiện lỗi.

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 15/32



Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

• Vì vậy, để có thể truy cập dữ liệu thông qua việc thực thi các câu truy vấn trên các cột
khơng phải là khóa phân vùng một cách nhanh chóng và hiệu quả thì ta phải tạo chỉ mục
trên các cột đó
• Ví dụ ta tạo 1 bảng tên Task với keyspace1 làm keyspace và có 2 khóa là
Task_id và Task_name:
CREATE TABLE keyspace1.Task
(
Task_id text,
Task_name text,
Task_time timestamp,
T_location text,
PRIMARY KEY (Task_id, Task_name)
);
• Mặc định rằng cột đầu tiên ln ln là khóa phân vùng, các cột sau là khóa cụm, do đó
Task_id là khóa phân vùng (partition key) cịn Task_name là khóa cụm (clustering key),
cho nên các câu truy vấn liên quan tới 2 cột này đều được thực thi và khơng có lỗi:
SELECT *
FROM Task
WHERE Task_id = ‘T210’ AND Task_nam = ‘set alarm’;
hoặc
SELECT *
FROM Task
WHERE Task_id = ‘T210’;
• Tuy nhiên, nếu các câu truy vấn khơng bao gồm 1 trong hai cột này thì sẽ khơng được
thực thi và sẽ báo lỗi. Ví dụ như chúng ta chỉ truy vấn trên cột Task_time là 1 cột khơng

thuộc khóa phân vùng
SELECT *
FROM Task
WHERE Task_time= ‘2019-09-30 15:02:56’;
• Sẽ báo lỗi:
Error: Bad Request: no indexed columns present in by columns clause
with Equal operator.
• Để có thể thực thi câu truy vấn trên cột Task_time, chúng ta phải tạo bảng có khóa phân
vùng tổng hợp (composite partition key), sau đó tạo chỉ mục trên cột đó trước khi ta thực
thi câu lệnh truy vấn, khi đó, câu truy vấn sẽ được thực thi và không báo lỗi:
CREATE TABLE keyspace1.Task (
Task_id text,
Task_name text,
Task_time timestamp,
T_location text,
PRIMARY KEY ((Task_id, Task_name), Task_time)
);
CREATE INDEX ON keyspace1.Task(Task_time);
Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 16/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

• Do chúng ta đã tạo chỉ mục trên cột Task_time sau khi tạo khóa phân vùng tổng hợp nên
chúng ta có thể sử dụng mệnh đề WHERE trên duy nhất cột Task_time. Nếu chúng ta
chỉ tạo khóa phân vùng tổng hợp mà khơng tạo chỉ mục trên cột Task_time thì khi sử
dụng mệnh đề WHERE chúng ta phải cung cấp thông tin của cột Task_id, Task_name và

Task_time theo thứ tự
• Lưu ý rằng:
– Khi tạo chỉ mục khơng có nghĩa là nó sẽ tăng tốc độ truy vấn trong Cassandra
– Một trong những lợi thế quan trọng của việc tạo chỉ mục đó là ta có thể truy cập dữ
liệu khi sử dụng mệnh đề WHERE lên các cột mà không cần phải cung cấp thơng tin
của các cột khóa phân vùng hay khóa cụm.

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 17/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

4

Tính năng thực hành phục hồi dữ liệu

4.1
4.1.1

MySQL
Tóm tắt lý thuyết

Khơi phục dữ liệu (restore database) là việc đưa dữ liệu quay trở về trạng thái tại một thời điểm
trước đó. Chúng ta có thể khơi phục lại cơ sở dữ liệu nếu trước đó ta đã từng sao lưu cơ sở dữ
liệu này. Để khôi phục lại cơ sở dữ liệu, ta dùng dùng câu lệnh với cú pháp như sau:
mysql -u [username] -p [database] < [filename].sql
Trong đó:

• username: tên user có quyền khơi phục lại database
• database: tên database sẽ được khơi phục
• filename: tên file chứa dữ liệu được sao chép ra trước đây
4.1.2

Thực hành phục hồi dữ liệu

Ví dụ sau sẽ khơi phục cơ sở dữ liệu "quanlydean" sử dụng file "quanlydean_backup.sql" được
tạo ra từ q trình backup trước đó:
Bước 1: Mở phpMyAdmin và tạo một database có tên "quanlydean"

Bước 2: Mở CMD tại thư mục "bin" trong thư mục cài đặt MySQL và chạy lệnh như trong
ảnh. Sau đó nhập password và nhấn phím enter. Và đây là kết quả sau khi phục hồi dữ liệu của

database "quanlydean"
Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 18/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

4.2

Cassandra

Các bản sao lưu có ý nghĩa khi chúng có thể phục hồi trong các tình huống khi keyspace bị xóa
hoặc cụm mới được khởi chạy từ dữ liệu sao lưu hoặc một nút bị thay thế. Có thể khơi phục
dữ liệu đã sao lưu từ snapshot và nếu đang sử dụng incremental backups thì cần tất cả các tệp

incremental backup được tạo sau snapshot. Chủ yếu có hai cách để khơi phục dữ liệu từ bản sao
lưu. Một là sử dụng nodetool refresh và một khác sử dụng sstableloader.
Khôi phục bằng cách sử dụng nodetool refresh:
Lệnh nodetool referesh tải các SSTables mới được đặt vào hệ thống mà không cần khởi động lại.
Phương pháp này được sử dụng khi nút mới thay thế nút không thể khơi phục được. Có thể khơi
phục dữ liệu từ snapshot nếu schema tồn tại. Giả sử đã tạo một nút mới, hãy làm theo các bước
dưới đây:
• Tạo lược đồ nếu chưa được tạo.
• Cắt bớt bảng, nếu cần.
• Định vị thư mục ảnh chụp nhanh (/ var / lib / keyspacename / tablename UUID /
snapshots / snapshotname) và sao chép thư mục
• SSTable ảnh chụp nhanh vào thư mục / var / lib / keyspace / tablename-UUID.
• Chạy nodetool để refresh.
Khôi phục bằng sstableloader:
Sstableloader tải một tập hợp các tệp SSTable trong một cụm Cassandra. Trình sstableloader
cung cấp các tùy chọn sau.
• Tải dữ liệu bên ngồi
• Tải các SSTables hiện có
• Khơi phục snapshot
Sstableloader khơng chỉ sao chép các SSTables đến mọi nút, mà còn chuyển phần dữ liệu có
liên quan đến từng nút và cũng duy trì hệ số nhân bản. Ở đây sstableloader được sử dụng để
khôi phục snapshot. Làm theo các bước dưới đây để khôi phục bằng sstableloader:

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 19/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính


• Tạo lược đồ nếu khơng tồn tại.
• Cắt bớt bảng nếu cần thiết.
• Đưa dữ liệu sao lưu đến một nút từ AWS S3 hoặc Google Cloud hoặc MS Azure. Ví dụ:
Tải xuống dữ liệu sao lưu trong / home / data
• Chạy lệnh dưới đây sstableloader -d ip / home / data.

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 20/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

5

Tính năng thực hành sao lưu dữ liệu

5.1

MySQL

5.1.1

Tóm tắt lý thuyết

Việc sao lưu (hay cịn gọi là export hoặc backup) trong MySQL được sử dụng nhờ câu lênh
mysqldump, câu lệnh này sẽ chuyển toàn bộ dữ liệu có trong database ra một file. Cú pháp câu
lệnh này như sau (thực hiện trên CMD tại thư mục "bin" trong thư mục cài đặt MySQL):

mysqldump -u [username] -p [database] > [filename].sql
Trong đó:
• username: là tên người dùng có quyền sao lưu cơ sở dữ liệu
• database: là tên cơ sở dữ liệu cần sao lưu
• filename: là tên file dùng để lưu dữ liệu được sao lưu, có thể chỉ rõ đường dẫn cụ thể ở ổ
đĩa khác
Chúng ta cũng có thể đưa password vào câu lệnh trên, tuy nhiên như vậy sẽ có thể khiến những
người dùng khác có quyền truy cập vào máy chủ khi họ biết được mật khẩu của user này.
Ví dụ câu lệnh sau sẽ sao lưu database có tên là testdb ra file testdb_backup.sql được lưu trên
ổ đĩa C:
mysqldump -u root -p testdb > "C:\Users\TRUC BK\Desktop\backup\testdb_backup.sql"
5.1.2
5.1.2.a

Thực hành sao lưu dữ liệu trên Windown
Ví dụ 1: sao lưu database "quanlydean" bằng dịng lệnh

Chúng ta đang có một database tên "quanlydean" và thực hiện sao lưu như sau:
Bước 1: Mở CMD tại thư mục "bin" trong thư mục cài đặt MySQL

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 21/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Bước 2: Gõ lệnh sao lưu và nhập password
Chúng ta thực hiện gõ lệnh sao lưu, sau đó nhấn phím enter và tiến hành nhập password của

user, nếu rỗng thì để trống và nhấn enter:

Sau khi kết thúc lệnh trên sẽ tạo ra một file sao lưu có tên "quanlydean_backup.sql" tại thư
mục "backup" trên Desktop.

5.1.2.b

Ví dụ 2: sao lưu database "quanlydean" bằng file batch

File batch giúp chúng ta tạo ra một chương trình nhỏ để tự động thực hiện việc sao lưu mỗi khi
chúng ta click vào mà không cần phải gõ đi gõ lại các lệnh trên CMD. Các bước thực hiện như
sau:
Bước 1: Thực hiện tạo file batch với nội dung trong ảnh
Lưu ý trong nội dung câu lệnh sao lưu, chúng ta thêm vào password để khi click vào file, ta
không cần nhập mật khẩu nữa. Sau khi nhập nội dung, ta lưu file tại thư mục "backup" như
trong ví dụ 1.

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 22/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

Bước 2: Thực hiện sao lưu database Mỗi khi cần sao lưu, chúng ta chỉ việc vào thư mục
"backup" và click vào file quanlydean_backup.bat là việc sao lưu sẽ tự động thực hiện. Kết quả
tạo ra một file sao lưu như ảnh bên dưới.

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021


Trang 23/32


Trường Đại Học Bách Khoa Tp.Hồ Chí Minh
Khoa Khoa Học và Kỹ Thuật Máy Tính

5.1.2.c

Ví dụ 3: sao lưu database "quanlydean" hoàn toàn tự động

Chúng ta sẽ thực hiện sao lưu database "quanlydean" hoàn toàn tự động bằng ứng dụng "Task
Scheduler" được hỗ trợ trên Window, các bước thực hiện như sau:
Bước 1: Mở ứng dụng "Task Scheduler"

Giao diện của ứng dụng như bên dưới:

Bước 2: Tạo một Task mới
Chúng ta tiến hành tạo một Task mới bằng cách nhấn vào nút "Create Task..." (tại vị trí số 1
trong ảnh), một cửa sổ mới sẽ hiện ra. Tại tab "General", ta điền tên của task (tại vị trí số 2
trong ảnh).
Sau đó, ta chuyển qua tab "Triggers" và bấm vào nút "New", một cửa sổ mới sẽ hiện ra để
chúng ta cài đặt các thông số thời gian thực hiện việc sao lưu dữ liệu.

Hệ quản trị cơ sở dữ liệu - Niên khóa 2020-2021

Trang 24/32



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×