共计 7396 个字符,预计需要花费 19 分钟才能阅读完成。
在日常的数据库保护工作中,常常须要对数据库进行导入导出操作,备份、剖析、迁徙数据都须要用到导入导出性能,在本教程中将具体解说所有常见的 MySQL 和 MariaDB 中导入导出数据的办法(留神:MySQL 和 MariaDB 两个数据库操作命令一样,能够调换。)
本教程将具体解说
1. MySQL / MariaDB 数据库数据「导出」
(1)应用 mysqldump
间接导出数据至 SQL 文件
(2)阿里云 / 腾讯云近程服务器中的数据库间接导出到本地计算机
(3)应用 into outfile
命令导出数据至 CSV / Excel
提醒:如果你正在寻找数据迁徙计划,请查看我写的的另一篇专门针对 MySQL 数据迁徙的教程,教程中蕴含腾讯云、阿里云迁徙实战。
2. MySQL / MariaDB 数据库数据「导入」
(1)将 SQL 文件导入至 MySQL / MariaDB 数据库中
(2)应用 source
导入数据库 SQL 文件
(3)将 CSV / Excel 文件 导入至 MySQL / MariaDB 数据库中
3. 应用「卡拉云」一键导入导出 MySQL / MariaDB 数据
如何应用卡拉云,5 分钟搭建一套适应本人工作流的一键导入导出数据库系统。卡拉云无需部署,即插即用,可依据需要灵便调配,实用于后端工程师疾速搭建企业外部零碎、数据产品经理查看剖析数据,数据分析师依据需要疾速搭建数据共享平台分享给组内同学协同查看等利用场景。点这里看详情。
4. 先决条件
追随本教程学习如何导入导出 MySQL 或 MariaDB 数据库,首先要有
- 一台 Linux 服务器,本文以 Ubuntu 为例
- 已装置 MySQL 或 MariaDB server(还未装置,装置教程请看这篇《MySQL 装置教程》)
- MySQL 或 MariaDB Server 中有数据库(用于导出)
- 教程应用 MacOS 演示本地计算机操作,此操作同时实用于 Windows 及 Linux
一. 导出 MySQL 或 MariaDB 数据库
1. 如何应用 mysqldump
导出数据
mysqldump
命令是数据库导出中应用最频繁对一个工具,它可将数据库中的数据备份成已 *.sql 结尾的文本文件,表构造和数据都会存储在其中。
mysqldump
命令的原理也很简略,它先把须要备份的表构造查问进去,而后生成一个 CREATE TABLE 'table'
语句,最初将表中所有记录转化成一条 INSERT
语句。
能够把它了解为一个批量导出导入脚本。数据导入时,依照标准语句导入数据,大幅缩小奇怪的未知谬误呈现。
mysqldump
的根本命令:
$ mysqldump -u username -p database_name > data-dump.sql
username
是数据库的登录名database_name
是须要导出的数据库名称data-dump.sql
是文件输入目录的文件
导出实战 – 从阿里云服务器中的 MySQL 数据库导出数据
$ mysqldump -u kalacloud -p kalacloud_database > /tmp/kalacloud-data-export.sql
kalacloud
:数据库账号kalacloud_database
:数据库名/tmp/kalacloud-data-export.sql
:数据库导出的文件及寄存目录
输出数据库 kalacloud
账号的明码执行命令,如果执行过程中,没有任何谬误,那么命令行不会有任何输入。
咱们能够 cd 到 tmp 目录查看后果。上图能够看到,tmp 目录下曾经生成 kalacloud-data-export.sql
的导出文件。
咱们在用 head -n 5 kalacloud-data-export.sql
命令检查一下。你会看到相似下图的内容。
至此,咱们曾经将指定数据库导出到 *.sql 文件中了,后文咱们解说如何将这些数据导入到数据库。
进阶提醒:咱们能够应用 scp
命令,将导出文件下载至本地计算机。
在本地计算机的命令行终端里,输出:
scp root@192.168.180.134:/tmp/kalacloud-data-export.sql /Users/kalacloud/Downloads
root
近程计算机的登录账号
192.168.180.134
为近程计算机的 IP 地址
/tmp/kalacloud-data-export.sql
为须要下载到本地的数据库文件在近程计算机上的存储地位
/Users/kalacloud/Downloads
为本地计算机的存储地位,近程文件将下载到这个目录中
应用 scp
将导出的 SQL 文件下载到本地再进行后续解决。当然咱们也能够一步导出至本地计算机,上面咱们持续解说进阶导出办法。
扩大浏览:《如何近程连贯 MySQL 数据库,阿里云腾讯云外网连贯教程》
2. 进阶:将阿里云 / 腾讯云近程服务器中的数据库导出到本地计算机
前文咱们讲了如何在近程服务器上操作导出数据库,导出后保留在近程服务器中。有时咱们须要把数据导出给产品或经营进行数据分析,又或者咱们应用的云服务是独立 MySQL 数据库,这时,你须要间接把数据导出到本地计算机中。
$ mysqldump -h remote_IP_address -u username -p -P3306 --default-character-set=utf8 --set-gtid-purged=OFF database_name >/Users/kalacloud/Desktop/data-dump.sql
remote_IP_address
: 近程服务器的 IPusername
:领有近程登录权限的 MySQL 账号3306
:近程登录的数据库端口,默认是 3306,如果不是可依据状况替换default-character-set=utf8
:导出时指定字符集set-gtid-purged=OFF
:全局事务 ID (GTID) 来强化数据库的主备一致性,故障复原,以及容错能力。开启这个性能导入导出时,可能会出错,故敞开。database_name
:须要导出的数据库名称/Users/kalacloud/Desktop/data-dump.sql
:本地计算机保留门路及保留文件名
提醒:mysqldump
常见报错:mysqldump: Couldn’t execute ‘SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, ‘$.”number-of-buckets-specified”‘)
可在命令中增加 column-statistics=0
参数。因 MySQL 数据库晚期版本 information_schema
数据库中没有名为 COLUMN_STATISTICS
的数据表,新版 mysqldump
默认启用,咱们能够通过此命令禁用它。
导出实战 – 将阿里云服务器中的数据库间接导出到本地计算机
$ mysqldump -h123.57.56.228 -ukalacloud-remote -p -P3306 --default-character-set=utf8 --set-gtid-purged=OFF --column-statistics=0 kalacloud_database >/Users/kalacloud/Desktop/kalacloud-data-export.sql
123.57.56.228
:近程数据库 ip 地址kalacloud-remote
:领有近程拜访权限的数据库账号。-P 3306
:数据库拜访端口,可依据本人状况批改。/Users/kalacloud/Desktop/kalacloud-data-export.sql
:本地计算机保留门路及保留文件名
执行命令后,命令行并没有任何信息输入,但咱们曾经能够在桌面上看到导出后生成的文件了。
曾经导出到本地桌面的近程端数据库
当然,mysqldump
也能够分表备份,比拟常见的场景有
# 备份单个库
mysqldump -uroot -p -R -E --single-transactio --databases [database_one] > database_one.sql
# 备份局部表
mysqldump -uroot -p --single-transaction [database_one] [table_one] [table_two] > database_table12.sql
# 排除某些表
mysqldump -uroot -p [database_one] --ignore-table=[database_one.table_one] --ignore-table=[database_one.table_two] > database_one.sql
# 只备份构造
mysqldump -uroot -p [database_one] --no-data > [database_one.defs].sql
# 只备份数据
mysqldump -uroot -p [database_one] --no-create-info > [database_one.data].sql
扩大浏览:无关数据库在两台服务器之间迁徙的问题可看我写的《如何迁徙 MySQL 数据库,阿里云、腾讯云迁徙案例》
3. 应用 into outfile
命令导出 MySQL / MariaDB 数据至 CSV / Excel
有时咱们须要将数据导出给经营或产品进行数据分析,这时导出 CSV 文件会更加方便使用。
mysql> select * from users into outfile '/var/lib/mysql-files/users.csv' FIELDS TERMINATED BY ',';
FIELDS TERMINATED BY ','
数据以 , 进行分隔。
首先咱们登录 MySQL shell,抉择须要导出的数据库use kalacloud_database;
而后执行导出命令。
导出后会显示胜利提醒,CD
到导出目录可看到 CSV 文件已导出。
提醒:into outfile
常见报错
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
这是因为你的 MySQL 配置了--secure-file-priv
限度了导出文件的寄存地位。
你能够应用以下命令来查看具体配置信息
show global variables like '%secure_file_priv%';
secure_file_priv
为 NULL 时,示意不容许导入或导出。secure_file_priv
为门路时(/var/lib/mysql-files/)时,示意只容许在门路目录中执行。secure_file_priv
没有值时,示意可在任意目录的导入导出。
你能够关上 my.cnf 或 my.ini,增加以下语句,重启 MySQL server 即可
secure_file_priv=''
扩大浏览:无关把 MySQL 查问进去的后果保留到文件可看我写的这篇《如何在 MySQL 中保留查问后果到文件》教程。
二. MySQL 或 MariaDB 数据库导入数据
接着咱们解说如何将 *.sql 导入到数据库中。咱们先建一个新数据库用作演示。
咱们以 root 或有足够权限的账号登录 MySQL:
$ mysql -u root -p
输出登录明码后,进入 MySQL shell 状态。接着咱们创立一个新数据库,在这个例子中,咱们用 kalacloud_new_database
作为新数据库名称。
mysql> CREATE DATABASE kalacloud_new_database;
执行命令后返回内容
Query OK, 1 row affected (0.00 sec)
用于演示的新数据库创立实现,咱们应用 CTRL+D
退出 MySQL shell
1. 间接应用 mysql
导入 SQL 文件
在命令行中咱们导入上文导出的 /tmp/kalacloud-data-export.sql
文件(留神:以下命令在 命令行中执行,不是在 mysql> 状态下执行)
mysql -u root -p kalacloud_new_database < /tmp/kalacloud-data-export.sql
root
:你能够登录数据库的用户名。kalacloud_new_database
:刚刚新建的空数据库,这条命令会把数据导入到这其中。/tmp/kalacloud-data-export.sql
:是上文咱们从数据库导出的 sql 文件,这里咱们把它再导入到新数据库中。
如果运行胜利,命令行不会有任何提醒。如果运行失败,命令行会提醒失败起因。要检测是否导入胜利,咱们能够登录到 MySQL 查看并查看数据库中的数据。
登录 MySQL server,应用 USE kalacloud_new_database;
抉择刚刚咱们导入数据的新建数据库,而后应用 SHOW TABLES;
查看数据库中蕴含的表,最初用SELECT * FROM users;
关上表查看内容。
扩大浏览:《MySQL 配置文件逐行解析》教程
2. 应用 source
导入 MySQL / MariaDB 数据库 SQL 文件
进入 MySQL shell 状态,咱们还是导入本教程前文导出的 /tmp/kalacloud-data-export.sql
文件,到新数据库中。
mysql> USE kalacloud_new_database;
首先抉择须要导入的数据库kalacloud_new_database
,返回后果。
Database changed
而后应用 source
mysql> source /tmp/kalacloud_new_database.sql;
执行 source
命令后,MySQL 开始执行导入,接着咱们应用 SHOW TABLES
和 select
来查看 SQL 文件是否导入失常。
上图能够看到,数据曾经导入胜利。
特地提醒:source
和 mysql <
两种导入形式的区别
- 命令执行环境不同:
source
在 MySQL sell 里执行,mysql <
在终端命令行中执行 - 返回后果的不同:
source
会间断返回每一行导入后果,如果量大可能会影响速度,mysql <
全副实现后返回后果。 - 报错是否进行执行:
source
遇到报错不会终止执行,mysql <
遇到报错会终止执行。
扩大浏览:《MySQL 触发器六种状况一次讲透,利用实战案例》
3.MySQL / MariaDB 数据库中导入 CSV 文件
除了间接导入 sql 类文件外,有时候咱们还会碰到须要导入 CSV 文件。导入 CSV 文件的步骤与间接导入 sql 有很大的不同,接着咱们来解说如何导入 CSV 文件。
咱们先进入 MySQL Shell:
$ mysql -uroot -p
而后新建一个空数据库:
mysql> CREATE DATABASE kalacloud_new_database;
与导入 *.sql 不同,导入 CSV 文件须要先创立「表」,咱们须要依据 CSV 文件中蕴含的列,应用CREATE TABLE
创立表。
CREATE TABLE `users` (`id` VARCHAR(255) NULL,
`name` VARCHAR(255) NULL,
`phone` VARCHAR(255) NULL,
`states` VARCHAR(255) NULL,
`file_size` VARCHAR(255) NULL,
`sale` VARCHAR(255) NULL,
`copyright` VARCHAR(255) NULL,
`homepage` VARCHAR(255),
`complaint` VARCHAR(255) NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
倡议所有字段都设为接收 NULL
值,也临时不要设置主键。因为咱们并不知道行将导入的 CSV 文件中的数据是否残缺和标准。
倡议即使是数字,也先应用 VARCHAR
字段,以避免文件中的数据格式不正确导致的奇怪谬误。
咱们能够在数据导入后,在对数据库进行验证、清理和修改。
上文中咱们从 kalacloud_database
中导出了表 users
寄存到了/var/lib/mysql-files/users.csv
里,上面咱们应用 LOAD DATA INFILE SQL
语句把这个 CSV 文件导入新建的表中。
load data infile '/var/lib/mysql-files/users.csv'
into table users
FIELDS TERMINATED BY ','
ENCLOSED BY '"';
字段应用逗号分隔,字符串用双引号括起来。如果你的 CSV 第一行是题目而非数据,那么还能够增加 IGNORE 1 ROWS;
导入时,疏忽第一行。
导入胜利后,应用 select * from users;
初步检查表中数据是否正确。
扩大浏览:咱们也能够应用 Workbench 这种收费的 MySQL 图形管理工具来操作,理解更多可看我写的这篇《MySQL Workbench 中文指南》教程。
三. 应用「卡拉云」一键导入导出数据
除了 MySQL / MariaDB 数据迁徙这类适宜应用终端命令操作外,大多数对 MySQL / MariaDB 数据导入导出操作还是为了数据展现、剖析、协同共享等产品和经营层面的利用场景。
比方后端工程师接到产品需要,帮助导出某类数据等场景,如果这类需要频繁呈现,举荐应用卡拉云,卡拉云是新一代低代码开发工具,免装置部署,可一键接入包含 MySQL 在内的常见数据库及 API。
不仅能够像命令行一样灵便,还可依据本人的工作流,定制开发。无需繁琐的前端开发,只须要简略拖拽,即可疾速搭建企业外部工具。数月的开发工作量,应用卡拉云后可缩减至数天,欢送试用咱们开发的卡拉云。
卡拉云可疾速接入的常见数据库及 API
卡拉云可依据公司工作流需要,轻松搭建数据看板,并且可分享给组内的小伙伴共享数据
仅需拖拽一键生成前端代码,简略一行代码即可映射数据到指定组件中。
卡拉云可间接增加导出按钮,导出实用于各类剖析软件的数据格式,方便快捷。立刻开明卡拉云,导入导出你的数据
四. 总结
在本教程中,咱们解说了如何导入导出数据库至 SQL 文件和 CSV 文件。mysqldump 还有很多应用变动,你能够参考 mysqldump 官网文档理解更多。更多数据库相干教程可拜访 卡拉云 查看。