为什么要用到数据库的导入导出?

刚开始学习数据库时,我们必定是从敲一条一条的简单的sql语句开始,但是随着我们逐渐深入学习数据库后,正式开始使用时,会碰到需要将有用的数据迁移到其它机器上,或者将数据库中的表与数据发送给其它人,这样一来,如果我们一条一条的输入将create table语句,和insert语句,如果数据量一大,肯定不现实,那么我们就可以使用对应的工具来导入导出其中的表结构和数据。

接下来列举两种导入导出数据的方法

导出数据

  1. 在linux终端环境下使用mysqldump命令导出数据
    首先安装mysql客户端它是一个命令行工具,其中一般包含了mysqldump工具
dnf install -y mariadb

下面的命令指定了mysql服务器ip、端口、用户、密码、和对应的数据库与表,将命令的标准输出以覆盖的方式重定向到指定的文件里。

查看.sql文件可以看到里面就是一条条的sql语句(建表、插入数据等操作),只不过是mysqldump帮我们把所有sql导出写入了指定的文件中

#导出db1数据库中所有的表和数据
mysqldump  -h 192.168.100.120 -P 3306 -uroot -p000000 db1 > mysql_dump_db1.sql  
#导出指定数据库db1中的指定表account的数据
mysqldump  -h 192.168.100.120 -P 3306 -uroot -p000000 db1 account > mysql_dump_db1_account.sql 
  1. 在mysql客户端命令行下执行select语句导出对应表的数据到服务器的目录下

在这种情况下要注意导出的目录位置权限,比如mysql服务是由mysql这个系统用户启动的,那么我要将某个表格导入到/root/目录下,而root目录不允许其它用户执行操作的话,那么导出会失败,selinux中有的规则也可能导致导出失败,建议关闭selinux。

#将tb_brand表中的数据导出为csv,号分隔
select *  from tb_brand into outfile '/root/into_outfile_brand.csv' FIELDS TERMINATED BY ','; 

#查看导出的数据
cat root/into_outfile_brand.csv 
1,三只松鼠,三只松鼠股份有限公司,5,好吃不上火,0
2,华为,华为技术有限公司,100,华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界,1
3,小米,小米科技有限公司,50,are you ok,1

注意!
如果在my.cof中设置了secure_file_priv参数的路径,那么使用此方法只能导入到对应的目录下

#查看secure_file_priv的配置,如果为空,可以导出到任意有权限的目录下
SHOW VARIABLES LIKE 'secure_file_priv';

#my.cnf配置文件
[mysqld]
secure_file_priv=""  #设置为空值禁用限制

导入数据

  1. 在linux终端环境下使用导入sql文件中数据
#将本地sql数据导入到test5数据库中
mysql -h 192.168.100.120 -P 3306 -uroot -p000000 test5 < mysql_dump_db1.sql
mysql -h 192.168.100.120 -P 3306 -uroot -p000000 test5  < mysql_dump_db1_account.sql
#source命令导入
#方法1
mysql -h 192.168.100.120 -P 3306 -uroot -p000000  test4 -e "source /root/mysql/mysql_dump_db1_account.sql"

#方法2 进入mysql命令行执行source指令
mysql -h 192.168.100.120 -P 3306 -uroot -p000000  test4
source /root/mysql/mysql_dump_db1_account.sql
  1. 在mysql客户端命令行下执行load语句导入csv表格数据到指定表中(需要创建与数据对应的表结构!)
#查询到创建表结构的sql语句
show create table tb_brand;
#创建表tb_brand2的表结构
CREATE TABLE `tb_brand2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `brand_name` varchar(20) DEFAULT NULL,
  `company_name` varchar(20) DEFAULT NULL,
  `ordered` int(11) DEFAULT NULL,
  `description` varchar(100) DEFAULT NULL,
  `status` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4


#导入/root/into_outfile_brand.csv中的数据到新的表tb_brand2中
load data infile '/root/into_outfile_brand.csv' into table tb_brand2 fields terminated by ',';

#导入成功!
MySQL [test4]> select * from  tb_brand2 ;
+----+--------------+--------------------------------+---------+-----------------------------------------------------------------------------------------------------------------+--------+
| id | brand_name   | company_name                   | ordered | description                                                                                                     | status |
+----+--------------+--------------------------------+---------+-----------------------------------------------------------------------------------------------------------------+--------+
|  1 | 三只松鼠     | 三只松鼠股份有限公司           |       5 | 好吃不上火                                                                                                      |      0 |
|  2 | 华为         | 华为技术有限公司               |     100 | 华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界                                      |      1 |
|  3 | 小米         | 小米科技有限公司               |      50 | are you ok                                                                                                      |      1 |
+----+--------------+--------------------------------+---------+-----------------------------------------------------------------------------------------------------------------+--------+
3 rows in set (0.001 sec)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