Kiến tha lâu đầy tổ

Các kiến thức được tích lũy theo thời gian. Hãy kiên trì và chăm chỉ.

Tổng hợp kiến thức kỹ năng công nghệ học được

Các nội dung đang được tích lũy và bổ sung thêm theo thời gian

Tin học văn phòng

Tổng hợp các kỹ năng tin học văn phòng hỗ trợ trong công việc như Word - Excel - Power Point

Kiến thức về cơ sở dữ liệu

Thao tác với cơ sở dữ liệu, ngôn ngữ SQL trên SQL Server và MySQL

Kiến thức cơ bản về lập trình Web

Một số khái niệm cơ bản về lập trình web

Thứ Năm, 21 tháng 11, 2013

21 câu lệnh Linux phải nhớ

Đây là những câu lệnh căn bản bất cứ ai muốn tìm hiểu về Linux cần phải nhớ.
  1. clear: làm sạch cửa sổ dòng lệnh
  2. ls tenthumuc: Liệt kê nội dung bên trong một thư mục
  3. cat tentaptin: Hiển thị nội dung của một tập tin lên cửa sổ dòng lệnh
  4. rm tentaptin: Xóa một tập tin
  5. cp taptinnguon taptindich: Sao chép một tập tin
  6. passwd: Đổi mật khẩu
  7. less tentaptin hoặc more tentaptin: Hiển thị nội dung một tập tin trong cửa sổ dòng lệnh một trang mỗi lần
  8. grep chuoi tentaptin: Tìm kiếm chuỗi trong tập tin
  9. head tentaptin: Hiển thị 10 dòng đầu tiên của tập tin
  10. tail tentaptin: Hiển thị 10 dòng cuối cùng của tập tin
  11. mv tentaptincu tentaptinmoi: Di chuyển hoặc đổi tên tập tin
  12. file tentaptin: Hiển thị thông tin về nội dung của tập tin
  13. echo chuoi: Sao chép chuỗi tới màn hình dòng lệnh
  14. date: Hiển thị ngày và giờ hiện tại
  15. gzip tentaptin: Nén một tập tin
  16. gunzip tentaptin: Giải nén một tập tin
  17. chmod quyen tentaptin: Thay đổi quyền truy cập tập tin
  18. mkdir tenthumuc: Tạo một thư mục
  19. rmdir tenthumuc: Xóa một thư mục rỗng
  20. ln existingfile new-link: Tạo một đường dẫn tới một tập tin (liên kết cứng)
  21. top: Hiển thị danh sách các tiến trình đang chạy

Thứ Tư, 20 tháng 11, 2013

Các câu lệnh MySQL cần phải biết

Khi chạy các lệnh này, bạn cần login vào MySQL với tài khoản root (MySQL root chứ không phải tài khoản root quản lý VPS) hoặc tài khoản có full quyền. Tất cả các thao tác mình thực hiện trên VPS CentOS
Đăng nhập MySQL bạn dùng lệnh: mysql -u root -p

1. Thư mục chứa database

Trên CentOS, toàn bộ file raw database được lưu trong thư mục /var/lib/mysql

2. Quản lý tài khoản và phân quyền

Hiển thị toàn bộ users:
mysql> SELECT * FROM mysql.user;

Xóa null user:
mysql> DELETE FROM mysql.user WHERE user = ' ';

Xóa tất cả user mà không phải root:
mysql> DELETE FROM mysql.user WHERE NOT (host="localhost" AND user="root");

Đổi tên tài khoản root (giúp bảo mật):
mysql> UPDATE mysql.user SET user="mydbadmin" WHERE user="root";

Gán full quyền cho một user mới:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'mypass' WITH GRANT OPTION;

Phân quyền chi tiết cho một user mới:
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON mydatabase.* TO 'username'@'localhost' IDENTIFIED BY 'mypass';

