zl程序教程

您现在的位置是:首页 >  其它

当前栏目

mysqldump

mysqldump
2023-09-27 14:21:15 时间
 

#############

 

可以通过开启general log 来看mysqldump的整个备份过程。

 

set global general_log=ON;

 

mysqldump流程

2023-04-26T10:10:18.590553+08:00        10340 Query     FLUSH /*!40101 LOCAL */ TABLES
2023-04-26T10:10:18.594376+08:00        10340 Query     FLUSH TABLES WITH READ LOCK
2023-04-26T10:10:18.594731+08:00        10340 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2023-04-26T10:10:18.595053+08:00        10340 Query     START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
2023-04-26T10:10:18.595419+08:00        10340 Query     SHOW VARIABLES LIKE 'gtid\_mode'
2023-04-26T10:10:18.596901+08:00        10340 Query     SHOW MASTER STATUS
2023-04-26T10:10:18.597224+08:00        10340 Query     UNLOCK TABLES
2023-04-26T10:10:18.597590+08:00        10340 Query     SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IS NOT NULL GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE ORDER BY LOGFILE_GROUP_NAME
2023-04-26T10:10:18.599155+08:00        10340 Query     SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
2023-04-26T10:10:18.600355+08:00        10340 Query     SHOW DATABASES
2023-04-26T10:10:18.601499+08:00        10340 Query     SHOW VARIABLES LIKE 'ndbinfo\_version'
2023-04-26T10:10:18.602579+08:00        10340 Init DB   mysql
2023-04-26T10:10:18.602844+08:00        10340 Query     SHOW CREATE DATABASE IF NOT EXISTS `mysql`
2023-04-26T10:10:18.603140+08:00        10340 Query     SAVEPOINT sp
2023-04-26T10:10:18.603421+08:00        10340 Query     show tables
2023-04-26T10:10:18.604141+08:00        10340 Query     show table status like 'columns\_priv'
2023-04-26T10:10:18.605222+08:00        10340 Query     SET SQL_QUOTE_SHOW_CREATE=1
2023-04-26T10:10:18.605511+08:00        10340 Query     SET SESSION character_set_results = 'binary'
2023-04-26T10:10:18.605784+08:00        10340 Query     show create table `columns_priv`
2023-04-26T10:10:18.606172+08:00        10340 Query     SET SESSION character_set_results = 'utf8'
2023-04-26T10:10:18.606474+08:00        10340 Query     show fields from `columns_priv`
2023-04-26T10:10:18.607402+08:00        10340 Query     show fields from `columns_priv`
2023-04-26T10:10:18.608000+08:00        10340 Query     SELECT /*!40001 SQL_NO_CACHE */ * FROM `columns_priv`
2023-04-26T10:10:18.608278+08:00        10340 Query     SET SESSION character_set_results = 'binary'
2023-04-26T10:10:18.608464+08:00        10340 Query     use `mysql`
2023-04-26T10:10:18.608637+08:00        10340 Query     select @@collation_database
2023-04-26T10:10:18.608852+08:00        10340 Query     SHOW TRIGGERS LIKE 'columns\_priv'
2023-04-26T10:10:18.609484+08:00        10340 Query     SET SESSION character_set_results = 'utf8'
2023-04-26T10:10:18.609657+08:00        10340 Query     ROLLBACK TO SAVEPOINT sp
2023-04-26T10:10:18.609856+08:00        10340 Query     show table status like 'db'
2023-04-26T10:10:18.610517+08:00        10340 Query     SET SQL_QUOTE_SHOW_CREATE=1
2023-04-26T10:10:18.610691+08:00        10340 Query     SET SESSION character_set_results = 'binary'
2023-04-26T10:10:18.610874+08:00        10340 Query     show create table `db`
2023-04-26T10:10:18.611138+08:00        10340 Query     SET SESSION character_set_results = 'utf8'
2023-04-26T10:10:18.611343+08:00        10340 Query     show fields from `db`
2023-04-26T10:10:18.612006+08:00        10340 Query     show fields from `db`
2023-04-26T10:10:18.612681+08:00        10340 Query     SELECT /*!40001 SQL_NO_CACHE */ * FROM `db`
2023-04-26T10:10:18.613065+08:00        10340 Query     SET SESSION character_set_results = 'binary'
2023-04-26T10:10:18.613237+08:00        10340 Query     use `mysql`
2023-04-26T10:10:18.613426+08:00        10340 Query     select @@collation_database
2023-04-26T10:10:18.613616+08:00        10340 Query     SHOW TRIGGERS LIKE 'db'
2023-04-26T10:10:18.614264+08:00        10340 Query     SET SESSION character_set_results = 'utf8'
2023-04-26T10:10:18.614455+08:00        10340 Query     ROLLBACK TO SAVEPOINT sp
2023-04-26T10:10:18.614632+08:00        10340 Query     show table status like 'engine\_cost'
2023-04-26T10:10:18.615259+08:00        10340 Query     SET SQL_QUOTE_SHOW_CREATE=1
2023-04-26T10:10:18.615452+08:00        10340 Query     SET SESSION character_set_results = 'binary'
2023-04-26T10:10:18.615619+08:00        10340 Query     show create table `engine_cost`
:

 

 

 

