使用mysqldump命令导出MySQL数据为txt文本文件

解决方法

先导出为txt文件,其内容是以逗号“,”分隔的,得到txt文件后,再自行处理为.csv或者.xls文件。

参数说明:

-t, --no-create-info Don't write table creation info.

-T, --tab=name Create tab-separated textfile for each table to given path. (Create .sql and .txt files.) NOTE: This only works if mysqldump is run on the same machine as the mysqld server.

--fields-terminated-by=name  Fields in the output file are terminated by the given string.

--fields-enclosed-by=name   Fields in the output file are enclosed by the given character.

使用mysqldump命令导出文本文件
mysqldump -u root -pPassword -T 目标目录 dbname [tables] [option];

其中:

  • Password 参数表示root用户的密码,密码紧挨着-p选项。
  • -T:只有指定了-T参数,才可以导出纯文本文件。
  • 目标目录:是指导出的文本文件的路径。
  • dbname参数表示数据库的名称。
  • tables参数表示要导出的表的名称。如果不指定,则导出数据库dbname中所有的表。

option为可选参数选项,这些选项需要结合-T选项使用。
option常见的取值如下:

  • --fields-terminated-by=字符串。设置字符串为各个字段之间的分隔符,可以为单个或多个字符。默认值为制表符“\t”。
  • --fields-enclosed-by=字符。设置一个字符来括住各个字段的值,这个是每个字段都会用这个字符包裹。
  • --fields-optionally-enclosed-by=字符:设置一个来括住字符类型的值,字符将括住CHAR、VARCHAR和TEXT等字符型字段。
  • --fields-escaped-by=字符:设置转义字符,只能为单个字符。默认值为“\”。
  • --lines-terminated-by=字符串:设置每行数据结尾的字符,可以为单个或多个字符。默认值为“\n”。
  • --no-create-db sql文件里面不导出创建database语句,但是还是会有.sql文件。
  • --no-create-info sql文件里面不导出创建table语句,但是还是会有.sql文件。

1. 先查看可导出位置(不然会涉及到权限问题)

mysql> show variables like 'secure_file_priv';
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |   //如果出现权限问题,尝试把该目录所有者改成mysql
+------------------+-----------------------+
1 row in set (0.00 sec)

要是结果是null的话需要额外的配置才行

需要修改my.cnf(或my.ini)配置文件,并重新启动数据库服务。
在my.cnf中的[mysqld]节添加或修改一个项目secure_file_priv=
本项含义:

null表示不允许导出;
空表示允许导出,而且不限制目标目录;
一个目录(如:/data/exportdata),表示只允许导出文件到此目录; (修改目录权限为mysql用户)

查看目前配置,可以使用SQL语句:show global variables like '%secure%';

2. 执行导出命令

[root@server-10 ~]# mysqldump -uroot -p -t -T /var/lib/mysql-files/  mydb customers  --fields-terminated-by=',' --fields-enclosed-by='\"'

3. 查看一下

[root@server-10 ~]# ls -l /var/lib/mysql-files/
total 4
-rw-r--r-- 1 root  root    0 Aug 28 15:35 customers.sql    //会同步生成同名sql文件,内容为空
-rw-rw-rw- 1 mysql mysql 458 Aug 28 15:35 customers.txt
[root@server-10 ~]# cat /var/lib/mysql-files/customers.txt 
"10001","Coyote Inc.","200 Maple Lane","Detroit","MI","44444","USA","Y Lee","ylee@coyote.com"
"10002","Mouse House","333 Fromage Lane","Columbus","OH","43333","USA","Jerry Mouse",\N
"10003","Wascals","1 Sunny Place","Muncie","IN","42222","USA","Jim Jones","rabbit@wascally.com"
"10004","Yosemite Place","829 Riverside Drive","Phoenix","AZ","88888","USA","Y Sam","sam@yosemite.com"
"10005","E Fudd","4545 53rd Street","Chicago","IL","54545","USA","E Fudd",\N

4. 如果不想每个字段带冒号,则省略--fields-enclosed-by='"'即可

[root@server-10 ~]# mysqldump -uroot -p -t -T /var/lib/mysql-files/  mydb customers  --fields-terminated-by=','

5. 再查看一下输出的变化

[root@server-10 ~]# ls -l /var/lib/mysql-files/
total 4
-rw-r--r-- 1 root  root    0 Aug 28 15:35 customers.sql
-rw-rw-rw- 1 mysql mysql 372 Aug 28 15:36 customers.txt
[root@server-10 ~]# cat /var/lib/mysql-files/customers.txt 
10001,Coyote Inc.,200 Maple Lane,Detroit,MI,44444,USA,Y Lee,ylee@coyote.com
10002,Mouse House,333 Fromage Lane,Columbus,OH,43333,USA,Jerry Mouse,\N
10003,Wascals,1 Sunny Place,Muncie,IN,42222,USA,Jim Jones,rabbit@wascally.com
10004,Yosemite Place,829 Riverside Drive,Phoenix,AZ,88888,USA,Y Sam,sam@yosemite.com
10005,E Fudd,4545 53rd Street,Chicago,IL,54545,USA,E Fudd,\N
posted @   哈喽哈喽111111  阅读(1004)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示