Gán full quyền cho một user mới trên một database nhất định:
mysql> GRANT ALL PRIVILEGES ON mydatabase.* TO 'username'@'localhost' IDENTIFIED BY 'mypass' WITH GRANT OPTION;

Thay đổi mật khẩu user:
mysql> UPDATE mysql.user SET password=PASSWORD("newpass") WHERE User='username';

Xóa user:
mysql> DELETE FROM mysql.user WHERE user="username";

3. Các thao tác database

Hiển thị toàn bộ databases:
mysql> SHOW DATABASES;
Tạo database:
mysql> CREATE DATABASE mydatabase;

Sử dụng một database:
mysql> USE mydatabase;

Xóa một database:
mysql> DROP DATABASE mydatabase;

Tối ưu database:
All Databases:
$ sudo mysqlcheck -o --all-databases -u root -p
Single Database:
$ sudo mysqlcheck -o db_schema_name -u root -p

4. Các thao tác table

Tất cả các thao tác bên dưới bạn phải lựa chọn trước database bằng cách dùng lệnh: mysql> USE mydatabase;
Hiển thị toàn bộ table:
mysql> SHOW TABLES;

Hiển thị dữ liệu của table:
mysql> SELECT * FROM tablename;

Đổi tên table :
mysql> RENAME TABLE first TO second;
hoặc
mysql> ALTER TABLE mytable rename as mynewtable;

Xóa table:
mysql> DROP TABLE mytable;

5. Các thao tác cột và hàng

Tất cả các thao tác bên dưới bạn phải lựa chọn trước database bằng cách dùng lệnh: mysql> USE mydatabase;
Hiển thị các column trong table:
mysql> DESC mytable;
hoặc
mysql> SHOW COLUMNS FROM mytable;

Đổi tên column:
mysql> UPDATE mytable SET mycolumn="newinfo" WHERE mycolumn="oldinfo";

Select dữ liệu:
mysql> SELECT * FROM mytable WHERE mycolumn='mydata' ORDER BY mycolumn2;

Insert dữ liệu vào table:
mysql> INSERT INTO mytable VALUES('column1data','column2data','column3data','column4data','column5data','column6data','column7data','column8data','column9data');

Xóa dữ liệu trong table:
mysql> DELETE FROM mytable WHERE mycolumn="mydata";

Cập nhật dữ liệu trong table:
mysql> UPDATE mytable SET column1="mydata" WHERE column2="mydata";

6. Các thao tác sao lưu và phục hồi

Sao lưu toàn bộ database bằng lệnh (chú ý không có khoảng trắng giữa -p và mật khẩu):
mysqldump -u root -pmypass --all-databases > alldatabases.sql

Sao lưu một database bất kỳ:
mysqldump -u username -pmypass databasename > database.sql

Khôi phục toàn bộ database bằng lệnh:
mysql -u username -pmypass < alldatabases.sql (no space in between -p and mypass)

Khôi phục một database bất kỳ:
mysql -u username -pmypass databasename < database.sql

Chỉ sao lưu cấu trúc database:
mysqldump --no-data --databases databasename > structurebackup.sql

Chỉ sao lưu cấu trúc nhiều database:
mysqldump --no-data --databases databasename1 databasename2 databasename3 > structurebackup.sql

Sao lưu một số table nhất định:
mysqldump --add-drop-table -u username -pmypass databasename table_1 table_2 > databasebackup.sql

Chủ Nhật, 17 tháng 11, 2013

Reset MySQL root password

Trong trường hợp bạn quên mất mật khẩu root MySQL, hãy thực hiện theo các bước sau để reset lại mật khẩu này.
Stop MySQL service
sudo /etc/init.d/mysql stop
Start mysqld
sudo mysqld --skip-grant-tables &
Đăng nhập mysql dưới quyền root:
mysql -u root mysql
Thay thế your_new_password bằng mật khẩu mới:
UPDATE user SET Password=PASSWORD('your_new_password') WHERE User='root'; FLUSH PRIVILEGES; exit;
Các thao tác trên CentOS cũng tương tự.

