通过命令行从 MySQL 导出/导入表

问题描述

我正在尝试从我的 users 数据库备份我的 cia

我已经创建了这个示例片段

示例

#db    = cia
#table = users

MysqLdump cia users > cia.users.sql && L <<-------- ✅
MysqL -u root cia -e "TruncATE TABLE users;" <<-------- ✅
MysqL -u root cia -e "SELECT COUNT(*) FROM users;" <<-------- ✅
MysqL -u root cia users < cia.users.sql <<-------- ?❌ stuck...
MysqL -u root cia -e "SELECT COUNT(*) FROM users;"
rm -rf cia.users.sql
echo "--------------------------- DONE."
#

我得到了

MysqL  Ver 8.0.23-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
copyright (c) 2000,2021,Oracle and/or its affiliates.

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.
                      (Defaults to on; use --skip-auto-rehash to disable.)
  -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.
  --auto-vertical-output 
                      Automatically switch to vertical output mode if the
                      result is wider than the terminal width.
  -B,--batch         Don't use history file. disable interactive behavior.
                      (Enables --silent.)
  --bind-address=name IP address to bind to.
  --binary-as-hex     Print binary data as hex. Enabled by default for
                      interactive terminals.
  --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       This is a non-debug version. Catch this and exit.
  -T,--debug-info    This is a non-debug version. Catch this and exit.
  -D,--database=name Database to use.
  --default-character-set=name 
                      Set the default character set.
  --delimiter=name    Delimiter to be used.
  --enable-cleartext-plugin 
                      Enable/disable the clear text authentication plugin.
  -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.
  --histignore=name   A colon-separated list of patterns to keep statements
                      from getting logged into syslog and MysqL history.
  -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.
  -i,--ignore-spaces Ignore space after function names.
  --init-command=name sql Command to execute when connecting to MysqL server.
                      Will automatically be re-executed when reconnecting.
  --local-infile      Enable/disable LOAD DATA LOCAL INFILE.
  -b,--no-beep       Turn off beep on error.
  -h,--host=name     Connect to host.
  --dns-srv-name=name Connect to a DNS SRV resource
  -H,--html          Produce HTML output.
  -X,--xml           Produce XML output.
  --line-numbers      Write line numbers for errors.
                      (Defaults to on; use --skip-line-numbers to disable.)
  -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.
                      (Defaults to on; use --skip-column-names to disable.)
  -N,--skip-column-names 
                      Don't write column names in results.
  --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.
  -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.
                      (Defaults to on; use --skip-reconnect to disable.)
  -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.
  --server-public-key-path=name 
                      File path to the server public RSA key in PEM format.
  --get-server-public-key 
                      Get server public key
  --ssl-mode=name     SSL connection mode.
  --ssl-ca=name       CA file in PEM format.
  --ssl-capath=name   CA directory.
  --ssl-cert=name     X509 cert in PEM format.
  --ssl-cipher=name   SSL cipher to use.
  --ssl-key=name      X509 key in PEM format.
  --ssl-crl=name      Certificate revocation list.
  --ssl-crlpath=name  Certificate revocation list path.
  --tls-version=name  TLS version to use,permitted values are: TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
  --ssl-fips-mode=name 
                      SSL FIPS mode (applies only for OpenSSL); permitted
                      values are: OFF,ON,STRICT
  --tls-ciphersuites=name 
                      TLS v1.3 cipher to use.
  -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.
  -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.
  --show-warnings     Show warnings after every statement.
  -j,--syslog        Log filtered interactive commands to syslog. Filtering of
                      commands depends on the patterns supplied via histignore
                      option besides the default patterns.
  --plugin-dir=name   Directory for client-side plugins.
  --default-auth=name Default authentication client-side plugin to use.
  --binary-mode       By default,ASCII '\0' is disallowed and '\r\n' is
                      translated to '\n'. This switch turns off both features,and also turns off parsing of all clientcommands except
                      \C and DELIMITER,in non-interactive mode (for input
                      piped to MysqL or loaded using the 'source' command).
                      This is necessary when processing output from MysqLbinlog
                      that may contain blobs.
  --connect-expired-password 
                      Notify the server that this client is prepared to handle
                      expired password sandBox mode.
  --network-namespace=name 
                      Network namespace to use for connection via tcp with a
                      server.
  --compression-algorithms=name 
                      Use compression algorithm in server/client protocol.
                      Valid values are any combination of
                      'zstd','zlib','uncompressed'.
  --zstd-compression-level=# 
                      Use this compression level in the client/server protocol,in case --compression-algorithms=zstd. Valid range is
                      between 1 and 22,inclusive. Default is 3.
  --load-data-local-dir=name 
                      Directory path safe for LOAD DATA LOCAL INFILE to read
                      from.

Default options are read from the following files in the given order:
/etc/my.cnf /etc/MysqL/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,except for login file.
--defaults-file=#       Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.
--defaults-group-suffix=#
                        Also read groups with concat(group,suffix)
--login-path=#          Read this path from the login file.

Variables (--variable-name=value)
and boolean options {FALSE|TRUE}  Value (after reading options)
--------------------------------- ----------------------------------------
auto-rehash                       TRUE
auto-vertical-output              FALSE
bind-address                      (No default value)
binary-as-hex                     FALSE
character-sets-dir                (No default value)
column-type-info                  FALSE
comments                          FALSE
compress                          FALSE
database                          (No default value)
default-character-set             auto
delimiter                         ;
enable-cleartext-plugin           FALSE
vertical                          FALSE
force                             FALSE
histignore                        (No default value)
named-commands                    FALSE
ignore-spaces                     FALSE
init-command                      (No default value)
local-infile                      FALSE
no-beep                           FALSE
host                              (No default value)
dns-srv-name                      (No default value)
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)
server-public-key-path            (No default value)
get-server-public-key             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-crl                           (No default value)
ssl-crlpath                       (No default value)
tls-version                       (No default value)
tls-ciphersuites                  (No default value)
table                             FALSE
user                              root
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
show-warnings                     FALSE
plugin-dir                        (No default value)
default-auth                      (No default value)
binary-mode                       FALSE
connect-expired-password          FALSE
network-namespace                 (No default value)
compression-algorithms            (No default value)
zstd-compression-level            3
load-data-local-dir               (No default value)

解决方法

mysql 客户端接受一个数据库名称,但不需要在该命令行用法中命名表。表的名称来自转储数据文件中的语句。

改变这个:

mysql -u root cia users < cia.users.sql

为此:

mysql -u root cia < cia.users.sql