大家好,欢迎来到IT知识分享网。
🎯导出数据
1、使用 SELECT … INTO OUTFILE 语句导出数据
- SELECT…INTO OUTFILE 是 MySQL 用于导出数据的语句,它允许将查询结果保存到指定的文件中。
SELECT column1, column2, ... INTO OUTFILE 'file_path' FIELDS TERMINATED BY 'field_separator' ENCLOSED BY 'field_encloser' LINES TERMINATED BY 'line_separator' FROM table_name;
column1, column2, ...
:要导出的列名。INTO OUTFILE 'file_path'
:指定导出数据时要保存到的文件路径。FIELDS TERMINATED BY 'field_separator'
:指定字段之间的分隔符,默认为逗号(,)。ENCLOSED BY 'field_encloser'
:指定字段的包围字符,默认为双引号(”)。LINES TERMINATED BY 'line_separator'
:指定行之间的分隔符,默认为换行符(\n)。table_name
:要导出数据的表名。
以下是一个示例:
SELECT id, name, email INTO OUTFILE '/tmp/users.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM users;
从名为 users 的表中选择 id、name 和 email 列,并将结果保存到 /tmp/users.txt 文件中。文件中的每一行都包含一个记录,记录中的字段以逗号分隔,并用双引号包围。行之间用换行符分隔。
注意:
- 执行 SELECT … INTO OUTFILE 语句导出数据,可能回报一下错误
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
原因:
- 执行语句
show global variables like '%secure_file_priv%';
- 查看结果
+------------------+-----------------------------------------+ | Variable_name | Value | +------------------+-----------------------------------------+ | secure_file_priv | D:\work\mysql\MySQL-Server-8.0\Uploads\ | +------------------+-----------------------------------------+
- secure_file_priv参数用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录。
- secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
- secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
- secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。
- secure_file_priv 参数是只读参数,不能使用set global命令修改。
解决:
- 查看MySQL服务器的配置文件(通常是my.cnf或my.ini),确保–secure-file-priv选项被设置。
- 如果以上选项未被设置,可以将secure_file_priv参数添加到MySQL服务器的配置文件中,并重新启动MySQL服务器。
演示:
- 执行语句
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | product | | sys | | xj | +--------------------+ 6 rows in set (0.00 sec) mysql> use product; Database changed mysql> show tables; +-------------------+ | Tables_in_product | +-------------------+ | emp | | emp_log | | goods | | order_for_goods | | person_table | | sequence | | test_transaction | | text_alter | | text_copy | | text_null | | text_table | | text_table2 | | users | +-------------------+ 13 rows in set (0.00 sec) mysql> SELECT * -> INTO OUTFILE 'D:/work/mysql/MySQL-Server-8.0/Uploads/emp.sql' -> FIELDS TERMINATED BY ',' -> ENCLOSED BY '"' -> LINES TERMINATED BY '\n' -> FROM emp; Query OK, 15 rows affected (0.00 sec)
- 查看结果
2、使用 mysqldump 导出 SQL 格式的数据(用于实现数据库的备份策略)
- 这是一个在命令行下执行的MySQL数据库备份命令。该命令使用mysqldump工具将名为product的数据库备份到一个名为product.sql的文件中。
mysqldump -uxiaojian -proot product > D:\work\mysql\MySQL-Server-8.0\Uploads\product.sql
mysqldump
: 这是一个用于创建MySQL数据库备份的工具。-u
: 用于指定数据库用户名,这里为xiaojian。-p
: 用于提示输入数据库密码,这里为root。product
: 这是要备份的数据库名。>
: 将输出重定向到D:\work\mysql\MySQL-Server-8.0\Uploads\product.sql文件中。- 注意执行这个命令需要在MySQL服务器上执行,并且执行者需要具有对product数据库的读取权限。
- 演示执行命令
- 查看导出的备份文件
- 整个数据库(product)的数据内容
-- MySQL dump 10.13 Distrib 5.7.28, for Win64 (x86_64) -- -- Host: localhost Database: product -- ------------------------------------------------------ -- Server version 8.0.33 /*!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 `emp` -- DROP TABLE IF EXISTS `emp`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `emp` ( `id` int NOT NULL AUTO_INCREMENT, `sex` int DEFAULT NULL, `user_name` varchar(15) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, `salary` decimal(10,2) DEFAULT NULL, `join_time` datetime DEFAULT NULL, `department` int DEFAULT NULL, `address` varchar(255) DEFAULT NULL, `text` char(255) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, KEY `idx_name_salary` (`user_name`,`salary`) ) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `emp` -- LOCK TABLES `emp` WRITE; /*!40000 ALTER TABLE `emp` DISABLE KEYS */; INSERT INTO `emp` VALUES (1,1,'郭成龙',1800.90,'2023-06-07 00:00:00',1,NULL,NULL),(2,1,'小王',3600.89,'2023-05-02 00:00:00',2,NULL,NULL),(3,0,'马成虫',1000.10,'2023-01-08 00:00:00',2,NULL,NULL),(4,1,'老狗',1100.90,'2023-04-07 00:00:00',3,NULL,NULL),(5,0,'臭弟弟',4500.99,'2023-03-14 00:00:00',1,NULL,NULL),(6,1,'小李',2500.10,'2023-03-14 00:00:00',1,NULL,NULL),(7,0,'陈二狗',2500.90,'2023-03-14 00:00:00',3,NULL,NULL),(15,1,'郭成龙',1800.90,'2023-06-07 00:00:00',1,NULL,NULL),(16,1,'小王',3600.89,'2023-05-02 00:00:00',2,NULL,NULL),(17,0,'马成虫',1000.10,'2023-01-08 00:00:00',2,NULL,NULL),(18,1,'老狗',1100.90,'2023-04-07 00:00:00',3,NULL,NULL),(19,0,'臭弟弟',4500.99,'2023-03-14 00:00:00',1,NULL,NULL),(20,1,'小李',2500.10,'2023-03-14 00:00:00',1,NULL,NULL),(21,0,'陈二狗',2500.90,'2023-03-14 00:00:00',3,NULL,NULL),(22,0,'二狗',NULL,'2023-06-09 11:18:55',NULL,NULL,' CSDN'); /*!40000 ALTER TABLE `emp` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `emp_log` -- DROP TABLE IF EXISTS `emp_log`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `emp_log` ( `id` int NOT NULL, `name` char(10) NOT NULL DEFAULT '', `date` datetime NOT NULL, `signin` tinyint NOT NULL DEFAULT '0' COMMENT '登录次数', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `emp_log` -- LOCK TABLES `emp_log` WRITE; /*!40000 ALTER TABLE `emp_log` DISABLE KEYS */; INSERT INTO `emp_log` VALUES (1,'张三','2023-06-22 15:25:33',1),(2,'张三','2023-06-20 15:25:47',3),(3,'王五','2023-06-19 15:26:02',2),(4,'弟弟','2023-06-07 15:26:14',4),(5,'二狗','2023-06-11 15:26:40',4),(6,'二狗','2023-06-04 15:26:54',2); /*!40000 ALTER TABLE `emp_log` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `goods` -- DROP TABLE IF EXISTS `goods`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `goods` ( `id` int NOT NULL AUTO_INCREMENT, `category_id` int DEFAULT NULL, `category` varchar(15) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, `name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL, `price` decimal(10,2) DEFAULT NULL, `stock` int DEFAULT NULL, `upper_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `goods` -- LOCK TABLES `goods` WRITE; /*!40000 ALTER TABLE `goods` DISABLE KEYS */; INSERT INTO `goods` VALUES (1,1,'女装/女士精品','T恤',39.90,1000,'2020-11-10 00:00:00'),(2,1,'女装/女士精品','连衣裙',79.90,2500,'2020-11-10 00:00:00'),(3,1,'女装/女士精品','卫衣',89.90,1500,'2020-11-10 00:00:00'),(4,1,'女装/女士精品','牛仔裤',89.90,3500,'2020-11-10 00:00:00'),(5,1,'女装/女士精品','百褶裙',29.90,500,'2020-11-10 00:00:00'),(6,1,'女装/女士精品','呢绒外套',399.90,1200,'2020-11-10 00:00:00'),(7,2,'户外运动','自行车',399.90,1000,'2020-11-10 00:00:00'),(8,2,'户外运动','山地自行车',1399.90,2500,'2020-11-10 00:00:00'),(9,2,'户外运动','登山杖',59.90,1500,'2020-11-10 00:00:00'),(10,2,'户外运动','骑行装备',399.90,3500,'2020-11-10 00:00:00'),(11,2,'户外运动','运动外套',799.90,500,'2020-11-10 00:00:00'),(12,2,'户外运动','滑板',499.90,1200,'2020-11-10 00:00:00'),(15,1,'女装/女士精品1','连衣裙1',40.90,2500,'2020-11-10 00:00:00'); /*!40000 ALTER TABLE `goods` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `order_for_goods` -- DROP TABLE IF EXISTS `order_for_goods`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `order_for_goods` ( `order_id` int NOT NULL AUTO_INCREMENT, `user_id` int DEFAULT NULL, `money` decimal(10,2) DEFAULT NULL, `quantity` int DEFAULT NULL, `join_time` datetime DEFAULT NULL, PRIMARY KEY (`order_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `order_for_goods` -- LOCK TABLES `order_for_goods` WRITE; /*!40000 ALTER TABLE `order_for_goods` DISABLE KEYS */; INSERT INTO `order_for_goods` VALUES (65,1001,1800.90,1,'2023-06-07 00:00:00'),(66,1001,3600.89,5,'2023-05-02 00:00:00'),(67,1001,1000.10,6,'2023-01-08 00:00:00'),(68,1002,1100.90,9,'2023-04-07 00:00:00'),(69,1002,4500.99,1,'2023-03-14 00:00:00'),(70,1003,2500.10,3,'2023-02-14 00:00:00'),(71,1002,2500.90,1,'2023-03-14 00:00:00'),(72,1003,2500.90,1,'2022-12-12 00:00:00'),(73,1003,2500.90,2,'2022-09-08 00:00:00'),(74,1003,6000.90,8,'2023-01-10 00:00:00'); /*!40000 ALTER TABLE `order_for_goods` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `person_table` -- DROP TABLE IF EXISTS `person_table`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `person_table` ( `first_name` char(20) COLLATE utf8mb4_unicode_ci NOT NULL, `last_name` char(20) COLLATE utf8mb4_unicode_ci NOT NULL, `sex` char(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`last_name`,`first_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `person_table` -- LOCK TABLES `person_table` WRITE; /*!40000 ALTER TABLE `person_table` DISABLE KEYS */; INSERT INTO `person_table` VALUES ('Thomas','Jay',NULL),('csdn','mr.xiao',NULL); /*!40000 ALTER TABLE `person_table` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `sequence` -- DROP TABLE IF EXISTS `sequence`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `sequence` ( `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, `current_value` int NOT NULL, `increment` int NOT NULL DEFAULT '1', PRIMARY KEY (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `sequence` -- LOCK TABLES `sequence` WRITE; /*!40000 ALTER TABLE `sequence` DISABLE KEYS */; INSERT INTO `sequence` VALUES ('seq_buz_engineering_task',1,1),('seq_buz_tender_info',2,1),('TestSeq',0,1); /*!40000 ALTER TABLE `sequence` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `test_transaction` -- DROP TABLE IF EXISTS `test_transaction`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `test_transaction` ( `id` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `test_transaction` -- LOCK TABLES `test_transaction` WRITE; /*!40000 ALTER TABLE `test_transaction` DISABLE KEYS */; INSERT INTO `test_transaction` VALUES (5),(6); /*!40000 ALTER TABLE `test_transaction` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `text_alter` -- DROP TABLE IF EXISTS `text_alter`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `text_alter` ( `ids` int DEFAULT NULL, `prices` int NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `text_alter` -- LOCK TABLES `text_alter` WRITE; /*!40000 ALTER TABLE `text_alter` DISABLE KEYS */; /*!40000 ALTER TABLE `text_alter` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `text_copy` -- DROP TABLE IF EXISTS `text_copy`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `text_copy` ( `text_id` int unsigned NOT NULL AUTO_INCREMENT, `text_title` varchar(100) NOT NULL, `text_author` varchar(40) NOT NULL, `submission_date` date DEFAULT NULL, PRIMARY KEY (`text_id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb3; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `text_copy` -- LOCK TABLES `text_copy` WRITE; /*!40000 ALTER TABLE `text_copy` DISABLE KEYS */; INSERT INTO `text_copy` VALUES (1,'安徒生童话','臭弟弟','2023-06-16'),(2,'小天鹅与丑小鸭','你才是臭弟弟','2023-06-16'),(3,'西游记','我不是臭弟弟','2023-06-16'),(5,'csdn','作者','2023-06-19'),(6,'测试','text','2023-06-19'); /*!40000 ALTER TABLE `text_copy` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `text_null` -- DROP TABLE IF EXISTS `text_null`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `text_null` ( `id` int NOT NULL, `text_title` char(10) DEFAULT NULL COMMENT '书名', `text_author` char(10) DEFAULT NULL COMMENT '作者', `price` double DEFAULT NULL COMMENT '价格', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `text_null` -- LOCK TABLES `text_null` WRITE; /*!40000 ALTER TABLE `text_null` DISABLE KEYS */; INSERT INTO `text_null` VALUES (1,'百科全书解决空值','火爆的后槽牙儿',6.66),(2,'这是一本书','小王',NULL),(3,'西游记','作者',NULL); /*!40000 ALTER TABLE `text_null` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `text_table` -- DROP TABLE IF EXISTS `text_table`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `text_table` ( `text_id` int unsigned NOT NULL AUTO_INCREMENT, `text_title` varchar(100) NOT NULL, `text_author` varchar(40) NOT NULL, `submission_date` date DEFAULT NULL, PRIMARY KEY (`text_id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb3; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `text_table` -- LOCK TABLES `text_table` WRITE; /*!40000 ALTER TABLE `text_table` DISABLE KEYS */; INSERT INTO `text_table` VALUES (1,'安徒生童话','臭弟弟','2023-06-16'),(2,'小天鹅与丑小鸭','你才是臭弟弟','2023-06-16'),(3,'西游记','我不是臭弟弟','2023-06-16'),(5,'csdn','作者','2023-06-19'),(6,'测试','text','2023-06-19'); /*!40000 ALTER TABLE `text_table` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `text_table2` -- DROP TABLE IF EXISTS `text_table2`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `text_table2` ( `text_id` int unsigned NOT NULL AUTO_INCREMENT, `text_title` varchar(100) NOT NULL, `text_author` varchar(40) NOT NULL, `submission_date` date DEFAULT NULL, PRIMARY KEY (`text_id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `text_table2` -- LOCK TABLES `text_table2` WRITE; /*!40000 ALTER TABLE `text_table2` DISABLE KEYS */; INSERT INTO `text_table2` VALUES (1,'安徒生童话','臭弟弟','2023-06-19'),(2,'小天鹅与丑小鸭','你才是臭弟弟','2023-06-19'),(3,'HPH调用','你才是臭弟弟','2023-06-19'),(4,'JAVA入门','我不是臭弟弟','2023-06-19'),(5,'水浒传','你才是臭弟弟','2023-06-19'),(6,'红楼梦','我不是臭弟弟','2023-06-19'),(7,'事实上d','d','2023-06-20'),(8,'鸟','a','2023-06-20'); /*!40000 ALTER TABLE `text_table2` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `users` -- DROP TABLE IF EXISTS `users`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `users` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `users` -- LOCK TABLES `users` WRITE; /*!40000 ALTER TABLE `users` DISABLE KEYS */; INSERT INTO `users` VALUES (1,'1',NULL),(2,'2',NULL); /*!40000 ALTER TABLE `users` 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 2023-06-23 10:25:27
总结:
如果你需要导出某个数据库的某张表的数据,可以使用以下命令:
mysqldump -uroot -proot 数据库名 表名 > D:\work\mysql\MySQL-Server-8.0\Uploads\product.sql
如果你需要导出整个数据库的数据,可以使用以下命令:
mysqldump -uroot -proot product > D:\work\mysql\MySQL-Server-8.0\Uploads\product.sql
如果需要备份所有数据库,可以使用以下命令:
mysqldump -u root -p --all-databases > D:\work\mysql\MySQL-Server-8.0\Uploads\database_dump.sql
mysqldump是MySQL提供的一个命令行工具,用于备份数据库和表。它有许多参数可以用来定制备份的各个方面。
以下是mysqldump的全部参数:
- -h, –host: 指定备份的MySQL服务器的主机名或IP地址。
- -u, –user: 指定用于连接MySQL服务器的用户名。
- -p, –password[=password]: 指定连接MySQL服务器的密码。如果在命令行中指定,将会以明文形式显示密码。
- -P [port]: 指定MySQL服务器的端口号。默认端口为3306。
- -S, –socket=[socket]: 指定与MySQL服务器通信的UNIX域套接字。
- -e, –events: 包括数据库和表的SQL事件。
- -l, –lock-tables: 在备份开始时锁定所有表。这可以确保备份过程中数据的一致性。
- -t, –no-data: 只备份表的定义(只导出表结构信息),不包括数据。
- -b, –backup: 将备份文件保存为.sql和.ini文件,其中包含备份时间和服务器配置信息。
- -B, –databases: 备份多个数据库。每个数据库之间使用分号分隔。
- -L, –lock-tables-list: 指定要锁定的表列表。多个表之间使用分号分隔。
- -b, –backup-dir: 指定备份文件的输出目录。
- -c, –compress: 在客户端和服务器之间启用压缩,可以提高备份速度和网络效率。
- -C, –add-drop-database: 在每个备份的开始处添加一个DROP DATABASE语句,以便在恢复时可以重新创建数据库。
- -C, –add-drop-table: 在每个备份的开始处添加一个DROP TABLE语句,以便在恢复时可以重新创建表。
- -C, –add-locks: 在备份中包含SELECT … FOR UPDATE语句,以锁定表以确保备份过程中数据的一致性。
- -c, –complete-inserts: 使用完整的INSERT语句进行备份,包括列名和值。这可能会导致较长的备份文件,但可以提高恢复时的准确性。
- -c, –skip-comments: 在备份文件中忽略注释行。
- –skip-set-charset: 在备份文件中跳过设置字符集的语句。
- -f, –force: 强制进行备份,即使存在错误或警告。
- –hex-blob: 将二进制数据以十六进制格式进行备份,以避免字符编码问题。
- -a, –no-create-info: 在备份中省略表结构的CREATE TABLE语句,只包含数据行的INSERT语句。
- –skip-triggers: 忽略备份中的触发器信息。
- –all: 备份所有数据库和表。
- –single-transaction: 在备份过程中使用单个事务,以确保数据的一致性。
- –master-data=[log_file_name[,log_pos]]: 在备份中包含主从信息,以便在恢复时可以复制到从数据库中。log_file_name和log_pos是可选参数,用于指定二进制日志文件和位置信息。
- –slave-data: 在备份中包含从数据库的信息,以便在恢复时可以复制到主数据库中。
- –no-slave: 禁用从数据库的备份选项。
- –create-db: 在备份中包含创建数据库的语句。
- –no-create-db: 在备份中省略创建数据库的语句。
- –drop-db: 在备份中包含删除数据库的语句。
- –no-drop-db: 在备份中省略删除数据库的语句。
- –skip=table_type: 排除指定类型的表进行备份,例如:–skip=binary,–skip=partitioned,–skip=csv。
- –quote-names: 使用反引号(“)而不是下划线(_)来引用表名和列名。
- –skip-opt: 禁用优化选项,可能会导致较慢的备份速度和较大的备份文件大小。
- –quick: 使用“quick”选项进行备份,避免将整个表加载到内存中,从而提高备份速度和减少内存使用情况。
- –max_allowed_packet: 指定最大允许的包大小,以字节为单位。用于避免大表备份时的内存问题。
- –net_buffer_length: 指定网络缓冲区长度,以字节为单位。用于控制服务器和客户端之间的数据传输速度和缓冲区大小。
- -v: –verbose: 详细输出备份过程,包括进度和错误信息。
- -q: –quick: 使用快速导出模式,减少导出时间。
- -m: –master[=MASTER]: 主服务器信息 (用于主从复制)。
- -r: –result-file=FILE: 将导出文件写入指定的文件名或路径。
- –tab=TAB: 使用tab分割的文本格式导出表数据。
- -c: –compress: 使用压缩算法来减少导出文件的大小。
- -C: –csv: 将导出文件格式化为CSV格式。
- -F: –flush: 在导出之前刷新表和数据库的缓存。
- -f: –force: 强制执行备份操作,即使出现错误也继续进行。
- -R: –routines: 导出存储过程和存储函数。
- -n: –skip-locking: 跳过表锁定,减少备份时间。
- –skip-comments: 跳过注释,减少导出文件的大小。
- –default-character-set=CHARSET: 指定导出的字符集 (默认为utf8)。
- –tag=TAG: 为备份文件添加标签 (用于多个备份文件)。
- –order-by-primary: 根据主键对表数据进行排序,提高导出效率。
- 等……
注意:这些参数可以在命令行中使用,也可以在配置文件中进行配置,以满足不同的备份需求
3、将数据表及数据库拷贝至其他主机
说明:
要将MySQL数据表和数据库复制到另一个主机上,可以遵循以下步骤
1、在源主机上备份数据:使用以下命令备份整个数据库或特定的数据表:
mysqldump -u username -p dbname > backupfile.sql
其中,username是数据库用户名,dbname是要备份的数据库名称,backupfile.sql是备份文件的名称。
也可以使用–all-databases选项备份所有数据库:
mysqldump -u username -p --all-databases > backupfile.sql
2、将备份文件传输到目标主机:也可以使用任何文件传输工具,将备份文件传输到目标主机上。
3、在目标主机上恢复数据:使用以下命令将备份文件恢复到目标主机上:
mysql -u username -p dbname < backupfile.sql
也可以使用以下命令将导出的数据直接导入到远程的服务器上,但请确保两台服务器是相通的,是可以相互访问的:
mysqldump -u root -p database_name \ | mysql -h other-host.com database_name
mysqldump是一个用于备份MySQL数据库的工具,而mysql是用于恢复或导入数据到MySQL数据库的工具。在这个命令中,我们将使用mysqldump备份数据库,然后将备份文件通过管道符号|发送给mysql命令,以便在另一个主机上恢复数据库。
具体来命令的参数解释如下:
- mysqldump -u root -p database_name: 备份名为database_name的数据库,使用root用户登录,并在备份时提示输入密码。
- |: 管道符号,将前面的输出作为后面的输入。
- mysql -h other-host.com database_name: 在名为other-host.com的主机上恢复名为database_name的数据库。
综上所述,这个命令将在源主机上备份名为database_name的数据库,然后将备份文件通过管道发送给目标主机上的mysql命令,以便在该主机上恢复相同的数据库。
🎯导入数据
1、mysql 命令导入
- 使用 MySQL 命令导入语法格式
mysql -u用户名 -p密码 数据库名称 < 要导入的数据库数据(product.sql)
- 举例如:有一个名为 product.sql 的文件,将 product.sql 中的建表语句和数据,导入到名为 xj 的数据库中。可以使用以下命令导入数据。
mysql -u xiaojian -p xj < D:/work/mysql/MySQL-Server-8.0/Uploads/product.sql
以上命令会将备份的整个数据库 product.sql 导入。
- 执行结果
2、source 命令导入
- 确保您已经将数据保存在一个 SQL 文件中,例如 product.sql。
- 打开一个 MySQL 命令行客户端,并连接到相应的 MySQL 服务器。
- 在 MySQL 命令行客户端中,使用 USE 命令选择要导入数据的数据库
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | product | | sys | | xj | +--------------------+ 6 rows in set (0.00 sec) mysql> use xj; Database changed mysql> show tables; Empty set (0.00 sec)
- 执行导入语句
source D:/work/mysql/MySQL-Server-8.0/Uploads/product.sql
- 查看结果
3、使用 LOAD DATA 导入数据
- 将本地文件D:/work/mysql/MySQL-Server-8.0/Uploads/goods.txt中的数据导入到MySQL数据库中的goods表
- MySQL中提供了LOAD DATA INFILE语句来插入数据。 从目录中读取文件 goods.txt ,将该文件中的数据插入到当前数据库的 goods 表中。
- 如果指定LOCAL关键词,则表明从客户主机上按路径读取文件。如果没有指定,则文件在服务器上按路径读取文件。
LOAD DATA LOCAL INFILE 'D:/work/mysql/MySQL-Server-8.0/Uploads/goods.txt' INTO TABLE goods FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
- LOAD DATA LOCAL INFILE ‘D:/work/mysql/MySQL-Server-8.0/Uploads/goods.txt’: 这部分指定了要导入的文件的路径和文件名。
- INTO TABLE goods: 这部分指定了要将数据导入到哪个表中,这里是goods表。
- FIELDS TERMINATED BY ‘,’: 这部分指定了字段之间的分隔符,这里使用逗号作为分隔符。
- ENCLOSED BY ‘”‘: 这部分指定了字段值的引用符,这里使用双引号作为引用符。
- LINES TERMINATED BY ‘\n’: 这部分指定了行之间的分隔符,这里使用回车换行符作为分隔符。
- 导入的数据文本goods.txt格式
"1","1","女装/女士精品","T恤","39.90","1000","2020-11-10 00:00:00" "3","1","女装/女士精品","卫衣","89.90","1500","2020-11-10 00:00:00" "5","1","女装/女士精品","百褶裙","29.90","500","2020-11-10 00:00:00" "7","2","户外运动","自行车","399.90","1000","2020-11-10 00:00:00" "9","2","户外运动","登山杖","59.90","1500","2020-11-10 00:00:00" "11","2","户外运动","运动外套","799.90","500","2020-11-10 00:00:00" "15","1","女装/女士精品1","连衣裙1","40.90","2500","0000-00-00 00:00:00"
错误:
- 这个错误提示意味着正在尝试加载本地数据,但是 MySQL 服务器禁用了这个功能。
ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
ERROR 3948(42000):加载本地数据已被禁用;必须在客户端和服务器端同时启用此功能。
解决:
- 确保 MySQL 服务器已经启动并且可以访问。
- 打开一个 MySQL 命令行客户端,并连接到相应的 MySQL 服务器。
- 在 MySQL 命令行客户端中,执行以下命令来启用加载本地数据的功能。
SET GLOBAL local_infile = ON;
- 重新运行您的 SQL 脚本,应该能够成功导入本地数据。
4、使用 mysqlimport 导入数据
- 基本语法
mysqlimport [options] db_name file_name
db_name是要导入数据的数据库名称,file_name是包含数据的文件名。options是可选的参数,用于指定一些导入选项。
- 使用mysqlimport 命令指定选项来设置指定格式导入
mysqlimport -u xiaojian -p --local --fields-terminated-by="," --lines-terminated-by="\n" xj D:/work/mysql/MySQL-Server-8.0/Uploads/goods.txt
- 导入的数据文本goods.txt格式
1,1,女装/女士精品,T恤,39.90,1000,2020-11-10 00:00:00 3,1,女装/女士精品,卫衣,89.90,1500,2020-11-10 00:00:00 5,1,女装/女士精品,百褶裙,29.90,500,2020-11-10 00:00:00 7,2,户外运动,自行车,399.90,1000,2020-11-10 00:00:00 9,2,户外运动,登山杖,59.90,1500,2020-11-10 00:00:00 11,2,户外运动,运动外套,799.90,500,2020-11-10 00:00:00 15,1,女装/女士精品1,连衣裙1,40.90,2500,0000-00-00 00:00:00
- 关于MySQL导入选项说明。
--print-defaults
:打印程序参数列表并退出。--no-defaults
:除了登录文件外,不要从任何选项文件中读取默认选项。--defaults-file=#
:只从给定的文件#中读取默认选项。--defaults-extra-file=#
:在全局文件读取之后读取该文件。--defaults-group-suffix=#
:同时从带有连接组和后缀的组中读取。--login-path=#
:从登录文件中读取此路径。--bind-address=name
:绑定到IP地址。--character-sets-dir=name
:字符集文件目录。--default-character-set=name
:设置默认字符集。-c
,--columns=name
:只使用这些列将数据导入。以逗号分隔列名列表。-C
,--compress
:在服务器/客户端协议中使用压缩。-#
,--debug[=#]
:非调试版本。捕获并退出。--debug-check
:非调试版本。捕获并退出。--debug-info
:非调试版本。捕获并退出。--default-auth=name
:默认的客户端侧身份验证插件。-d
,--delete
:首先删除表中的所有行。--enable-cleartext-plugin
:启用/禁用明文身份验证插件。--fields-terminated-by=name
:输入文件中的字段以给定字符串终止。--fields-enclosed-by=name
:导入文件中的字段由给定字符封闭。--fields-optionally-enclosed-by=name
:输入文件中的字段可选择地由给定字符封闭。--fields-escaped-by=name
:字段在输入文件中由给定字符转义。-f
和--force
:即使遇到 SQL 错误,也要继续执行。-?
和--help
:显示帮助信息并退出。-h
和--host=name
:连接到的主机名。-i
和--ignore
:如果发现重复的唯一键,则保留旧行。--ignore-lines=#
:忽略数据文件中的前 n 行。--lines-terminated-by=name
:输入文件中的行以给定字符串终止。-L
和--local
:通过客户端读取所有文件。-l
和--lock-tables
:锁定所有表以进行写入(这将禁用线程)。--low-priority
:使用 LOW_PRIORITY 更新表时使用。-p
和--password[=name]
:连接服务器时使用的密码。如果未指定密码,则从终端询问。-W
和--pipe
:使用命名管道连接到服务器。--plugin-dir=name
:客户端插件的目录。-P
和--port=#
:用于连接的端口号,或者优先顺序为 my.cnf、$MYSQL_TCP_PORT、/etc/services 和内置默认值(3306)中的默认端口号。--protocol=name
:用于连接的协议(tcp、socket、pipe、memory)。-r
和--replace
:如果发现重复的唯一键,则替换旧行。--secure-auth
:如果客户端使用旧版(4.1.1 之前)协议,则拒绝连接到服务器。已过时。始终为 TRUE。--shared-memory-base-name=name
:共享内存的基名称。-s
和--silent
:更加沉默。-S
和--socket=name
:用于连接的套接字文件。--ssl-mode=name
:SSL 连接模式。--ssl
:已过时。请使用--ssl-mode
代替。--ssl-verify-server-cert
:已过时。请使用--ssl-mode=VERIFY_IDENTITY
代替。--ssl-ca=name
:CA 文件,以 PEM 格式。--ssl-capath=name
:CA 目录。--ssl-cert=name
:X509 证书,以 PEM 格式。--ssl-cipher=name
:要使用的SSL密码。--ssl-key=name
:X509密钥,以PEM格式。--ssl-crl=name
:证书撤销列表。--ssl-crlpath=name
:证书撤销列表路径。--tls-version=name
:要使用的TLS版本,允许的值有:TLSv1、TLSv1.1、TLSv1.2。--server-public-key-path=name
:服务器公共RSA密钥的文件路径,以PEM格式。--get-server-public-key
:获取服务器公共密钥。--use-threads=#
:并行加载文件的线程数。-u,--user=name
:用于登录的用户,如果不是当前用户。-v,--verbose
:打印各个阶段的信息。-V,--version
:输出版本信息并退出。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/158568.html