首页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
- 如果mysqldump没有设置为环境变量,请切换到bin目录(我的在:C:\Program Files\MySQL\MySQL Server 8.0\bin)
- 如果是windows系统,要使用.\mysqlpump, 直接使用会报错:找不到命令 mysqldump,但它确实存在于当前位置。
- 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”的错误。