使用mysqldump 导出数据时的常用选项

前面两篇博客
MySQL导入导出数据库
mysqldump 如何导出表的部分数据

已经介绍了mysqldump的基本用法。

本文主要介绍在使用mysqldump时常用的选项。

–single-transaction

该选项保证数据导出的一致性:

--single-transaction 

这里的一致性是指在导出过程中读到的数据是一个快照。

该选项会将隔离级别设置为REPEATABLE READ,随后执行START TRANSACTION开启一个事务,让整个数据在dump过程中保证数据的一致性。这个操作不会锁表,适用于支持事务的数据库引擎,例如InnoDB等,但是这个不能保证MyISAM表和MEMORY表的数据一致性。

为了确保使用--single-transaction命令时,保证dump文件的有效性。
需没有下列语句LTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE,因为一致性读不能隔离上述语句。

–set-gtid-purged=OFF

不加这个选项,导出SQL文件中会多出几行关于binlog记录的SQL:

SET @@SESSION.SQL_LOG_BIN=0;
SET @@GLOBAL.GTID_PURGED='';

当在新主库上执行刚才导出的SQL文件时,不记录binlog,不记录GTID,是不利于主从复制的。也就是说,这个数据只会导入到主库,

下面对加不加这个参数的差别进行测试。

以下测试中MySQL GTID是打开的:

mysql> set global ENFORCE_GTID_CONSISTENCY=on;
Query OK, 0 rows affected (0.00 sec)

mysql> set global gtid_mode=OFF_PERMISSIVE;
Query OK, 0 rows affected (0.00 sec)

mysql> set global gtid_mode=ON_PERMISSIVE;
Query OK, 0 rows affected (0.00 sec)

mysql> set global gtid_mode=ON;
Query OK, 0 rows affected (0.00 sec)

不加 --set-gtid-purged=OFF

导出数据:

mysqldump -u root -pAa123456 --single-transaction test test5 >test5.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.

导出的test5.sql文件:

-- MySQL dump 10.13  Distrib 5.7.23, for macos10.13 (x86_64)
--
-- Host: localhost    Database: test
-- ------------------------------------------------------
-- Server version	5.7.23

/*!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 */;
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='';

--
-- Table structure for table `test5`
--

DROP TABLE IF EXISTS `test5`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test5` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `age` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0:yes, -1:no',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `test5`
--

LOCK TABLES `test5` WRITE;
/*!40000 ALTER TABLE `test5` DISABLE KEYS */;
INSERT INTO `test5` VALUES (1,'John',3),(7,'Alex',2),(8,'Bob',3),(9,'Kirk',12),(10,'Kim',11),(11,'Sam',12),(12,'Mark',13);
/*!40000 ALTER TABLE `test5` ENABLE KEYS */;
UNLOCK TABLES;
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
/*!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-10-30 22:11:36

加上 --set-gtid-purged=OFF

导出命令:

mysqldump -u root -pAa123456 --single-transaction --set-gtid-purged=OFF test test5 >test5_gtid_purged.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

导出的文件test5_gtid_purged.sql

-- MySQL dump 10.13  Distrib 5.7.23, for macos10.13 (x86_64)
--
-- Host: localhost    Database: test
-- ------------------------------------------------------
-- Server version	5.7.23

/*!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 */;

--
-- Table structure for table `test5`
--

DROP TABLE IF EXISTS `test5`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test5` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  `age` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0:yes, -1:no',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `test5`
--

LOCK TABLES `test5` WRITE;
/*!40000 ALTER TABLE `test5` DISABLE KEYS */;
INSERT INTO `test5` VALUES (1,'John',3),(7,'Alex',2),(8,'Bob',3),(9,'Kirk',12),(10,'Kim',11),(11,'Sam',12),(12,'Mark',13);
/*!40000 ALTER TABLE `test5` ENABLE KEYS */;
UNLOCK TABLES;
/*!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-10-30 22:18:43

对比下这两个文件,可以看出差别:
在这里插入图片描述左边是不加的,右边的加的。

不加选项的,会多出两行:

SET @@SESSION.SQL_LOG_BIN=0;
SET @@GLOBAL.GTID_PURGED='';

其他常用选项

--max_allowed_packet=xxx

服务器发送和接受的最大包长度。
例如,1G

--default-character-set=xxx

设置默认字符集,默认值为utf8。
例如,utf8mb4

--net_buffer_length=xxx

client/server通信的初始缓存大小,单位字节。
例如,1024

mysqldump常用方式

mysqldump -h xxxx -u xx -p xxx --single-transaction  --max_allowed_packet=1G  --default-character-set=utf8mb4  --set-gtid-purged=OFF --net_buffer_length=16535  cmdb   > cmdb.sql

参考

mysqldump — A Database Backup Program

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
导出MySQL数据库中的数据,有几种方法可以选择。其中一种方法是使用命令行。首先,打开命令提示符,并进入到MySQL的安装目录。接下来,使用以下命令导出数据: ``` mysqldump -u [用户名 -p [数据库名 > [保存路径] ``` 其中,[用户名]是你的MySQL用户名,[数据库名]是要导出数据库名,[保存路径]是你想要保存导出数据的文件路径。运行这个命令后,系统会提示你输入密码,输入正确的密码后,数据就会被导出到指定的路径中。 另一种方法是使用phpMyAdmin,它是一个用于管理MySQL数据库的web工具。首先,打开phpMyAdmin,并登录到web数据库管理后台。然后,找到要导出数据库,点击导出选项。在导出选项中,选择导出格式为sql文件,并选择保存路径。完成设置后,点击确认即可导出数据。需要注意的是,如果数据库文件过大,可能会导致导出失败,因为MySQL导出文件大小有限制。 还有其他一些方法可以导出MySQL数据库,但以上是最常用的三种方法。希望这些方法能在你需要转移或打包数据库提供帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL命令行导入导出数据库步骤操作](https://download.csdn.net/download/qq_37647812/88226657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [如何导出mysql数据库](https://blog.csdn.net/dexunjiaqiang/article/details/125295589)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值