Sao lưu cơ sở dữ liệu là một phần hết sức quan trọng trong công việc quản trị cơ sở dữ liệu. Sử dụng cơ chế sao lưu theo lịch trình là sẽ tạo được sự an toàn cho cơ sở dữ liệu của bạn. Bạn cũng có thể sao lưu một phần của cơ sở dữ liệu như các bảng trong cơ sở dữ liệu để phục vụ cho như cầu riêng của mình mà không hề gặp trở ngại nào cả. Hệ thống mysql hỗ trợ cho cho chúng ta câu lệnh Dump để thực hiện việc này. Cú pháp chung :
mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS]
Để thực hiện câu lệnh này, trước tiên bạn cần phải được cấp quyền sao lưu cơ sở dữ liệu. Thực hiện một câu lệnh Dump thành công, nghĩa là bạn đã sao lưu được toàn bộ cấu trúc của đối tượng cần sao lưu và bao gồm luôn cả dữ liệu của đối tượng đó (tương đương với một câu lệnh Create và câu lệnh Insert into).
Một số tùy chọn OPTIONS của câu lệnh:
Tuỳ chọn Yù nghĩa
--add-locks Thêm vào câu lệnh khoá bảng trước câu lệnh Insert into và sau đó thêm vào câu lệnh mở khoá cho bảng trong tập tin kết xuất.
--add-drop-table Thêm vào câu lệnh xoá bảng trước câu lệnh tạo bảng.
-A hay --all-databases Sao lưu tất cả mọi cơ sở dữ liệu có trong hệ thống.
--allow-keywords Thêm từ tiền tố trong Keyword trước các bảng.
-c hay
--complete-insert
Sử dụng câu lệnh Complete Insert.
-B hay --databases Sao lưu nhiều cơ sở dữ liệu và trước mỗi cơ sở dữ liệu có dùng lệnh USE db_name;
--delayed Insert các dòng với câu lệnh INSERT DELAYED.
-e hay
--extended-insert
Chỉ dùng một câu lệnh Insert dữ liệu cho tất cả mọi dữ liệu của một bảng.
-f hay –force Bỏ qua các lỗi trong khi sao lưu.
--h hay --host = … Tên Host mặc định là Localhost
-n hay --no-create-db Thêm câu lệnh :’CREATE DATABASE /*!32312 IF NOT EXISTS*/ db name;’ vào kết xuất.
-t hay --no-create-info Không viết thông tin về bảng vào kết xuất.
-d hay --no-data Chỉ sao lưu cấu trúc của bảng mà không sao lưu dữ liệu.
-P port_num hay --port=port_num
Địa chỉ cổng Port sẽ được sử dụng khi kết nối đến server.
-q hay –quick Sao lưu thẳng kết xuất thành tập tin mà không thông qua bộ đệm.
-T hay
--tab=path/to/directory
Tạo kết xuất là hai tập tin .sql (cho câu lệnh Create )và .txt (cho câu lệnh Insert).
-u user_name hay --user=user_name
Dùng tên user name để truy cập vào server.
-O var=option hay --set-
variablevar=option
Khởi tạo các giá trị cho biến cung cấp trong danh sách.
-v hay –verbose Sao lưu và in lại mọi thông tin về server.
-w hay
--where='condition'
Sao lư có chọn lọc mẫu tin.
Chú ý : Nếu bạn thực hiện lệnh mysqldump không có tùy chọn -- opt hay –quick thì mysqldump sẽ load toàn bộ tập kết quả vào bộ nhớ trước khi kết xuất ra file backup. Vì vậy, nếu database của bạn quá lớn hay bộ nhớ server của bạn không đủ lớn thì bạn nên dùng tuỳ chọn -- opt hay –quick mỗi khi thực hiện lệnh mysqldump.
Ngoài các tùy chọn OPTIONS đã giới thiệu ở trên, mysqldump còn hổ trợ nhiều tùy chọn OPTIONS khác nữa. Bạn có thể dùng mysqldump --help để xem một danh sách các tùy chọn OPTIONS của mysqdump.
Để phục hồi một database được sao lưu bằng lệnh mysqldum bạn thực hiện như sau:
Nếu trước đây bạn sao lưu database thành một file .sql chứa toàn bộ một database (bao gồm tất cả các lệnh tạo bảng và các lệnh chèn dữ liệu vào bảng). Để phục hồi file .sql này, từ dấu nhắc lệnh (command line), bạn gỏ:
mysql database < backup_file.sql
mysqldump --opt mysql > d:\ test\ bk_mysql.sql bạn tiến hành như sau: Tạo một database mới với tên copyof_mysql trên MySQL server:
mysql > create database copyof_mysql;
Phục hồi file ‘d:\ bk_mysql.sql’ vào MySQL server với tên copyof_mysql. Từ dấu nhắc dòng lệnh (command line), bạn gỏ:
C:\mysql\bin\mysql copyof_mysql < d:\ bk_mysql.sql
Nếu trước đây bạn sao lưu database thành các file .sql và .txt (mỗi table sẽ bao gồm một file .sql và một file .txt). Để phục hồi database này, bạn phải dùng lệnh mysql database < backup-file.sql để phục hồi từng table, sau đó dùng lệnh load data infile ‘file_name.txt’ into table_name để load dữ liệu cho từng table.
Đọc dữ liệu vào cho từng table vừa restore từ các file ‘d:\test\ *.txt’: Từ dấu nhắc dòng lệnh (command line) của mysql, bạn gỏ các lệnh:
mysql> use copyof_mysql ;
mysql> load data infile ‚d:/test/columns_priv.txt‛ into table columns_priv;
mysql> load data infile ‚d:/test/ user.txt‛ into table user;