为什么从MySQL命令行运行SQL脚本(.sql)对数据库没有影响?

时间:2019-08-20 14:01:56

标签: mysql cmd sql-scripts

我正在尝试运行一个init.sql脚本(包括数据库创建,过程创建,表创建,数据插入),如下所示:

  • mysql.exe -u root -p <password> <my_db> < init.sql

但是不知道为什么在调用此行之后它会显示如下输出,而数据库什么也没发生?!

配置

  • 操作系统:Windows 10(1809)
  • MySQL:8.0.17

输出:

  

适用于x86_64上Win64的MySQL Ver 8.0.17(MySQL Community Server-GPL)   版权所有(c)2000、2019,Oracle和/或其分支机构。保留所有权利   保留。

     

Oracle是Oracle Corporation和/或其Oracle的注册商标。   会员。其他名称可能是其各自所有者的商标。

     

用法:mysql [OPTIONS] [数据库]-?, --help显示此   帮助并退出。 -I,--help是-的同义词? --auto-rehash
  启用自动重新哈希处理。一个人不需要使用                         “重新哈希”以完成表和字段,但启动                         并且重新连接可能需要更长的时间。禁用                         -禁用自动重新哈希。                         (默认为on;使用--skip-auto-rehash禁用。)-A,--no-auto-rehash                         没有自动重新哈希。一个人必须使用“重新哈希”来获得                         表和字段完成。这样可以更快地开始                         mysql并在重新连接时禁用重新哈希。 -自动垂直输出                         如果出现以下情况,则自动切换到垂直输出模式                         结果比端子宽度宽。 -B,--batch不使用历史文件。禁用交互行为。                         (启用--silent。)--bind-address = name绑定到的IP地址。 --binary-as-hex将二进制数据打印为十六进制
  --character-sets-dir =名称                         字符集文件的目录。 --column-type-in​​fo显示列类型信息。 -c,--comments保留注释。将评论发送到服务器。的                         默认为--skip-comments(放弃评论),启用                         与--comments。 -C,--compress在服务器/客户端协议中使用压缩。 -#,--debug [=#]这是一个   非调试版本。赶上并退出。 --debug-check这是   非调试版本。赶上并退出。 -T,--debug-info此   是非调试版本。赶上并退出。 -D,--database =名称   要使用的数据库。 --default-character-set =名称                         设置默认字符集。 --delimiter = name要使用的分隔符。 --enable-cleartext-plugin                         启用/禁用明文身份验证插件。 -e,--execute = name执行命令并退出。 (禁用   -力量与历史                         -E,--vertical垂直打印查询(行)的输出。 -f,--force即使我们继续   得到一个SQL错误。 --histignore = name冒号分隔的列表   保留陈述的模式                         从登录到syslog和mysql历史记录。 -G,--named-commands                         启用命名命令。命名命令表示该程序的                         内部命令;参见mysql> help。启用后,                         命名命令可以在查询的任何行中使用,                         否则只能从第一行开始输入。                         使用--disable-named-commands禁用。这个选项是                         默认禁用。 -i,--ignore-spaces忽略函数名称后的空格。 --init-command = name SQL命令   连接到MySQL服务器时执行。                         重新连接时将自动重新执行。 --local-infile启用/禁用本地加载数据   INFILE。 -b,--no-beep关闭错误提示音。 -H,   --host = name连接到主机。 -H,--html生成HTML输出。 -X,--xml生成XML输出。 --line-numbers
  输入行号以查找错误。                         (默认为on;使用--skip-line-numbers禁用。)-L,--skip-line-numbers                         不要为错误写行号。 -n,--unbuffered每次查询后刷新缓冲区。 --column-names在结果中写入列名。                         (默认为on;使用--skip-column-names禁用。)-N,--skip-column-names                         不要在结果中写列名。 --sigint-ignore忽略SIGINT(CTRL-C)。 -o,--one-database忽略语句,但在                         默认数据库是在命令行中命名的数据库。 -p,--password [= name]                         连接服务器时使用的密码。如果密码是                         tty没给它。 -W,--pipe使用命名管道连接到服务器。 -P,--port =#端口   用于连接的数字,或默认为0的in                         优先顺序my.cnf,$ MYSQL_TCP_PORT,                         / etc / services,内置默认值(3306)。 --prompt = name设置mysql提示符为该值。 --protocol = name用于连接的协议(TCP,套接字,管道,                         记忆)。 -q,--quick不缓存结果,逐行打印。这可能会变慢                         如果输出被挂起,请关闭服务器。不使用                         历史记录文件。 -r,--raw无需转换即可写入字段。与--batch一起使用。 --reconnect重新连接   如果连接断开。禁用                         --disable-reconnect。默认情况下启用此选项。                         (默认为on;使用--skip-reconnect禁用。)-s,--silent保持沉默。列印结果   标签作为分隔符,                         新行中的每一行。 --shared-memory-base-name =名称                         共享内存的基本名称。 -S,--socket = name用于连接的套接字文件。 --server-public-key-path =名称                         服务器公共RSA密钥(PEM格式)的文件路径。 --get-server-public-key                         获取服务器公共密钥--ssl-mode = name SSL连接模式。 --ssl-ca = name PEM格式的CA文件。
  --ssl-capath =名称CA目录。 --ssl-cert = name PEM格式的X509证书。 --ssl-cipher = name要使用的SSL密码。 --ssl-key =名称   X509密钥为PEM格式。 --ssl-crl =名称证书吊销   清单。 --ssl-crlpath = name证书吊销列表路径。
  --tls-version = name要使用的TLS版本,允许的值为:TLSv1,TLSv1.1,                         TLSv1.2,TLSv1.3 --ssl-fips-mode = name                         SSL FIPS模式(仅适用于OpenSSL);允许的                         值是:OFF,ON,STRICT --tls-ciphersuites = name                         使用TLS v1.3密码。 -t,--table以表格式输出。 --tee = name将所有内容附加到   超出档案。查看交互式帮助(\ h)                         也。在批处理模式下不起作用。禁用                         --disable-tee。默认情况下禁用此选项。 -u,--user = name如果不是当前用户,则为登录用户。
  -U,--safe-updates仅允许使用键的UPDATE和DELETE。 -U,-i-am-a-dummy选项--safe-updates,-U的同义词。 -v,--verbose写更多。 (-v -v -v给出表的输出格式)。 -V,--version   输出版本信息并退出。 -w,--wait等待并   如果连接断开,请重试。 --connect-timeout =#秒数   连接超时之前。 --max-allowed-packet =#                         要发送或接收的最大数据包长度                         服务器。 --net-buffer-length =#                         TCP / IP和套接字通信的缓冲区大小。 --select-limit =#SELECT的自动限制   使用--safe-updates。 --max-join-size =#行的自动限制   在使用时加入                         -安全更新。 --show-warnings在每个语句后显示警告。 -j,-syslog日志过滤   交互命令到系统日志。过滤                         命令取决于histignore提供的模式                         默认模式之外的其他选项。 --plugin-dir = name客户端插件的目录。 --default-auth = name要使用的默认身份验证客户端插件。 --binary-mode默认情况下,不允许ASCII'\ 0',而'\ r \ n'                         转换为“ \ n”。此开关将同时关闭这两个功能,                         并关闭所有客户端命令的解析,除了                         \ C和DELIMITER,在非交互模式下(用于输入                         通过管道传输到mysql或使用“源”命令加载)。                         处理mysqlbinlog的输出时这是必要的                         可能包含斑点。 --connect-expired-password                         通知服务器此客户端已准备好处理                         密码沙箱模式已过期。

     