Thứ Bảy, 16 tháng 11, 2013

Hướng dẫn cài đặt và bảo mật phpMyAdmin trên Ubuntu 12.04

phpMyAdmin là một phần mềm mã nguồn mở phổ biến trên nền web để quản lý MySQL.
Trước khi tiến hành cài đặt phpMyAdmin bạn cần cài đặt trước LAMP hoặc LEMP server trên Ubuntu.
Chúng ta có 2 cách để cài đặt phpMyAdmin là cài đặt thông qua package và chạy phpMyAdmin như một php script thông thường. Cách thứ 1 thì đơn giản hơn, trong khi cách thứ 2 thì tiết kiệm tài nguyên và bảo mật hơn rất nhiều.

1. Cài đặt phpMyAdmin package

Chạy lệnh sau
sudo apt-get install phpmyadmin
Trong quá trình cài đặt bạn cần lưu ý:
  1. Chọn Apache2 server
  2. Chọn Yes khi được hỏi Configure the database for phpmyadmin with dbconfig-common
  3. Nhập MySQL password khi được hỏi
  4. Nhập password để truy cập phpMyAdmin
Sau khi cài xong, thêm phpmyadmin vào cấu hình cài đặt Apache
sudo nano /etc/apache2/apache2.conf
Thêm dòng sau vào cuối
Include /etc/phpmyadmin/apache.conf
Khởi động lại apache
sudo service apache2 restart
Giờ bạn có thể truy cập vào phpMyAdmin thông qua link http://yourip/phpmyadmin rồi đó.

2. Cài đặt phpMyAdmin script

Cách này mình thường dùng vì 2 lí do:
  1. Chỉ khi nào chạy mới dùng đến bộ nhớ -> tiết kiệm tài nguyên server
  2. Có thể tùy biến đường dẫn phpmyadmin -> bảo mật hơn
Đầu tiên bạn cần chọn phiên bản muốn cài trong trang chủ phpMyAdmin
Copy đường dẫn trực tiếp với file extension là .tar.gz, ví dụ bản 4.1.4 là http://jaist.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/4.1.4/phpMyAdmin-4.1.4-all-languages.tar.gz
Vào thư mục www chứa nội dung website, chạy lệnh sau
wget http://jaist.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/4.1.4/phpMyAdmin-4.1.4-all-languages.tar.gz
Giải nén
tar -xzvf phpMyAdmin-4.1.4-all-languages.tar.gz
Xong bạn sẽ có folder phpMyAdmin-4.1.4-all-languages, để sử dụng bạn truy cập vào link http://ip/phpMyAdmin-4.1.4-all-languages. Tất nhiên bạn có thể đổi tên thành bất cứ cái nào bạn muốn để sử dụng và bảo mật hơn.

Backup và Restore MySQL Database bằng dòng lệnh

 hướng dẫn cách backup toàn bộ database và restore bằng dòng lệnh trong Linux.

1. Backup

Sử dụng lệnh sau
mysqldump --opt -u [uname] -p [dbname] > [backupfile.sql]
Trong đó:
[uname] : user của database
[dbname] : Tên của database
[backupfile.sql] : Tên file backup muốn lưu
[--opt] : Các tùy chọn mysqldump
Ví dụ:
mysqldump -u root -p datcucgach > db_datcucgach.sql
Backup database đồng thời nén gzip
mysqldump -u [uname] -p [dbname] | gzip -9 > [backupfile.sql.gz]

2. Restore

