邏輯備份特點
- 備份的是建表、建庫、插入等操作所執(zhí)行SQL語句(DDL DML DCL),適用于中小型數(shù)據(jù)庫。
- 效率相對較低
在日常工作中,我們會使用 mysqldump 命令創(chuàng)建SQL格式的轉(zhuǎn)儲文件來備份數(shù)據(jù)庫?;蛘呶覀儼褦?shù)據(jù)導出后做數(shù)據(jù)遷移,主從復制等操作。mysqldump是一個邏輯備份工具,復制原始的數(shù)據(jù)庫對象定義和表數(shù)據(jù)產(chǎn)生一組可執(zhí)行的SQL語句。 默認情況下,生成insert語句,也能生成其它分隔符的輸出或XML格式的文件。
特點
- 自動記錄position位置。
show master status\G;
- 可用性,一致性
鎖表機制
用法
mysqldump -h 服務器 -u用戶名 -p密碼 數(shù)據(jù)庫名 > 備份文件.sql
/*查看幫助*/
mysqldump --help
日常用法
備份所有庫
// 先配置用戶名和密碼
shell> vi ~/.mysql_user
[mysqldump]
user=root
password=123
shell> mysqldump --defaults-file=~/.mysql_user -h172.16.153.10 --all-databases > `date +%FT%H_%M_%S`dump_all.sql
# 不包含 INFORMATION_SCHEMA,performance_schema,sys
備份指定的多個庫
shell> mysqldump db1 t1 t3 t7 > dump.sql
其他參數(shù)
- --master-data=0|1|2
服務器的二進制日志必須打開
0 不記錄二進制日志文件及位置:
1 以CHANGE MASTER TO 的方式記錄位置,可用于恢復后直接啟動從服務器:
2 以CHANGE MASTER TO 的方式記錄位置,但默認被注釋:
- --dump-slave 用于在slave上dump數(shù)據(jù),建立新的slave。因為我們在使用mysqldump時會鎖表,所以大多數(shù)情況下,我們的導出操作一般會在只讀備庫上做,為了獲取主庫的Relay_Master_Log_File(二進制日志)和Exec_Master_Log_Pos(主服務器二進制日志中數(shù)據(jù)所處的位置),需要用到這個參數(shù),不過這個參數(shù)只有在5.7以后的才會有
- --no-data, -d 不導出任何數(shù)據(jù),只導出數(shù)據(jù)庫表結構
- --lock-all-tables:鎖定所有表 對MyISAM引擎的表開始備份前,先鎖定所有表。
優(yōu)勢
mysqldump的優(yōu)勢:
- 可以查看或者編輯十分方便,它也可以靈活性的恢復之前的數(shù)據(jù)。
- 不關心底層的存儲引擎,既適用于支持事務的,也適用于不支持事務的表。
- 不過它不能作為一個快速備份大量的數(shù)據(jù)或可伸縮的解決方案。如果數(shù)據(jù)庫過大,即使備份步驟需要的時間不算太久,但有可能恢復數(shù)據(jù)的速度也會非常慢,因為它涉及的SQL語句插入磁盤I/O,創(chuàng)建索引等等。 對于大規(guī)模的備份和恢復,更合適的做法是物理備份,復制其原始格式的數(shù)據(jù)文件,可以快速恢復。
恢復
shell> mysql -uroot -h"ip地址" -p"密碼" 庫名 表名 < dump.sql
或者,在MySQL中,使用source命令:
mysql> source dump.sql
如果文件是不包含CREATE DATABASE和USE語句的但數(shù)據(jù)庫轉(zhuǎn)儲,請首先創(chuàng)建數(shù)據(jù)庫(如有必要):
shell> mysqladmin create db1
然后在加載轉(zhuǎn)儲文件時指定數(shù)據(jù)庫名稱:
shell> mysql db1 < dump.sql
或者,在mysql中創(chuàng)建數(shù)據(jù)庫,將其選為默認數(shù)據(jù)庫,然后加載轉(zhuǎn)儲文件:
mysql> CREATE DATABASE IF NOT EXISTS db1;
mysql> USE db1;
mysql>source dump.sql
Example
shell> mysql --defaults-file=~/.mysql_user < /backup/2016-12-08-04-mysql-all.sql