MySQL數據庫的備份與恢復(4)——mysqldump參數詳解
mysqldump是MySQL自帶的邏輯備份命令,備份文件包含一組SQL語句,可以通過執行這些語句來生成備份前的數據庫對象定義和表數據。mysqldump命令還可以生成CSV,其他分隔文本或XML格式的輸出。
mysqldump命令的格式如下:
mysqldump [options] [db_name [tbl_name ...]]
常用的[options]參數如下:
1、指定登錄用戶名
-uuser_name
--user=user_name
說明:指定與服務器連接時,MySQL使用的用戶名。
2、指定登錄主機
--host = host_name
-h host_name
說明:該參數可以省略,默認主機是localhost。
3、指定登錄密碼
-pyour_pass
--password[=your_pass]
說明:與服務器連接時使用的口令。
4、指定連接主機使用的端口號
-P port_num
--port=port_num
說明:指定與主機連接時使用的TCP/IP端口號(用於連接到localhost以外的主機)。
5、備份所有的數據庫
--all-databases
-A
說明:與使用–databases選項並命名所有數據庫相同。
6、備份指定的數據庫
--databases db_name1 db_name2 ...
-B db_name1 db_name2 ...
說明:
(1)如果省略該選項,mysqldump將第一個名稱參數視爲數據庫名稱,將後續名稱視爲表名稱,並且包含CREATE DATABASE和USE語句。
(2)使用該選項,則將所有名稱參數視爲數據庫名稱,CREATE DATABASE和USE語句包含在每個新數據庫之前的輸出中。
(3)該選項可用於備份INFORMATION_SCHEMA和performace_schema數據庫,這兩個數據庫即使使用–all-databases選項也不會進行備份。
7、只備份表結構
-d
--no-data
說明:只導出表結構,不包含表中的數據。
8、只備份表中的數據
-t
--no-create-info
9、導出前刷新日誌文件(生成新的binlog文件)
-F
--flush-logs
說明:導出數據之後生成一個新的binlog文件,便於恢復數據。
10、導出滿足指定條件的記錄
-w
--where='where-condition'
說明:
(1)導出滿足指定查詢條件的記錄。
(2)如果條件中包含單引號,則該參數可以使用雙引號,比如:
[root@Mysql11 tmp]# mysqldump -uroot -p123456 hist stu --where="name='jack'" > /tmp/stu_name.sql;
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@Mysql11 tmp]# cat /tmp/stu_name.sql
..........
--
-- Table structure for table `stu`
--
DROP TABLE IF EXISTS `stu`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `stu` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`address` varchar(20) DEFAULT NULL,
`phone` char(11) DEFAULT NULL,
`dept_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `stu`
--
-- WHERE: name='jack'
LOCK TABLES `stu` WRITE;
/*!40000 ALTER TABLE `stu` DISABLE KEYS */;
INSERT INTO `stu` VALUES (3,'jack',20,'Zhengzhou','13675871454',1);
/*!40000 ALTER TABLE `stu` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
..............
-- Dump completed on 2020-07-02 12:16:55
11、導出文件格式爲文本文件
-T
--tab=path-to-some-directory
說明:對於每個給定的表,創建一個table_name.sql文件(包含SQL CREATE 命令)和一個table_name.txt文件(包含數據)。
12、指定導出的文本文件的格式
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--fields-terminated-by=...
說明:這些選擇與-T選擇一起使用,並且有相應的LOAD DATA INFILE子句相同的含義。
例如:
[root@Mysql11 tmp]# mysqldump -uroot -p123456 hist stu --tab='/tmp' --fields-terminated-by=','
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@Mysql11 tmp]# ls /tmp
stu.sql stu.txt
[root@Mysql11 tmp]# cat /tmp/stu.txt
1,zhangsan,20,Xinxiang,15578941258,1
2,tom,20,Xinxiang,13778942222,1
3,jack,20,Zhengzhou,13675871454,1
4,john,21,Zhengzhou,13937681111,2
5,mark,22,Aanyang,13055882233,2
13、保證導出數據的一致性狀態
--single-transaction
說明:
(1)該參數適合innoDB引擎的數據庫備份;
(2)innoDB表在備份時,通常啓用選項–single-transaction來保證備份的一致性,實際上它的工作原理是設定本次會話的隔離級別爲:repeatable read,以確保本次會話備份時,不會看到其他會話已經提交了的數據。
14、指定導出文件的字符集
--default-character-set=name
例如:
[root@Mysql11 tmp]# mysqldump -uroot -p123456 --databases hist --default-character-set=utf8 > /tmp/hist.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
15、將當前服務器binlog的位置和文件名追加到輸出文件
--master-data=[1,2]
說明:該參數記錄當前服務器的binlog,相當於執行show master status,狀態(file,position)的值。
例如:
[root@Mysql11 tmp]# mysqldump -uroot -p123456 --master-data=1 hist > /tmp/hist.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@Mysql11 tmp]# cat /tmp/hist.sql
.............
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;
--
-- Table structure for table `course`
--
......................
16、將主庫的binlog位置和文件名追加到導出數據的文件中
--dump-slave=[1,2]
說明:
(1)如果當前服務器是從服務器,使用該命令會執行stop slave來獲取master binlog的文件和位置,等備份完後會自動執行start slave啓動從服務器。使用–dump-slave獲取到的只是當前的從服務器的數據執行到的主的binglog的位置,即:relay_mater_log_file,exec_master_log_pos,而不是主服務器當前的binlog執行的位置,取決於主從的數據延時。
(2)該參數在從服務器上執行,相當於執行show slave status。
(3)當設置爲1時,將會以CHANGE MASTER命令輸出到數據文件,設置爲2時,會在change前加上註釋。