Sử dụng lệnh sau
mysql -u [uname] -p [dbname] < [backupfile.sql]
Trong đó:
[uname] : user của database
[dbname] : Tên của database
[backupfile.sql] : Tên file backup đã lưu (file backup muốn phục hồi)
Ví dụ:
mysql -u root -p datcucgach < db_datcucgach.sql
Phục hồi database được nén
gunzip < [backupfile.sql.gz] | mysql -u [uname] -p [dbname]
Nếu bạn muốn phục hồi một database đã tạo ra trước đó bạn sử dụng lệnh mysqlimport. Cấu trúc lệnh như sau:
mysqlimport -u [uname] -p [dbname] [backupfile.sql]

Thứ Sáu, 15 tháng 11, 2013

Hướng dẫn cài đặt LEMP (Linux, Nginx, MySQL, PHP) trên Ubuntu 12.04

iới thiệu nginx
Nginx là một web server nguồn mở hoạt động nhanh và sử dụng ít tài nguyên hệ thống hơn Apache. Khi ở trạng thái tải nhẹ thì sự khác nhau giữa Apache và Nginx là không đáng kể. Tuy vậy, ở trạng thái tải nặng, Nginx có thể mở rộng sao cho phù hợp và hoạt động nhanh mà không cần chiếm quá nhiều tài nguyên bộ nhớ như Apache.
Các blog của mình trước đây chạy trên nền tảng LAMP (Linux, Apache, MySQL, PHP) nhưng từ khi chuyển sang LEMP thì thấy tài nguyên sử dụng giảm hơn trước khá nhiều.
lemp

Các bước cài đặt LEMP trên Ubuntu

