MySQL转储表,列作为CSV文件?

标签 mysql linux centos

我想将包含特定列的表格导出为 CSV 文件。 (我的数据库名称是:myDatabaseXYZ,用户名是:myUsername1,密码是:mypassword1234,数据库在本地主机上,表名是GDPR_Violation_Actions)

但以下不起作用:

输入:

$ mysql -B -u myUsername1 -p mypassword1234 myDatabaseXYZ 
        -h localhost 
        -e "SELECT id,GDPR_PROOF,email,telephone FROM GDPR_Violation_Actions;" \ 
        | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"

输出:

"mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1"
"Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved."
""
"Oracle is a registered trademark of Oracle Corporation and/or its"
"affiliates. Other names may be trademarks of their respective"
"owners."
""
"Usage: mysql [OPTIONS] [database]"
"  -?, --help          Display this help and exit."
"  -I, --help          Synonym for -?"
"  --auto-rehash       Enable automatic rehashing. One doesn't need to use"
"                      'rehash' to get table and field completion, but startup"
"                      and reconnecting may take a longer time. Disable with"
"                      --disable-auto-rehash."
"  -A, --no-auto-rehash "
"                      No automatic rehashing. One has to use 'rehash' to get"
"                      table and field completion. This gives a quicker start of"
"                      mysql and disables rehashing on reconnect."
"  -B, --batch         Don't use history file. Disable interactive behavior."
"                      (Enables --silent.)"
"  --character-sets-dir=name "
"                      Directory for character set files."
"  --column-type-info  Display column type information."
"  -c, --comments      Preserve comments. Send comments to the server. The"
"                      default is --skip-comments (discard comments), enable"
"                      with --comments."
"  -C, --compress      Use compression in server/client protocol."
"  -#, --debug[=#]     This is a non-debug version. Catch this and exit."
"  --debug-check       Check memory and open file usage at exit."
"  -T, --debug-info    Print some debug info at exit."
"  -D, --database=name Database to use."
"  --default-character-set=name "
"                      Set the default character set."
"  --delimiter=name    Delimiter to be used."
"  -e, --execute=name  Execute command and quit. (Disables --force and history"
"                      file.)"
"  -E, --vertical      Print the output of a query (rows) vertically."
"  -f, --force         Continue even if we get an SQL error."
"  -G, --named-commands "
"                      Enable named commands. Named commands mean this program's"
"                      internal commands; see mysql> help . When enabled, the"
"                      named commands can be used from any line of the query,"
"                      otherwise only from the first line, before an enter."
"                      Disable with --disable-named-commands. This option is"
"                      disabled by default."
"  -g, --no-named-commands "
"                      Named commands are disabled. Use \* form only, or use"
"                      named commands only in the beginning of a line ending"
"                      with a semicolon (;). Since version 10.9, the client now"
"                      starts with this option ENABLED by default. Disable with"
"                      '-G'. Long format commands still work from the first"
"                      line. WARNING: option deprecated; use"
"                      --disable-named-commands instead."
"  -i, --ignore-spaces Ignore space after function names."
"  --local-infile      Enable/disable LOAD DATA LOCAL INFILE."
"  -b, --no-beep       Turn off beep on error."
"  -h, --host=name     Connect to host."
"  -H, --html          Produce HTML output."
"  -X, --xml           Produce XML output."
"  --line-numbers      Write line numbers for errors."
"  -L, --skip-line-numbers "
"                      Don't write line number for errors."
"  -n, --unbuffered    Flush buffer after each query."
"  --column-names      Write column names in results."
"  -N, --skip-column-names "
"                      Don't write column names in results."
"  -O, --set-variable=name "
"                      Change the value of a variable. Please note that this"
"                      option is deprecated; you can set variables directly with"
"                      --variable-name=value."
"  --sigint-ignore     Ignore SIGINT (CTRL-C)."
"  -o, --one-database  Ignore statements except those that occur while the"
"                      default database is the one named at the command line."
"  --pager[=name]      Pager to use to display results. If you don't supply an"
"                      option, the default pager is taken from your ENV variable"
"                      PAGER. Valid pagers are less, more, cat [> filename],"
"                      etc. See interactive help (\h) also. This option does not"
"                      work in batch mode. Disable with --disable-pager. This"
"                      option is disabled by default."
"  --no-pager          Disable pager and print to stdout. See interactive help"
"                      (\h) also. WARNING: option deprecated; use"
"                      --disable-pager instead."
"  -p, --password[=name] "
"                      Password to use when connecting to server. If password is"
"                      not given it's asked from the tty."
"  -P, --port=#        Port number to use for connection or 0 for default to, in"
"                      order of preference, my.cnf, $MYSQL_TCP_PORT,"
"                      /etc/services, built-in default (3306)."
"  --prompt=name       Set the mysql prompt to this value."
"  --protocol=name     The protocol to use for connection (tcp, socket, pipe,"
"                      memory)."
"  -q, --quick         Don't cache result, print it row by row. This may slow"
"                      down the server if the output is suspended. Doesn't use"
"                      history file."
"  -r, --raw           Write fields without conversion. Used with --batch."
"  --reconnect         Reconnect if the connection is lost. Disable with"
"                      --disable-reconnect. This option is enabled by default."
"  -s, --silent        Be more silent. Print results with a tab as separator,"
"                      each row on new line."
"  -S, --socket=name   The socket file to use for connection."
"  --ssl               Enable SSL for connection (automatically enabled with"
"                      other flags).Disable with --skip-ssl."
"  --ssl-ca=name       CA file in PEM format (check OpenSSL docs, implies"
"                      --ssl)."
"  --ssl-capath=name   CA directory (check OpenSSL docs, implies --ssl)."
"  --ssl-cert=name     X509 cert in PEM format (implies --ssl)."
"  --ssl-cipher=name   SSL cipher to use (implies --ssl)."
"  --ssl-key=name      X509 key in PEM format (implies --ssl)."
"  --ssl-verify-server-cert "
"                      Verify server's "Common Name" in its cert against"
"                      hostname used when connecting. This option is disabled by"
"                      default."
"  -t, --table         Output in table format."
"  --tee=name          Append everything into outfile. See interactive help (\h)"
"                      also. Does not work in batch mode. Disable with"
"                      --disable-tee. This option is disabled by default."
"  --no-tee            Disable outfile. See interactive help (\h) also. WARNING:"
"                      Option deprecated; use --disable-tee instead."
"  -u, --user=name     User for login if not current user."
"  -U, --safe-updates  Only allow UPDATE and DELETE that uses keys."
"  -U, --i-am-a-dummy  Synonym for option --safe-updates, -U."
"  -v, --verbose       Write more. (-v -v -v gives the table output format)."
"  -V, --version       Output version information and exit."
"  -w, --wait          Wait and retry if connection is down."
"  --connect_timeout=# Number of seconds before connection timeout."
"  --max_allowed_packet=# "
"                      The maximum packet length to send to or receive from"
"                      server."
"  --net_buffer_length=# "
"                      The buffer size for TCP/IP and socket communication."
"  --select_limit=#    Automatic limit for SELECT when using --safe-updates."
"  --max_join_size=#   Automatic limit for rows in a join when using"
"                      --safe-updates."
"  --secure-auth       Refuse client connecting to server if it uses old"
"                      (pre-4.1.1) protocol."
"  --server-arg=name   Send embedded server this as a parameter."
"  --show-warnings     Show warnings after every statement."
""
"Default options are read from the following files in the given order:"
"/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf "
"The following groups are read: mysql client"
"The following options may be given as the first argument:"
"--print-defaults        Print the program argument list and exit."
"--no-defaults           Don't read default options from any option file."
"--defaults-file=#       Only read default options from the given file #."
"--defaults-extra-file=# Read this file after the global files are read."
""
"Variables (--variable-name=value)"
"and boolean options {FALSE|TRUE}  Value (after reading options)"
"--------------------------------- -----------------------------"
"auto-rehash                       TRUE"
"character-sets-dir                (No default value)"
"column-type-info                  FALSE"
"comments                          FALSE"
"compress                          FALSE"
"debug-check                       FALSE"
"debug-info                        FALSE"
"database                          (No default value)"
"default-character-set             latin1"
"delimiter                         ;"
"vertical                          FALSE"
"force                             FALSE"
"named-commands                    FALSE"
"ignore-spaces                     FALSE"
"local-infile                      FALSE"
"no-beep                           FALSE"
"host                              localhost"
"html                              FALSE"
"xml                               FALSE"
"line-numbers                      TRUE"
"unbuffered                        FALSE"
"column-names                      TRUE"
"sigint-ignore                     FALSE"
"port                              0"
"prompt                            mysql> "
"quick                             FALSE"
"raw                               FALSE"
"reconnect                         FALSE"
"socket                            (No default value)"
"ssl                               FALSE"
"ssl-ca                            (No default value)"
"ssl-capath                        (No default value)"
"ssl-cert                          (No default value)"
"ssl-cipher                        (No default value)"
"ssl-key                           (No default value)"
"ssl-verify-server-cert            FALSE"
"table                             FALSE"
"user                              web145-mydb"
"safe-updates                      FALSE"
"i-am-a-dummy                      FALSE"
"connect_timeout                   0"
"max_allowed_packet                16777216"
"net_buffer_length                 16384"
"select_limit                      1000"
"max_join_size                     1000000"
"secure-auth                       FALSE"
"show-warnings                     FALSE"

