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ứ 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

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

How to Back Up and Restore a MySQL Database - Cách lưu trữ và phục hồi cơ sở dữ liệu MySQL

Nếu bạn đang lưu trữ bất kỳ thứ gì bạn không muốn bị mất trong các cơ sở dữ liệu MySQL, nó rất quan trọng để sao lưu dữ liệu thường xuyên để bảo vệ nó khỏi bị mất. Hướng dẫn sau đây sẽ chỉ cho bạn 2 cách dẽ dàng để sao lưu và phục hồi dữ liệu trong MySQL. Bạn có thể sử dụng quá trình này để chuyenr dữ liệu lên 1 trang web mới.

[​IMG]

Sao lưu dữ liệu từ dòng lệnh ( sử dụng mysqldump)
Nếu bạn có kết nối shell hoặc telnet tới trang web của bạn, bạn có thể sao lưu dữ liệu MySQL bằng việc sử dụng lệnh mysqldump. Lệnh này kết nối với server MySQL và tạo ra 1 file rác SQL. File này chứa các câu lệnh SQL cần thiết tể tạo lại cơ sở dữ liệu. Đây là cú pháp thích hợp:
Mã PHP:
$ mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql] 


[uname] Tển người dùng cơ sở dữ liệu
[pass] Mật khẩu cho cơ sở dữ liệu của bạn(lưu ý không sử dụng khoảng trống giữa -p and mật khẩu)
[dbname] Tên của cơ sở dữ liệu
[backupfile.sql] Tên của file sao lưu
[--opt] Tùy chọn mysqldump
Chẳng hạn, để sao lưu 1 cơ sở dữ liệu có tên ‘Tutorials’ với tên người sử dụng là ‘root’ và không có mật khẩu file tut_backup.sql, bạn nên thực hiện lệnh: 
Mã PHP:
$ mysqldump -u root -p Tutorials > tut_backup.sql 


Lệnh này sẽ sao lưu cơ sở dữ liệu ‘Tutorials’ vào trong 1 file được gọi là tut_backup.sql chứa tất cả các câu lệnh SQlL cần thiết để tạo lại cơ sở dữ liệu. Với lện mysqldump, bạn có thể xác định các bảng nhất định của cơ sở dữ liệu bạn muốn sao lưu. Chẳng hạn, để chỉ sao lưu php_tutorials và các bảng asp_tutorials từ cơ sở dữ liệu ‘Tutorials’, thực hiện lệnh dưới đây. Tên mỗi bảng được tách biệt bởi dấu cách. 
Mã PHP:
$ mysqldump -u root -p Tutorials php_tutorials asp_tutorials > tut_backup.sql 


Đôi khi, cần sao lưu nhiều hơn 1 cơ sở dữ liệu cùng 1 lúc. Trong trường hợp này, bạn có thể sử dụng tùy chọn theo bởi 1 danh sách các cơ sở dữ liệu mà bạn muốn sao lưu. Tên mỗi cơ sở dữ liệu được phân biệt bởi dấu cách.
Mã PHP:
$ mysqldump -u root -p --databases Tutorials Articles Comments > content_backup.sql 


Nếu bạn muốn sao lưu tất cả các cơ sở dữ liệu trong hệ thống cùng 1 lúc, bạn nên sử dụng tùy chọn “all databases”. MySQL sẽ sao lưu tất cả các cơ sở dữ liệu được lưu trữ.
Mã PHP:
$ mysqldump -u root -p --all-databases > alldb_backup.sql 


Lênh mysqldump cũng có thêm nhiều tùy chọn hữu ích khác:
--add-drop-table: MySQL thêm câu lệnh DROP TABLE trước khi tạo bảng
--no-data: Sao lưu cấu trức cơ sở dữ liệu, không gồm nội dung
--add-locks: Thêm câu lệnh LOCK TABLES và UNLOCK TABLES bạn có thể gặp ở file sao lưu