Đầu tiên bạn cần chuẩn bị một server Ubuntu mới tinh chưa cài gì cả, ở đây mình dùng Ubuntu 12.04 64 bit. Kiểm tra lại xem hostname và file host đã chính xác chưa.
Các thao tác thực hiện bằng dòng lệnh, sử dụng tool ZOC Terminal và nano
1. Update Apt-Get
sudo apt-get update
2. Cài đặt MySQL
sudo apt-get install mysql-server php5-mysql
Trong quá trình cài đặt bạn sẽ phải cài đặt root mysql password
Sau khi cài đặt MySQL, kích hoạt bằng lệnh:
sudo mysql_install_db
Hoàn tất cài đặt
sudo /usr/bin/mysql_secure_installation
Điền vào root password
Enter current password for root (enter for none): 
OK, successfully used password, moving on...
Sau đó là các thao tác như cài đặt lại password, xóa anonymous user… Cái này tùy bạn setup
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y                                            
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...
Đường dẫn file cài đặt MySQL: /etc/my.cnf
3. Cài đặt nginx
sudo apt-get install nginx
Chạy nginx
sudo service nginx start
Lúc này bạn có thể truy cập thẳng vào IP/domain để xem nginx đã hoạt động hay chưa
4. Cài đặt PHP
sudo apt-get install php5-fpm
5. Tùy chỉnh PHP
Tùy chỉnh lại php.ini
sudo nano /etc/php5/fpm/php.ini
Tìm dòng cgi.fix_pathinfo=1 (nhấn Ctrl+W trong nano), bỏ dấu ; ở đầu và thay 1 = 0
cgi.fix_pathinfo=0
Lưu lại (Ctrl+O, Enter) và thoát (Ctrl+X)
Tùy chỉnh php5-fpm
sudo nano /etc/php5/fpm/pool.d/www.conf
Tìm dòng listen = 127.0.0.1:9000 và thay 127.0.0.1:9000 thành /var/run/php5-fpm.sock
listen = /var/run/php5-fpm.sock
Lưu và thoát.
Khởi động lại php-fpm
sudo service php5-fpm restart
6. Tùy chỉnh nginx
Mở file virtual host mặc định
sudo nano /etc/nginx/sites-available/default
Tìm và thay đổi cài đặt như bên dưới. Chú ý các phiên bản Ubuntu mới hơn sử dụng ‘htm’ thay vì ‘www’ nên bạn cần chỉnh lại cài đặt tương ứng.
[...]
server {
        listen   80;

        root /usr/share/nginx/www;
        index index.php index.html index.htm;

        server_name example.com;

        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        error_page 404 /404.html;

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
              root /usr/share/nginx/www;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

        }

}
[...]
Một số thay đổi:
  • Thêm index.php
  • Thay đổi server_name thành tên miền
  • Chỉnh sửa đường dẫn cho phù hợp với permalink của WP
  • Chỉnh lại nội dung trong phần cài đặt “location ~ \.php$ {“
Lưu và thoát.
7. Tạo php info file
Tạo file php.info
sudo nano /usr/share/nginx/www/info.php
Thêm nội dung
<?php
phpinfo();
?>
Lưu và thoát
Khời động lại nginx
sudo service nginx restart
Đã xong, giờ bạn có thể xem các cài đặt của nginx và php-fpm bằng cách truy cập: http://youripaddress/info.php
8. Cài đặt phpMyAdmin
sudo apt-get install phpmyadmin
Khi phpMyAdmin hỏi bạn chọn server (apache or lighttpd) thì chọn cái nào cũng được.
Tạo symbolic link
sudo ln -s /usr/share/phpmyadmin/ /usr/share/nginx/www
Sửa lỗi The mcrypt extension is missing khi chạy phpMyAdmin
Mở file php.ini
sudo nano /etc/php5/fpm/php.ini
Tìm đoạn Dynamic Extensions và thêm dòng sau vào phía cuối
extension=mcrypt.so
Restart php5-fpm
sudo service php5-fpm restart
Khởi động lại nginx
sudo service nginx restart
Giờ bạn đã có thể truy cập vào phpMyAdmin thông qua đường dẫn http://youripaddress/phpmyadmin

Tạo mysql database và user bằng lệnh terminal

Bài viết này sẽ hướng dẫn tạo database và user mysql bằng lệnh terminal.
Đăng nhập MySQL
mysql -u root -p
Tạo database
create database dbname;
Tạo và thiết lập quyền cho user
create user 'username'@'localhost' identified by 'password';
Để thay đổi password user
set password for 'username'@'localhost' = password('password');
Thiết lập tất cả quyền cho user
grant all on dbname.* to username@localhost;
Nếu bạn muốn giới hạn quyền cho user thì dùng dòng lệnh sau
grant SELECT on dbname.* to username@localhost; // SELECT là quyền
Danh sách các quyền bạn có thể thiết lập cho user
ALL
ALTER
CREATE VIEW
CREATE
DELETE
DROP
GRANT OPTION
INDEX
INSERT
SELECT
SHOW VIEW
TRIGGER
UPDATE
Reload all the privileges
FLUSH PRIVILEGES;
Thoát
exit

Giới Thiệu Một Số Storage Engine Của Mysql

MySQL là một trong những hệ thống cơ sở dữ liệu quan hệ phổ biến số một thế giới, được sử dụng bởi hầu hết các website lớn. Do vậy, việc nắm vững MySQL là yêu cầu không thể thiếu đối với một webmaster.
Kiến trúc logic của MySQL nhìn tổng quan có thể được mô tả như hình dưới đây
Ta có thể thấy MySQL có các component cơ bản như ở dưới đây
  • Connection/thread handling
  • Query cache
  • Parser
  • Optimizer
  • Storage engine
Việc nắm rõ từng chức năng và nhiệm vụ của từng thành phần là điều không thể thiếu trong việc sử dụng MySQL một cách hiệu quả. Bài viết sẽ tập trung giới thiệu về thành phần dưới cùng trong mô hình trên: Storage engine (Máy lưu trữ)

Storage Engine (Máy lưu trữ)

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. Việc quản lý định nghĩa bảng là nhiệm vụ của MySQL server, dù rằng mỗi storage engine sẽ lưu trữ và đánh chỉ mục (index) dữ liệu khác nhau.
Ví dụ: mình chỉ định –datadir là /usr/local/mysql/data và định nghĩa bảng users trong database tên là test như sau
create table users (
    id int not null auto_increment, 
    name varchar(30), 
    password varchar(20), 
    primary key(id)
);
thì trong thư mục /usr/local/mysql/data sẽ có thư mục con là test, và dưới test sẽ có các file
-rw-rw----  1 _mysql  wheel   8624  5  7 17:35 users.frm
-rw-rw----  1 _mysql  wheel  98304  5  7 17:35 users.ibd
Để xem loại storage engine của bảng hiện tại, bạn có thể dùng câu lệnh SHOW DATABASE STATUS
mysql> show table status like 'users' \G
*************************** 1. row ***************************
           Name: users
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 2
 Avg_row_length: 8192
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: 3
    Create_time: 2013-05-07 17:35:09
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.01 sec)
Cụ thể trong trường hợp này: storage engine : innodb loại row : compact Số lượng row dữ liệu : 2 giá trị auto increment tiếp theo: 3 …