##############################

试验数据准备:

创建 apple库:

create
database apple; create table iphone(id bigint not null auto_increment,name varchar(255) not null,address varchar(255) not null,status tinyint not null,primary key (id),key idx_name(name))ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

insert into iphone (name,address,status) values ('iphone4','USA',1);

insert into iphone (name,address,status) values ('iphone5','USA',1);

insert into iphone (name,address,status) values ('iphone6','USA',1);

insert into iphone (name,address,status) values ('iphone7','USA',1);

insert into iphone (name,address,status) values ('iphone8','USA',1);


create table ipad(id bigint not null auto_increment,name varchar(255) not null,address varchar(255) not null,primary key (id),key idx_name(name))ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
insert into ipad (name,address) values ('ipad10','USA'); insert into ipad (name,address) values ('ipad11','USA'); 

insert into ipad (name,address) values ('ipad12','USA'); insert into ipad (name,address) values ('ipad13','USA');

insert
into ipad (name,address) values ('ipad14','USA');


# 创建google库:
create database google;

create table android(id bigint not null auto_increment,name varchar(255) not null,version varchar(32) not null,primary key (id),key idx_name(name))ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
insert into android (name,version) values ('android10','10');
insert into android (name,version) values ('android11','11');
insert into android (name,version) values ('android12','12');
insert into android (name,version) values ('android13','13');
insert into android (name,version) values ('android14','14');

create table earth(id bigint not null auto_increment,name varchar(255) not null,status tinyint not null,primary key (id),key idx_name(name))ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
insert into earth (name,status) values ('earth 20',1);
insert into earth (name,status) values ('earth 30',0);
insert into earth (name,status) values ('earth 30',1);
insert into earth (name,status) values ('earth 40',0);
insert into earth (name,status) values ('earth 50',1);


 

针对库级别的备份:

1)备份整个实例:

      参数:--all-databases ,这也会备份系统库,如果用该备份来作从库,会出现未知问题



备份整个实例,且获得一致性,且包含备份时刻的位点信息,这样就方便用来做一个从库,通常地,线上数据库都是innodb的存储引擎,没有视图,没有触发器,没有存储过程,没有自定义函数,没有事件:  

shell>> mysqldump  -uroott -p123456  -h10.10.10.10  -P3306   --all-databases --routines --events --triggers --single-transaction --master-data=2    > all.sql

--
user, -u 连接数据库的账号,连接数据库的四大要素之一 --password, -p 连接数据库密码,连接数据库的四大要素之一 --host, -h 需要导出的主机信息,连接数据库的四大要素之一 --port, -P 连接数据库端口号,连接数据库的四大要素之一 --socket,-S指定连接mysql的socket文件位置,默认路径/tmp/mysql.sock,与host,port互斥,一般用于在本机上进行备份,备份账号通常就是xxx@'localhost' --single-transaction 保证一致性 --master-data=2 获取备份时的位点信息,将当前服务器的binlog的位置和文件名追加到输出文件,用于搭建从库的change master中的必要信息 --all-databases 表示备份所有数据库 --routines 表示要备份存储过程和自定义函数 --events 表示要备份事件 --triggers 表示要备份触发器

 

 

