Question

My case is the following: an external party delivers a huge SQL file with thousands of queries. These include updates, inserts, subqueries, etc. Those queries are assembled in third-party software (I think Excel, but I might be mistaken).

As a result, many of these queries tend to fail and the whole batch needs to succeed without one single error. I'm using mysql source file.sql to execute the queries, and I'm using mysql tee log.txt to log the output to a txt-file.

However, this has proven to be insufficient, as this is the output I'm getting:

Query OK, 1 row affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

ERROR 1242 (21000): Subquery returns more than 1 row
Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

It's kinda looking for a needle in a haystack. I'd have to count all the preceding logging messages to determine which exact query failed.

Is there any way to get a log file including the queries? Or is there another way of doing this efficiently?

  • Executing in small batches is not an option. (It would take ages.)
  • Executing them all on the commandline isn't either. (The messages fly by so fast it's impossible to read or capture them all.)
Was it helpful?

Solution

If you open the mysql client with to -v or --verbose flag, it will echo the statement as well as the output.

$ mysql -v
mysql> tee output.txt
mysql> source myscript.sql

Update:

Note in the documentation for the --tee option (or the tee command):

Tee functionality works only in interactive mode.

This means it doesn't work when you run a script, and this limitation is documented. In other words, it works if you use source as you are doing, but it doesn't work if you do this:

$ mysql -v --tee output.txt < myscript.sql

OTHER TIPS

You can prepare your query script as per below for each statement:

echo "update mytable set col1='value' where id='id'" >> C:\Backup\error.txt
update mytable set col1='value' where id='id' >> C:\Backup\error.txt 2>&1

Note: If your are executing on linux then change path etc. accordingly.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top