首页Mysql数据的导入与导出
Created At : 2021-11-14

Mysql数据的导入与导出

数据的导入或导出有多种方式,一些可视化的工具都有数据导入导出的功能,如Navicat 和 DBeaver。

本章节主要介绍命令行的方法,或同ssh连接远程Mysql进行数据的导入和导出。

数据导出

使用MySQLdump命令导出

MySQLdump是MySQL提供的一个非常有用的数据库备份工具。

MySQLdump命令执行时,可以将数据库备份成一个文本文件,该文件中实际包含了多个CREATE和INSERT语句,使用这些语句可以重新创建表和插入数据。

语法格式:

mysqldump -u username -h host -p dbname [tbname ...]> filename.sql

# username:表示用户名称;
# host: 登录用户的主机名称
# dbname:表示需要备份的数据库名称;
# tbname:表示数据库中需要备份的数据表,可以指定多个数据表。省略该参数时,会备份整个数据库;
# 右箭头“>”:用来告诉 mysqldump 将备份数据表的定义和数据写入备份文件;
# filename.sql:表示备份文件的名称,文件名前面可以加绝对路径。通常将数据库备份成一个后缀名为.sql的文件。

TIP

  1. 如果mysqldump没有设置为环境变量,请切换到bin目录(我的在:C:\Program Files\MySQL\MySQL Server 8.0\bin)
  2. 如果是windows系统,要使用.\mysqlpump, 直接使用会报错:找不到命令 mysqldump,但它确实存在于当前位置。
  3. filename.sql最好是绝对路径,并确保有文件创建权限。

准备数据库

之前我们安装mysql的时候,有个默认的示例数据库world,我们就是备份world数据库的所有表为例进行测试。

# 先查询一下world数据库
MySQL root@localhost:db_test_import> USE world;
MySQL root@localhost:world> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city            |
| country         |
| countrylanguage |
+-----------------+

使用mysqldump导出

切换到终端:

PS C:\Program Files\MySQL\MySQL Server 8.0\bin> .\mysqldump -hlocalhost -uroot -p123456 world > world.sql

执行完毕,可以看到在bin目录已经生成了world.sql文件**,部分内容如下:**

- MySQL dump 10.13  Distrib 8.0.27, for Win64 (x86_64)
--
-- Host: localhost    Database: world
-- ------------------------------------------------------
-- Server version	8.0.27

/*!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 */;
/*!50503 SET NAMES utf8mb4 */;
/*!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 `city`
--

DROP TABLE IF EXISTS `city`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `city` (
  `ID` int NOT NULL AUTO_INCREMENT,
  `Name` char(35) NOT NULL DEFAULT '',
  `CountryCode` char(3) NOT NULL DEFAULT '',
  `District` char(20) NOT NULL DEFAULT '',
  `Population` int NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`),
  KEY `CountryCode` (`CountryCode`),
  CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `country` (`Code`)
) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `city`
--

里面主要是创建表和insert into语句。

备份多个数据库

# 使用 --database 选项即可,多个数据库用空格隔开。
# 使用--all-databases 选项可以备份系统中所有的数据库,不需要指定数据库名称。(不推荐使用,可能会很耗时)

数据导入

登录数据库

# 连接本地数据库进行测试
mysql -hlocalhost -uroot -p

创建一个测试数据库db_test_import

MySQL root@localhost:none> CREATE DATABASE db_test_import;
Query OK, 1 row affected
Time: 0.016s
MySQL root@localhost:none> USE db_test_import;
You are now connected to database "db_test_import" as user "root"
Time: 0.001s

导入数据

我们使用上面导出的world.sql进行测试,将其导入到 db_test_import数据库。

⚡ 导入语法有两种,一种是source,一种是mysql

使用mysql 命令导入

语法:

# 语法
mysql -u username -p new_database < data-dump.sql

# username 是执行data-dump.sql中语句的用户名;
# -p表示输入用户密码;
# new_database 是数据库名,必须事先创建号改数据库;
# 如果data-dump.sql 中已经包含了创建数据库的语句,不需要执行数据库名

操作演示:

 .\mysql -h localhost -u root -p db_test_import < .\world.sql

WARNING

不幸的是,如果是windows powershell 或cmd下,无法识别 <命令。

使用source命令导入数据

如果已经登录了mysql数据库服务器,推荐使用source命令。

source filename.sql
# 执行source命令前,必须使用use语句选择数据库。
# 不然,恢复过程中会出现“ERROR 1046 (3D000): No database selected”的错误。