2)备份指定的某些数据库:

参数:--databases  apple  google
shell>> mysqldump  -uroot -p123456 -h10.10.10.10  -P3306   --databases  apple  google  --single-transaction --master-data=2    > apple_google.sql

备份内容:
-- MySQL dump 10.13  Distrib 5.7.25-28, for Linux (x86_64)
--
-- Host: 10.10.10.10    Database: apple
-- ------------------------------------------------------
-- Server version    5.7.25-28-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
/*!50717 SELECT COUNT(*) INTO @rocksdb_has_p_s_session_variables FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'performance_schema' AND TABLE_NAME = 'session_variables' */;
/*!50717 SET @rocksdb_get_is_supported = IF (@rocksdb_has_p_s_session_variables, 'SELECT COUNT(*) INTO @rocksdb_is_supported FROM performance_schema.session_variables WHERE VARIABLE_NAME=\'rocksdb_bulk_load\'', 'SELECT 0') */;
/*!50717 PREPARE s FROM @rocksdb_get_is_supported */;
/*!50717 EXECUTE s */;
/*!50717 DEALLOCATE PREPARE s */;
/*!50717 SET @rocksdb_enable_bulk_load = IF (@rocksdb_is_supported, 'SET SESSION rocksdb_bulk_load = 1', 'SET @rocksdb_dummy_bulk_load = 0') */;
/*!50717 PREPARE s FROM @rocksdb_enable_bulk_load */;
/*!50717 EXECUTE s */;
/*!50717 DEALLOCATE PREPARE s */;
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;

--
-- GTID state at the beginning of the backup 
--

SET @@GLOBAL.GTID_PURGED='ef863667-298a-11eb-8d0b-0c42a15d0b4c:1-171415';

--
-- Position to start replication or point-in-time recovery from
--

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000217', MASTER_LOG_POS=246771251;

--
-- Current Database: `apple`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `apple` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `apple`;

--
-- Table structure for table `ipad`
--