Lệnh mysqldump có điểm mạnh và điểm yếu. Điểm mạnh của việc sử dụng mysqldump là nó đơn giản để sử dụng và chăm sóc các mục trong bảng cho bạn. Điểm yếu là lệnh này khóa các bảng dữ liệu. Nếu kích thước bảng rất lớn, mysqldump cần 1 thời gian dài để mở khóa dữ liệu. Sao lưu và nén cơ sở dữ liệu MySQL 
Nếu cơ sở dữ liệu của bạn quá lớn, bạn có thể muốn nén file sao lưu. Chỉ với việc sử dụng lệnh sao lưu mysql ở dưới và chuyển file tới gzip, bạn sẽ tao được file sao lưu như 1 file nén gzip.
Mã PHP:
$ mysqldump -u [uname] -p[pass] [dbname] | gzip -9 > [backupfile.sql.gz] 


Nếu bạn muốn extract file .gz, sử dụng lệnh sau:
Mã PHP:
$ gunzip [backupfile.sql.gz] 


Phục hồi cơ sở dữ liệu MySQL 
Trên đây, chúng ta đã sao lưu cơ sở dữ liệu Tutorials thành file tut_backup.sql. Để tạo lại 1 cơ sở dữ liệu Tutorials, bạn theo 2 bước sau:
  • Tạo tên cơ sở dữ liệu phù hợp
  • Khởi chạy file này sử dụng lệnh mysql sau:

Mã PHP:
$ mysql -u [uname] -p[pass] [db_to_restore] < [backupfile.sql] 


Xem cách bạn phục hồi file tut_backup.sql file đến cơ sở dữ liệu Tutorials .
Mã PHP:
$ mysql -u root -p Tutorials < tut_backup.sql 


Phục hồi file sao lưu được nén, bạn có thể dùng lệnh sau:
Mã PHP:
gunzip < [backupfile.sql.gz] | mysql -u [uname] -p[pass] [dbname] 


Nếu bạn cần phục hồi cơ sở dữ liệu đã tồn tại, bạn sẽ cần sử dụng lệnh mysqlimport. Cú pháp như sau:
Mã PHP:
mysqlimport -u [uname] -p[pass] [dbname] [backupfile.sql] 


Sao lưu và phục hồi cơ sở dữ liệu sử dụng PHPMyAdmin:
Chắc chắn rằng bạn đã có phpMyAdmin được cài đặt vì rất nhiều nhà cung cấp dịch vụ web sử dụng nó. Để sao lưu cơ sở dũ liệu MySQL sử dụng PHPMyAdmin, theo các bước sau:
• Mở phpMyAdmin.
• Lựu chọn cơ sở dữ liệu bằng việc click vào tên CSDL ở danh sách bên trái màn hình.
• Click link Export. Việc này sẽ mở của sổ mới View dump of database (hoặc tương tự).
• Trong vùng Export, click link Select All để chọn toàn bộ các bảng trong CSDL.
• Trong vùng SQL options, click các tùy chọn bên phải.
• Click Save and tùy chọn nén file theo sau and sau đó click 'Go'. 1 hôp thoại xuất hiện nhắc bạn lưu file.

Phục hồi CSDL cũng dễ dàng như sao lưu nó. Làm theo các bươc sau:
• Mở phpMyAdmin.
• TẠo 1 CSDL có tên thích hợp và chọn nó bằng việc click tên CSDL trong danh sách bên trái màn hình.Nếu bạn muốn sử dụng file sao lưu phục hồi lại CSDL đang tồn tại, click tên CSDL, chọn tất cả các ô cạnh các tên bảng và chọn Drop để xóa các bảng đang tồn tại trong CSDL.
• Click link SQL. Việc này sẽ mở 1 của sổ mới nơi bạn có thể gõ lệnh SQL hoặc đang tải file SQL.
• Sử dung nút browse để tìm kiếm file CSDL.
• Click nút Go. Việc nãy sẽ tạo file sao lưu, thực hiện các lệnh SQL và tạo lại CSDL của bạn.

Dịch bởi: jodanbattlefield - www.shoptinhoc.com/

***************************************

If you're storing anything in MySQL databases that you do not want to lose, it is very important to make regular backups of your data to protect it from loss. This tutorial will show you two easy ways to backup and restore the data in your MySQL database. You can also use this process to move your data to a new web server.

[​IMG]

Back up From the Command Line (using mysqldump)
If you have shell or telnet access to your web server, you can backup your MySQL data by using the mysqldump command. This command connects to the MySQL server and creates an SQL dump file. The dump file contains the SQL statements necessary to re-create the database. Here is the proper syntax: 