Tổng quan các engine

1. MyISAM engine

Đặc điểm
  • full-text indexing
  • compression.
  • spatial functions (GIS)
  • Không hỗ trợ transactions
  • Không hỗ trợ row-level lock.
Lưu trữ
MyISAM lưu mỗi bảng dữ liệu trên 2 file: .MYD cho dữ liệu và .MYI cho chỉ mục. Row có 2 loại: dynamic và static (tuỳ thuộc bạn có dữ liệu thay đổi độ dài hay không). Số lượng row tối đa có thể lưu trữ bị giới hạn bởi hệ điều hành, dung lượng đĩa cứng. MyISAM mặc định sử dụng con trỏ độ dài 6 bytes để trỏ tới bản ghi dữ liệu, do vậy giới hạn kích thước dữ liệu xuống 256TB.
Tính năng:
  • MyISAM lock toàn bộ table. User (MySQL server) chiếm shared-lock khi đọc và chiếm exclusive-lock khi ghi. Tuy vậy, việc đọc ghi có thể diễn ra đồng thời!
  • MyISAM có khả năng tự sửa chữa và phục hồi dữ liệu sau khi hệ thống crashed.
  • Dùng command check table / repair table để kiểm tra lỗi và phục hồi sau khi bị lỗi.
  • MyISAM có thể đánh chỉ mục full-text, hỗ trợ tìm kiếm full-text.
  • MyISAM không ghi dữ liệu ngay vào ổ đĩa cứng, mà ghi vào 1 buffer trên memory (và chỉ ghi vào đĩa cứng sau 1 khoảng thời gian), do đó tăng tốc độ ghi. Tuy vậy, sau khi server crash, ta cần phải phục hồi dữ liệu bị hư hỏng bằng myisamchk.
  • MyISAM hỗ trợ nén dữ liệu, hỗ trợ tăng tốc độ đọc dữ liệu. Mặc dù vậy dữ liệu sau khi nén không thể cập nhật được.

2. InnoDB engine

Đặc điểm
  • Là engine phức tạp nhất trong các engine của MySQL
  • Hỗ trợ transactions
  • Hỗ trợ phục hồi, sửa chữa tốt
Lưu trữ
InnoDB lưu dữ liệu trên 1 file (thuật ngữ gọi là tablespace).
Tính năng:
  • InnoDB hỗ trợ MVCC (Multiversion Concurrency Control) để cải thiện việc truy cập đồng thời và hỗ trợ chiến thuật next-key locking.
  • InnoDB được xây dựng dựa trên clustered index, do đó việc tìm kiếm theo primary key có hiệu năng rất cao. InnoDB không hỗ trợ sắp xếp index do vậy việc thay đổi cấu trúc bảng sẽ dẫn tới toàn bộ dữ liệu phải được đánh chỉ mục từ đầu (CHẬM với những bảng lớn).

3. Memory engine