DROP TABLE IF EXISTS `ipad`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ipad` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `ipad`
--

LOCK TABLES `ipad` WRITE;
/*!40000 ALTER TABLE `ipad` DISABLE KEYS */;
INSERT INTO `ipad` VALUES (1,'ipad10','USA'),(2,'ipad11','USA'),(3,'ipad12','USA'),(4,'ipad13','USA'),(5,'ipad14','USA');
/*!40000 ALTER TABLE `ipad` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `iphone`
--

DROP TABLE IF EXISTS `iphone`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `iphone` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `status` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `iphone`
--

LOCK TABLES `iphone` WRITE;
/*!40000 ALTER TABLE `iphone` DISABLE KEYS */;
INSERT INTO `iphone` VALUES (1,'iphone4','USA',1),(2,'iphone5','USA',1),(3,'iphone6','USA',1),(4,'iphone7','USA',1),(5,'iphone8','USA',1);
/*!40000 ALTER TABLE `iphone` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Current Database: `google`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `google` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `google`;

--
-- Table structure for table `android`
--

DROP TABLE IF EXISTS `android`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `android` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `version` varchar(32) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `android`
--

LOCK TABLES `android` WRITE;
/*!40000 ALTER TABLE `android` DISABLE KEYS */;
INSERT INTO `android` VALUES (1,'android10','10'),(2,'android11','11'),(3,'android12','12'),(4,'android13','13'),(5,'android14','14');
/*!40000 ALTER TABLE `android` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `earth`
--

DROP TABLE IF EXISTS `earth`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `earth` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `status` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `earth`
--

LOCK TABLES `earth` WRITE;
/*!40000 ALTER TABLE `earth` DISABLE KEYS */;
INSERT INTO `earth` VALUES (1,'earth 20',1),(2,'earth 30',0),(3,'earth 30',1),(4,'earth 40',0),(5,'earth 50',1);
/*!40000 ALTER TABLE `earth` ENABLE KEYS */;
UNLOCK TABLES;
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
/*!50112 SET @disable_bulk_load = IF (@is_rocksdb_supported, 'SET SESSION rocksdb_bulk_load = @old_rocksdb_bulk_load', 'SET @dummy_rocksdb_bulk_load = 0') */;
/*!50112 PREPARE s FROM @disable_bulk_load */;
/*!50112 EXECUTE s */;
/*!50112 DEALLOCATE PREPARE s */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2021-08-04 15:44:50


3)反向选择来备份指定的数据库:xargs命令,适合将该备份用来制作从库


命令:
mysql -h10.10.10.10 -P3306 -uroot -p123456 -e 'show databases;' | grep -Ev 'Database|information_schema|mysql|performance_schema|sys' | xargs mysqldump -hXXX --single-transaction --master-data=2  --databases > XXX.sql

pt-show-grants -hXXX > XXX.grants.sql

mysqldump -hXXX -PYYY -uZZZ -pWWW --single-transaction --master-data=2  --databases TTT > XXX.sql
# XXX表示主机名或ip,YYY表示端口,ZZZ表示用户名,WWW表示用户的密码,TTT表示要备份的数据库名称

内容



4)备份指定的某些数据库,但是在每个数据库创建之前添加drop数据库语句:

   参数:--add-drop-database(前提是不能加上--no-create-db参数)

shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306   --databases  apple  google  --single-transaction --master-data=2 --add-drop-database   > apple_google.sql

# 创建数据库之前会添加该删库语句,即如果存在该库就先删除:

/*!40000 DROP DATABASE IF EXISTS `apple`*/;


# 不加的该参数的时候:

CREATE
DATABASE /*!32312 IF NOT EXISTS*/ `apple` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; USE `apple`; ----------------------下面是加上参数后---------------------------------

# 加上该参数后: /*!40000 DROP DATABASE IF EXISTS `apple`*/; CREATE DATABASE /*!32312 IF NOT EXISTS*/ `apple` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; USE `apple`;



 

4)备份指定的某些数据库,但是不要建库语句:

   参数:--no-create-db(此时加上--add-drop-database参数也是相同结果,并不有删库的语句,想想为什么?你导入数据的时候,先把存在的库删掉,又不再创建库)

# 这两个命令等价:

shell>> mysqldump -uroot -p123456 -h10.10.10.10 -P3306 --databases apple google --single-transaction --master-data=2 --no-create-db > apple_google.sql
shell>> mysqldump -uroot -p123456 -h10.10.10.10 -P3306 --databases apple google --single-transaction --master-data=2 --add-drop-database --no-create-db > apple_google.sql

 




# 不加的该参数的时候:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `apple` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `apple`;

----------------------下面是加上参数后---------------------------------

# 添加该参数后的效果: USE `apple`;

 

主要针对表级别的备份:

  --tables test       正向选择
  --ignore-table      反向选择 不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……
  --add-drop-table    每个数据表创建之前添加drop数据表语句。 (默认为打开状态,使用--skip-add-drop-table取消选项)
  --disable-keys      对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态。
  --complete-insert,  -c  使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。
  --extended-insert,  -e     使用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度。默认为打开状态,使用--skip-extended-insert取消选项。
  --insert-ignore     在插入行时使用INSERT IGNORE语句.
  --replace           使用REPLACE INTO 取代INSERT INTO.
  --where, -w         只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。 --where=” user=’root’”
  --no-create-info,  -t     只导出数据,而不添加CREATE TABLE 语句,即不导出表结构。
  --no-data, -d       不导出任何数据,只导出数据库表结构。
  --no-autocommit    使用autocommit/commit 语句包裹表。

1)备份某个库部分表(少量):


      参数:--tables  iphone ipad


shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables  iphone ipad   > apple.sql


备份内容:
-- MySQL dump 10.13  Distrib 5.7.25-28, for Linux (x86_64)
--
-- Host: 10.10.10.10    Database: apple
-- ------------------------------------------------------
-- Server version    5.7.25-28-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
/*!50717 SELECT COUNT(*) INTO @rocksdb_has_p_s_session_variables FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'performance_schema' AND TABLE_NAME = 'session_variables' */;
/*!50717 SET @rocksdb_get_is_supported = IF (@rocksdb_has_p_s_session_variables, 'SELECT COUNT(*) INTO @rocksdb_is_supported FROM performance_schema.session_variables WHERE VARIABLE_NAME=\'rocksdb_bulk_load\'', 'SELECT 0') */;
/*!50717 PREPARE s FROM @rocksdb_get_is_supported */;
/*!50717 EXECUTE s */;
/*!50717 DEALLOCATE PREPARE s */;
/*!50717 SET @rocksdb_enable_bulk_load = IF (@rocksdb_is_supported, 'SET SESSION rocksdb_bulk_load = 1', 'SET @rocksdb_dummy_bulk_load = 0') */;
/*!50717 PREPARE s FROM @rocksdb_enable_bulk_load */;
/*!50717 EXECUTE s */;
/*!50717 DEALLOCATE PREPARE s */;
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;

--
-- GTID state at the beginning of the backup 
--

SET @@GLOBAL.GTID_PURGED='ef863667-298a-11eb-8d0b-0c42a15d0b4c:1-171415';

--
-- Position to start replication or point-in-time recovery from
--

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000217', MASTER_LOG_POS=246771251;

--
-- Table structure for table `iphone`
--

DROP TABLE IF EXISTS `iphone`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `iphone` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `status` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `iphone`
--

LOCK TABLES `iphone` WRITE;
/*!40000 ALTER TABLE `iphone` DISABLE KEYS */;
INSERT INTO `iphone` VALUES (1,'iphone4','USA',1),(2,'iphone5','USA',1),(3,'iphone6','USA',1),(4,'iphone7','USA',1),(5,'iphone8','USA',1);
/*!40000 ALTER TABLE `iphone` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `ipad`
--

DROP TABLE IF EXISTS `ipad`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ipad` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `ipad`
--

