你我都会遇到的需求:如何导出MySQL中的数据~ 简单!实用!

2022-01-11 00:00:00 数据 执行 指定 方式 导出

1
你我都有的需求 













                              











Hi 小梦,你把数据库中的数据中的订单数据导出来一份分析一下,我急用


好呀,内心:(又是我...还好我轻车熟路了



日常的工作中难免有需求分析想把数据库中的数据导出来分析,注意只是将数据导出来,想了解(dump)备份数据库,可以看下面这篇笔记:

删库后!除了跑路还能干什么?

那本文就跟大家介绍我常用的两种方式,如下:

方式一:tee

tee的功能是把你与MySQL-Server之间的交互记录都记录到你指定的文件中去。

看下的案例:

Step1:按如下的方式同MySQL交互

// tee命令执行之后,你与MySQL之间的所有交流都会被记录到指定的文件中。
mysql> tee /root/res.txt
Logging to file '/root/res.txt'

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| runoob_tbl     |
+----------------+
1 row in set (0.00 sec)

mysql> select * from runoob_tbl;
+-----------+-----------------------+-----------------------+-----------------+
| runoob_id | runoob_title          | runoob_author         | submission_date |
+-----------+-----------------------+-----------------------+-----------------+
|         3 | 欢迎微信搜索:        | 风一样的程序员        | 2021-11-18      |
+-----------+-----------------------+-----------------------+-----------------+
1 row in set (0.00 sec)

Step2:退出连接,然后去查看机器上的/etc/root/res.txt

方式二:mysql_use_result

第二种方式如下,在登录MySQL时指定好用哪个数据库和要执行的SQL语句,并将SQL的执行结果一股脑重定向到你指定的文件中。

还是上面的例子,对应的命令如下:

mysql -h 127.0.0.1 
    -P ${端口}  
    -p ${密码}   
    -u ${用户名}  
    -D ${数据库名}   
    -e"select * from runoob_tbl;" > ./info_100w &     

执行完之后,查看结果文件:


这时候有个风险:如果你的SQL要捞出的数据量动辄几十几百G,或者TB级别,且依然使用上面的方式拉数据的话,就极有可能打爆内存。因为默认如上的情况中(使用的是mysql_store_result模式),MySQL是把你查到的数据全部加载进内存,再一股脑返回给你。

解决的方式:添加--quick参数

mysql -h 127.0.0.1 
    -P ${端口}  
    -p ${密码}   
    -u ${用户名}  
    -D ${数据库名} 
      --quick
    -e"select * from runoob_tbl;" > ./info_100w &     

使用这个参数后会开启mysql_use_result模式,MySQL每读到一行数据,就会立刻将这行数据返回给客户端,虽然交互的次数多了点,但是直接解决掉客户端内存消耗问题。

学废了没?

以上文章来源于风一样的程序员 ,作者赐我白日梦  

相关文章