Đặc điểm
  • Còn được gọi là HEAP tables.
Lưu trữ
Tất cả dữ liệu đều nằm trên memory.
Tính năng:
  • Sau khi server restart, cấu trúc bảng được bảo toàn, dữ liệu bị mất hết.
  • Memory engine sử dụng HASH index nên rất nhanh cho query lookup.
  • Memory engine dùng table-level locking do vậy tính concurrency không cao.

4. Archive engine

Đặc điểm
  • Chỉ hỗ trợ Insert và Select.
  • Không đánh chỉ mục
  • Dữ liệu được buffer và nén bằng zlib nên tốn ít I/O, tốc độ ghi do đó cao.
Tính năng:
  • Tốc độ ghi cao, phù hợp cho ứng dụng log.

5. CSV engine

Đặc điểm
  • Coi file CSV như là 1 table.
  • Không hỗ trợ đánh chỉ mục
Tính năng:
  • Nếu bài toán là trích xuất thông tin từ file CSV và ghi vào cơ sở dữ liệu, đồng thời cần kết quả CSV ngay từ DB, engine này có vẻ thích hợp.

6. Falcon engine

Đặc điểm
  • Được thiết kế cho phần cứng hiện đại: server 64 bit, bộ nhớ “thênh thang”
  • Vẫn còn khá mới, chưa có nhiều usercase

7. Maria engine (Cơ sở dữ liệu liên quan: MariaDB)

Đặc điểm
  • Được thiết kế bởi những chiến tướng dày dạn kinh nghiêm của MySQL, với mục đích thay thế MyISAM
  • Hỗ trợ transactions theo lựa chọn
  • Khôi phục lỗi
  • Row-level locking và MVCC
  • Hỗ trợ BLOB tốt hơn.

Tiêu chí lựa chọn engine

  • Transactions: Nếu ứng dụng yêu cầu transactions, InnoDB là lựa chọn duy nhất. Nếu không yêu cầu transactions, MyISAM là lựa chọn tốt.
  • Concurrency: Nếu yêu cầu chịu tải cao và không cần thiết transactions, MyISAM là lựa chọn số 1.
  • Sao lưu: Các engine đều phần nào hỗ trợ sao lưu. Ngoài ra ta cần hỗ trợ sao lưu trên cả quan điểm thiết kế hệ thống. Ví dụ: bạn thiết kế database server gồm master và slave, master yêu cần transaction nên dùng innodb, slave cần sao lưu và đọc nên có thể dùng MyISAM. Cơ chế đồng bộ master-slave sẽ giúp bạn quản lý sự khác nhau giữa các engine nhưng đảm bảo tính sao lưu. Tiêu chí này có trọng số nhỏ.
  • Phục hồi sau crash: MyISAM có khả năng phục hồi sau crash kém hơn InnoDB.
  • Tính năng theo yêu cầu hệ thống: Nếu yêu cầu là logging, MyISAM hoặc Archive là lựa chọn hợp lý. Nếu cần lưu trực tiếp CSV, CSV engine là lựa chọn đáng cân nhắc. Nếu ứng dụng không thay đổi dữ liệu mấy (ví dụ cơ sở dữ liệu sách), MyISAM và tính năng nén là lựa chọn phù hợp.

Kết luận

Bài viết này đã giới thiệu tổng quan về storage engine, một thành phần quan trọng của hệ thống cơ sở dữ liệu. Một số engine tiêu biểu và tính năng đặc điểm cũng được đưa ra. Tiêu chí chọn lựa mỗi loại engine cũng được giới thiệu.
Hy vọng qua bài viết, bạn có cái nhìn tổng quan về database storate engine nói chung, và MySQL storage engine nói riêng, đồng thời hiểu được tầm quan trọng của việc chọn lựa storage engine.

Tham khảo

  1. High performance MySQL, 2ed
  2. Storage Engines
  3. Storage Engine Introduction