LOCK TABLES `ipad` WRITE;
/*!40000 ALTER TABLE `ipad` DISABLE KEYS */;
INSERT INTO `ipad` VALUES (1,'ipad10','USA'),(2,'ipad11','USA'),(3,'ipad12','USA'),(4,'ipad13','USA'),(5,'ipad14','USA');
/*!40000 ALTER TABLE `ipad` ENABLE KEYS */;
UNLOCK TABLES;
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
/*!50112 SET @disable_bulk_load = IF (@is_rocksdb_supported, 'SET SESSION rocksdb_bulk_load = @old_rocksdb_bulk_load', 'SET @dummy_rocksdb_bulk_load = 0') */;
/*!50112 PREPARE s FROM @disable_bulk_load */;
/*!50112 EXECUTE s */;
/*!50112 DEALLOCATE PREPARE s */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2021-08-04 16:55:57

 



2)备份某个库的部分表(大量):

      参数:--ignore-table=apple.iphone  (如果有多张表不需要备份,则像这样写:--ignore-table=xxx.yyy  --ignore-table=zzz.jjj  等等)


shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --ignore-table=apple.ipad   > apple.sql


内容:(这时候出现建库语句和use语句)
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `apple` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `apple`;

--
-- Table structure for table `iphone`
--

DROP TABLE IF EXISTS `iphone`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `iphone` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `status` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `iphone`
--

LOCK TABLES `iphone` WRITE;
/*!40000 ALTER TABLE `iphone` DISABLE KEYS */;
INSERT INTO `iphone` VALUES (1,'iphone4','USA',1),(2,'iphone5','USA',1),(3,'iphone6','USA',1),(4,'iphone7','USA',1),(5,'iphone8','USA',1);
/*!40000 ALTER TABLE `iphone` ENABLE KEYS */;
UNLOCK TABLES;

 

3)指定不需要删表sql语句:

      参数:--add-drop-table  每个数据表创建之前添加drop数据表语句。 默认为打开状态,可以使用--skip-add-drop-table取消选项,这样就不会有drop table if exists 语句了

一般地,表相关sql语句如下:先删表,再建表,再锁表,再关闭索引,再导入数据,再创建索引,再释放表锁
 DROP TABLE IF EXISTS `iphone`;