编辑:(带有 crontab 的示例,导出的 CSV 文件,使用 SFTP 上传)

#!/bin/bash
today=`date '+%Y%m%d%H%M%S'`;

### table1
table1File="/var/tmp/table1.$today.csv";
mysql -B -u u1 -p1234 dbmy -h localhost -e "SELECT id,company as LOGO FROM table1;" | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > $table1File

### table2
table2File="/var/tmp/table2.$today.csv";
mysql -B -u u1 -p1234 dbmy -h localhost -e "SELECT id FROM table2;" | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > $table2File

### SFTP
sftp -i /root/gdpr/private-key.pem mysftp@10.0.0.2:/folder/ << EOF
put /var/tmp/table1.$today.csv
put /var/tmp/table2.$today.csv
quit
EOF

最佳答案

假设您确实确实准确地复制了命令,那么您在输出中遇到的问题可能归因于行继续字符 "\"< 之后的 2 个额外的 space 字符(这应该是行中的最后一件事)。

删除那些空格,它应该可以工作。

编辑:

$ mysql -B -u myUsername1 -pmypassword1234 myDatabaseXYZ 
        -h localhost 
        -e "SELECT id FROM GDPR_Violation_Actions;" | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"

关于MySQL转储表,列作为CSV文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50483155/

相关文章:

linux - 进程任务被杀死后会发生什么?

java - 为什么 ssh 的 Linux java -version 给出不同的结果?

linux - 在 CentOS 7 上安装 puppet

Java MySQL 通过 ResultSet 向后迭代

html - 如何将 Excel 格式的文本转换为 HTML?

linux - Linux 上的 git 也从另一个存储库上传文件

linux - 将两个 tar 进程的输出通过管道传输到单个子进程中

centos - SIPP "The auto_media_port keyword requires PCAPPLAY."

java - 如何使用 jdbc 和 MySQL 正确设置 utf8 编码?

php - 将多个图像文件上传到php mysql gallery