PHP:
mysqldump --opt -[uname] -p[pass] [dbname] > [backupfile.sql]
  • [uname] Your database username
  • [pass] The password for your database (note there is no space between -p and the password)
  • [dbname] The name of your database
  • [backupfile.sql] The filename for your database backup
  • [--opt] The mysqldump option
For example, to backup a database named 'Tutorials' with the username 'root' and with no password to a file tut_backup.sql, you should accomplish this command:

PHP:
 mysqldump -u root -p Tutorials tut_backup.sql
This command will backup the 'Tutorials' database into a file called tut_backup.sql which will contain all the SQL statements needed to re-create the database. 
With mysqldump command you can specify certain tables of your database you want to backup. For example, to back up only php_tutorials and asp_tutorials tables from the 'Tutorials' database accomplish the command below. Each table name has to be separated by space.

PHP:
 mysqldump -u root -p Tutorials php_tutorials asp_tutorials tut_backup.sql
Sometimes it is necessary to back up more that one database at once. In this case you can use the --database option followed by the list of databases you would like to backup. Each database name has to be separated by space.

PHP:
 mysqldump -u root ---databases Tutorials Articles Comments content_backup.sql
If you want to back up all the databases in the server at one time you should use the --all-databases option. It tells MySQL to dump all the databases it has in storage.

PHP:
 mysqldump -u root ---all-databases alldb_backup.sql
The mysqldump command has also some other useful options:
--add-drop-table: Tells MySQL to add a DROP TABLE statement before each CREATE TABLE in the dump.
--no-data: Dumps only the database structure, not the contents. 
--add-locks: Adds the LOCK TABLES and UNLOCK TABLES statements you can see in the dump file.

The mysqldump command has advantages and disadvantages. The advantages of using mysqldump are that it is simple to use and it takes care of table locking issues for you. The disadvantage is that the command locks tables. If the size of your tables is very big mysqldump can lock out users for a long period of time.
Back up your MySQL Database with Compress
If your mysql database is very big, you might want to compress the output of mysqldump. Just use the mysql backup command below and pipe the output to gzip, then you will get the output as gzip file.

PHP:
 mysqldump -[uname] -p[pass] [dbname] | gzip -> [backupfile.sql.gz]
If you want to extract the .gz file, use the command below:

PHP:
 gunzip [backupfile.sql.gz]
Restoring your MySQL Database


Above we backup the Tutorials database into tut_backup.sql file. To re-create the Tutorials database you should follow two steps:
  • Create an appropriately named database on the target machine
  • Load the file using the mysql command:
PHP:
 mysql -[uname] -p[pass] [db_to_restore] < [backupfile.sql]
Have a look how you can restore your tut_backup.sql file to the Tutorials database.
PHP:
 mysql -u root -p Tutorials tut_backup.sql
To restore compressed backup files you can do the following:
PHP:
 gunzip < [backupfile.sql.gz] | mysql -[uname] -p[pass] [dbname]
If you need to restore a database that already exists, you'll need to use mysqlimport command. The syntax for mysqlimport is as follows:

PHP:
 mysqlimport -[uname] -p[pass] [dbname] [backupfile.sql]
Backing Up and Restoring using PHPMyAdmin


It is assumed that you have phpMyAdmin installed since a lot of web service providers use it. To backup your MySQL database using PHPMyAdmin just follow a couple of steps:
  • Open phpMyAdmin.
  • Select your database by clicking the database name in the list on the left of the screen.
  • Click the Export link. This should bring up a new screen that says View dump of database (or something similar).
  • In the Export area, click the Select All link to choose all of the tables in your database.
  • In the SQL options area, click the right options.
  • Click on the Save as file option and the corresponding compression option and then click the 'Go' button. A dialog box should appear prompting you to save the file locally.
Restoring your database is easy as well as backing it up. Make the following:
  • Open phpMyAdmin.
  • Create an appropriately named database and select it by clicking the database name in the list on the left of the screen. If you would like to rewrite the backup over an existing database then click on the database name, select all the check boxes next to the table names and select Drop to delete all existing tables in the database.
  • Click the SQL link. This should bring up a new screen where you can either type in SQL commands, or upload your SQL file.
  • Use the browse button to find the database file.
  • Click Go button. This will upload the backup, execute the SQL commands and re-create your database.
(Nguồn: How to Back Up and Restore a MySQL Database)