CREATE TABLE `iphone` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `address` varchar(255) NOT NULL, `status` tinyint(4) NOT NULL, PRIMARY KEY (`id`), KEY `idx_name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;

LOCK TABLES `iphone` WRITE;
/*!40000 ALTER TABLE `iphone` DISABLE KEYS */;
INSERT INTO `iphone` VALUES (1,'iphone4','USA',1),(2,'iphone5','USA',1),(3,'iphone6','USA',1),(4,'iphone7','USA',1),(5,'iphone8','USA',1);
/*!40000 ALTER TABLE `iphone` ENABLE KEYS */;

UNLOCK TABLES;

  命令:

shell>>  mysqldump  -uroot  -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone --skip-add-drop-table  > apple.sql

内容:添加--skip-add-drop-table 参数后,就不会有drop table if exists 语句了
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `iphone` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `status` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `iphone`
--

LOCK TABLES `iphone` WRITE;
/*!40000 ALTER TABLE `iphone` DISABLE KEYS */;
INSERT INTO `iphone` VALUES (1,'iphone4','USA',1),(2,'iphone5','USA',1),(3,'iphone6','USA',1),(4,'iphone7','USA',1),(5,'iphone8','USA',1);
/*!40000 ALTER TABLE `iphone` ENABLE KEYS */;
UNLOCK TABLES;

 


4)指定不需要通过索引延迟创建来加速导入数据:


      参数:--disable-keys=false   。 默认为true,可以使用--disable-keys=false来关掉,这个选项只对myisam存储引擎有用,加上这个参数后,sql语句更加简洁些。


/*!40000 ALTER TABLE `iphone` DISABLE KEYS */;

insert语句;

/*!40000 ALTER TABLE `iphone` ENABLE KEYS */;


命令:
mysqldump -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone  --disable-keys=false   > apple.sql

内容:

LOCK TABLES `iphone` WRITE;
INSERT INTO `iphone` VALUES (1,'iphone4','USA',1),(2,'iphone5','USA',1),(3,'iphone6','USA',1),(4,'iphone7','USA',1),(5,'iphone8','USA',1);
UNLOCK TABLES;

 


5)备使用完整的列名称表示insert语句:insert  into xxx (col_name1,col_name2,...) values (va1,va2,...)

      参数:--complete-insert  或 -c      使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。


命令:
shell>> mysqldump -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone  --complete-insert    > apple.sql

内容:
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (1,'iphone4','USA',1),(2,'iphone5','USA',1),(3,'iphone6','USA',1),(4,'iphone7','USA',1),(5,'iphone8','USA',1);


 

 

6)不合并insert语句:即每行数据都有一个insert语句构成


      参数:---skip-extended-insert    。默认值是:--extended-insert 这样使导出文件更小,并加速导入时的速度,默认为打开状态。用--skip-extended-insert 来取消合并insert语句。

命令:
shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone    --skip-extended-insert >  apple.sql

内容:
INSERT INTO `iphone` VALUES (1,'iphone4','USA',1);
INSERT INTO `iphone` VALUES (2,'iphone5','USA',1);
INSERT INTO `iphone` VALUES (3,'iphone6','USA',1);
INSERT INTO `iphone` VALUES (4,'iphone7','USA',1);
INSERT INTO `iphone` VALUES (5,'iphone8','USA',1);



命令:这样导出的insert语句是最清晰的,字段全部列出,每行一个insert语句
shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone  --complete-insert  --skip-extended-insert >  apple.sql

# insert语句形式: INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (1,'iphone4','USA',1);
# 多个insert语句构成,且字段名称全部显示出来

内容:
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (1,'iphone4','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (2,'iphone5','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (3,'iphone6','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (4,'iphone7','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (5,'iphone8','USA',1);


 

 

7)insert ignore into语句替换insert into语句:

      参数:---insert-ignore   。默认insert into 语句,添加该参数,可以将insert into xxx语句替换成 insert  ignore into xxx语句

命令:
shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone  --complete-insert  --skip-extended-insert  --insert-ignore  >  apple.sql
内容
INSERT  IGNORE INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (1,'iphone4','USA',1);
INSERT  IGNORE INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (2,'iphone5','USA',1);
INSERT  IGNORE INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (3,'iphone6','USA',1);
INSERT  IGNORE INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (4,'iphone7','USA',1);
INSERT  IGNORE INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (5,'iphone8','USA',1);


 


8)replace into xxx语句替换insert into xxx语句:


      参数:---replace   。默认insert into 语句,添加该参数,可以将insert into xxx语句替换成 replace into xxx语句

 

命令:
shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone  --complete-insert  --skip-extended-insert --replace  >  apple.sql
内容:
REPLACE INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (1,'iphone4','USA',1);
REPLACE INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (2,'iphone5','USA',1);
REPLACE INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (3,'iphone6','USA',1);
REPLACE INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (4,'iphone7','USA',1);
REPLACE INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (5,'iphone8','USA',1);


 


9)使用where条件导出指定表需要的数据:

      参数:---where   。默认insert into 语句,添加该参数,可以将insert into xxx语句替换成 replace into xxx语句

                一次可以指定多张表,但是只能有一个where条件,那么这些表的导出条件相同

命令:
全称:--where
shell>> mysqldump -uroot -p123456 -h10.10.10.10 -P3306 --single-transaction --master-data=2 --databases apple --tables iphone --complete-insert --skip-extended-insert --where="id<3 or id>4;" > apple.sql
简写为:-w
shell>> mysqldump -uroot -p123456 -h10.10.10.10 -P3306 --single-transaction --master-data=2 --databases apple --tables iphone --complete-insert --skip-extended-insert -w "id<3 or id>4;" > apple.sql
内容:
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (1,'iphone4','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (2,'iphone5','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (5,'iphone8','USA',1);

 


10)只导出insert数据,不要建表语句:


      参数:--no-create-info, 简写为: -t 。默认是有建表语句的。只导出数据,而不添加CREATE TABLE 语句,即不导出表结构。


命令:
shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone  --complete-insert  --skip-extended-insert -t  >  apple.sql
内容:
LOCK TABLES `iphone` WRITE;
/*!40000 ALTER TABLE `iphone` DISABLE KEYS */;
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (1,'iphone4','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (2,'iphone5','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (3,'iphone6','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (4,'iphone7','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (5,'iphone8','USA',1);
/*!40000 ALTER TABLE `iphone` ENABLE KEYS */;
UNLOCK TABLES;

 


11)只导出建表语句,不要insert数据:

      参数:--no-data, 简写为:-d     不导出任何数据,只导出数据库表结构。

命令:
shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone  --complete-insert  --skip-extended-insert -d  >  apple.sql
内容:
DROP TABLE IF EXISTS `iphone`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `iphone` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `status` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;

 

12)添加事务包裹语句:set autocommit=0;commit;

      参数:--no-autocommit,。

命令:
shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone  --complete-insert  --skip-extended-insert --no-autocommit  >  apple.sql

内容:


LOCK TABLES `iphone` WRITE;
/*!40000 ALTER TABLE `iphone` DISABLE KEYS */;
set autocommit=0;
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (1,'iphone4','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (2,'iphone5','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (3,'iphone6','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (4,'iphone7','USA',1);
INSERT INTO `iphone` (`id`, `name`, `address`, `status`) VALUES (5,'iphone8','USA',1);
/*!40000 ALTER TABLE `iphone` ENABLE KEYS */;
UNLOCK TABLES;
commit;

 


13)针对含有二进制数据的表:不加该参数,导出的blob字段可能是乱码的。这里将表结构ipad添加一个blob数据类型的字段。


      参数:--hex-blob   使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。影响到的字段类型有BINARY、VARBINARY、BLOB。导出字段的值形如:0x121210abcd21110,这样的值可以插入数据库的


命令:
shell>> mysqldump  -uroot -p123456  -h10.10.10.10  -P3306     --single-transaction --master-data=2  --databases  apple  --tables iphone  --complete-insert  --skip-extended-insert --hex-blob  >  apple.sql

内容:
DROP TABLE IF EXISTS `ipad`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ipad` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `blob_name` blob,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

