【问题标题】:How to log sql errors when restoring database from dump file从转储文件恢复数据库时如何记录sql错误
【发布时间】:2012-12-05 19:24:08
【问题描述】:

对这里的任何重复表示歉意,但我发誓我已经研究过(并在此过程中学到了很多东西)。

环境是 MySQL 5.5,在 Windows 7 上使用 MISAM 表引擎。

任务是恢复从 MySQL 4.0 转储的数据库。我从命令行执行此操作(我尝试使用 Oracle 的 MySQL Workbench 导入实用程序,但如果遇到错误会失败)。恢复完成,但我知道有错误被抛出。我想捕获这些,以便确保恢复完成时不会出错。

General_log 似乎没有捕获任何内容(是的 - 它已打开)。另一个日志文件 (local_host_name.log) 似乎根本没有捕获 sql 语句级别的错误。

从命令行恢复时是否有捕获错误的方法?有没有办法使用将错误写入日志文件的 throw/catch 语句来编辑转储文件本身?

提前致谢 -- 我是一名 MS SQL 专家,对 MySQL 不熟悉。

【问题讨论】:

  • 如果您通过命令行运行导入,我会尝试使用 --verbose 命令再次运行它。这应该在导入时将更多信息打印到屏幕上,包括错误。 dev.mysql.com/doc/refman/5.5/en/…
  • 我试一试——问题是,转储文件包含数千条语句,Windows 命令行不会显示所有行。
  • 您可以使用“>”将输出重定向到文件。即“mysql -u asdf -Ppass -h localhost 数据库名errors.txt”
  • btw -- 感谢您的帮助 -- 非常感谢 -- 现在,我使用 Windows 命令行从 mysql 提示符运行我的导入,如下所示:mysql> source c:\path\to\dumpfile .sql 我应该如何用尖括号封装语句?我尝试了几种组合,最接近的是错误 22。

标签: mysql logging error-handling restore


【解决方案1】:

这对我有用:

 pv import_test.sql | mysql -urootuser -pyourpassword the_db_name >st_out_log.txt 2>error_log.txt

我遇到的一个问题是它似乎只捕获了一个错误。可能脚本在出错后停止执行。

【讨论】:

    【解决方案2】:

    我使用 bash 脚本来恢复 MySQL TB 数据库并将输出记录到如下所示的文件中,

    /bin/bash /home/installation/scripts/finqa_restore.sh 2>&1 | tee /home/installation/scripts/output-stat.txt
    

    【讨论】:

      【解决方案3】:

      @Rob 在提示符(cmd?)中尝试类似:

      mysql -u your_user your_database <c:\path\to\your_script.sql >stdout_output.txt 2>stderr_output.txt
      

      没有尖括号,符号''是命令行shell的重定向信号。

      【讨论】:

      • 感谢您的回答——我能够使用 tee 命令将输出写入文件。如果我尝试你建议的语法,我会得到一个换行符作为提示符 -> 但该命令实际上并没有执行。抱歉,如果我遗漏了一些明显的东西。
      • 很高兴你的问题解决了。这个提示符很奇怪,一般mysql会在漏掉一些半逗号的时候打印出来。执行命令时stderr_output.txt有输出吗?
      猜你喜欢
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2012-08-13
      • 2021-02-04
      • 2020-02-25
      • 2014-02-19
      相关资源
      最近更新 更多