从以下文件中以给定顺序读取默认选项:   C:\ WINDOWS \ my.ini C:\ WINDOWS \ my.cnf C:\ my.ini C:\ my.cnf C:\ Program   Files \ MySQL \ my.ini C:\ Program Files \ MySQL \ my.cnf以下组   读取:mysql client以下选项可以作为第一个选项   参数:   --print-defaults打印程序参数列表并退出。   --no-defaults不从任何选项文件中读取默认选项,                           登录文件除外。   --defaults-file =#仅从给定文件#中读取默认选项。   --defaults-extra-file =#在读取全局文件后读取此文件。   --defaults-group-suffix =#                           还读取带有concat的组(组,后缀)   --login-path =#从登录文件读取此路径。

     

变量(--variable-name = value)和布尔选项{FALSE | TRUE}   值(读取选项后)   --------------------------------- ----------------- -----------------------自动重新哈希TRUE自动垂直输出FALSE绑定地址
  (无默认值)binary-as-hex(FALSE)   character-sets-dir(无默认值)column-type-in​​fo   FALSE评论FALSE压缩
  FALSE数据库(无默认值)   默认字符集自动定界符
  ; enable-cleartext-plugin FALSE垂直
  FALSE强制FALSE历史信息
  (无默认值)named-commands FALSE   忽略空间FALSE初始化命令
  (无默认值)本地文件内FALSE无提示
  FALSE主机(无默认值)html
  FALSE xml FALSE行号
  TRUE无缓冲FALSE列名
  TRUE sigint-ignore FALSE端口
  0提示mysql> quick
  FALSE原始FALSE重新连接
  FALSE共享内存库名称(无默认值)套接字
  (无默认值)server-public-key-path(无默认值)   值)获取服务器公共密钥FALSE ssl-ca
  (无默认值)ssl-capath(无默认值   值)ssl-cert(无默认值)ssl-cipher   (无默认值)ssl键(无默认值   值)ssl-crl(无默认值)   ssl-crlpath(无默认值)tls-version
  (无默认值)tls-ciphersuites(无默认值   值)表FALSE用户
  root安全更新FALSE i-am-a-dummy
  FALSE连接超时0个最大允许数据包
  16777216网络缓冲区长度16384选择限制
  1000个最大连接大小1000000个显示警告
  FALSE plugin-dir(无默认值)   default-auth(无默认值)二进制模式
  FALSE connect-expired-password FALSE

2 个答案:

答案 0 :(得分:1)

我建议按照MySQL8.0文档进行操作。尝试完全合格-用户-密码,如下所示:

shell> mysql --user=user_name --password=pass db_name

List of options

答案 1 :(得分:1)

您显示的输出是mysql客户端的帮助输出。它根本没有运行您的init.sql脚本。没那么远,因为它不理解您调用客户端的命令。

我不使用Windows,但我知道<输入重定向在Powershell中不起作用。您可以使用其他方式运行SQL脚本,而无需使用输入重定向:

mysql ...options... -e "source init.sql"

另外,您应该了解,如果-p与密码之间有空格,则mysql客户端的-p选项将不起作用。

使用以下任一方法:

mysql -p<password> ...

或者:

mysql --password=<password> ...

但是我的首选是完全避免在命令行上输入用户名和密码。将它们放在选项文件中,如下所述:https://dev.mysql.com/doc/refman/8.0/en/option-files.html