LOCK TABLES `ipad` WRITE;
/*!40000 ALTER TABLE `ipad` DISABLE KEYS */;
INSERT INTO `ipad` (`id`, `name`, `address`, `blob_name`) VALUES (1,'ipad10','USA',0x3031303130313031);
INSERT INTO `ipad` (`id`, `name`, `address`, `blob_name`) VALUES (2,'ipad11','USA',0x3031303130313031);
INSERT INTO `ipad` (`id`, `name`, `address`, `blob_name`) VALUES (3,'ipad12','USA',0x3031303130313031);
INSERT INTO `ipad` (`id`, `name`, `address`, `blob_name`) VALUES (4,'ipad13','USA',0x3031303130313031);
INSERT INTO `ipad` (`id`, `name`, `address`, `blob_name`) VALUES (5,'ipad14','USA',0x3031303130313031);
/*!40000 ALTER TABLE `ipad` ENABLE KEYS */;
UNLOCK TABLES;

 

 

14)只导出触发器、视图、存储过程、函数、事件,不导出数据和表结构:

      参数:--no-data, 简写为:-d     不导出任何数据,只导出数据库表结构。

命令:
 mysql -h10.10.10.10 -P3306 -utmp -ptmp -e 'show databases;' | grep -Ev 'Database|information_schema|mysql|performance_schema|sys' | xargs   mysqldump  -utmp -ptmp  -h10.10.10.10 -P3306 --single-transaction --routines --events --triggers  --master-data=2 -d -t --databases > sb.sql

 

 


针对全局的备份参数:

 
--single-transaction  该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。
本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。 --master-data 该选项将当前服务器的binlog的位置和文件名追加到输出文件中(show master status)。
如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息。
该选项将打开
--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。 --force 在导出过程中忽略出现的SQL错误。 --default-character-set 设置默认字符集,默认值为utf8 --max_allowed_packet 服务器发送和接受的最大包长度。 --compress, -C 在客户端和服务器之间启用压缩传递所有信息 --flush-logs 开始导出之前刷新日志。请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。
在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。 --flush-privileges 导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。 --set-charset 添加'SET NAMES default_character_set'到输出文件。默认为打开状态,使用--skip-set-charset关闭选项。

--net_buffer_length  TCP/IP和socket连接的缓存大小。


--lock-tables, -l 开始导出前,锁定所有表。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。
用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。
请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。


--lock-all-tables, -x 提交请求锁定所有数据库中的所有表,以保证数据的一致性。
这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。
mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables
--add-locks 在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)

 

 

--quote-names,-Q 使用(`)引起表和列名。默认为打开状态,使用--skip-quote-names取消该选项。
--quick, -q 不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。
--opt 等同于--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 该选项默认开启, 可以用--skip-opt禁用.
--compact 导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys

 


备份并压缩与解压并导入:

# 备份并压缩:

shell>> mysqldump -hhostname  -P3306  -uusername -ppassword --single-transaction --master-data=2 --databases db_name | gzip > my.sql.gz  

# 解压并导入:

shell
>> gunzip < my.sql.gz | mysql -hhostname -P3306 -uusername -ppassword db_name

 

 

mysqldump默认情况下会加上–opt这个参数,该参数是一个综合参数,解释如下:

--opt Same as --add-drop-table, --add-locks, --create-options,
--quick, --extended-insert, --lock-tables, --set-charset,
and --disable-keys. Enabled by default, disable with
--skip-opt.

其中--lock-tables的解释如下:

-l, --lock-tables Lock all tables for read.
(Defaults to on; use --skip-lock-tables to disable.)

所以一定要注意,在用mysqldump导出数据时,不能使用默认配置,一定要加上--skip-opt


为了保证blob/text字段可以导出,指定--max-allowed-packet

为了保证utf8mb4字段导出不乱码,指定--default-character-set=utf8mb4

建议用如下脚本备份:

mysqldump --skip-opt --single-transaction --quick --add-drop-table --extended-insert --disable-keys  --set-charset --default-character-set=utf8mb4 --max-allowed-packet=1073741824  -R  --create-options --databases consult expert portal > $DUMP_PATH/consult_expert_portal.sql

 ##

 

##########################################