How to View and Troubleshoot mysqlimport Warnings in MySQL 5.0.5


2 views

When working with mysqlimport in MySQL 5.0.5, you might encounter situations where warnings are generated during CSV import operations but not displayed through standard verbose/debug flags. This occurs because:

  • The --verbose flag primarily shows progress information
  • --debug focuses on connection-level details
  • Warnings are stored differently than regular output

To capture mysqlimport warnings effectively:

# Method 1: Redirect stderr to a file
mysqlimport --local --verbose your_database your_table.txt 2> warnings.log

# Method 2: Combine stdout and stderr
mysqlimport --local your_database your_table.txt &> full_output.log

# Method 3: Query warnings after import
mysql -u username -p -e "SHOW WARNINGS;" your_database

Typical cases where warnings occur:

# Example 1: Data truncation
mysqlimport --fields-terminated-by=',' --lines-terminated-by='\n' \
--columns='id,name,description' test_db products.csv

# Potential warning:
# Warning 1265 Data truncated for column 'description' at row 42

# Example 2: Duplicate key entries
mysqlimport --ignore test_db duplicate_entries.csv

# Potential warning:
# Warning 1062 Duplicate entry '123' for key 'PRIMARY'

For better warning visibility in older MySQL versions:

  1. Use LOAD DATA INFILE directly in MySQL client with SHOW WARNINGS
  2. Implement a wrapper script to parse mysqlimport output
  3. Consider upgrading to newer MySQL versions with enhanced logging

For advanced troubleshooting:

#!/bin/bash
# Capture return code and warnings
mysqlimport --local test_db data.txt > output.log 2>&1
IMPORT_STATUS=$?

if [ $IMPORT_STATUS -ne 0 ]; then
  echo "Import failed with status $IMPORT_STATUS"
  grep -i "warning" output.log
  mysql -u root -p -e "SHOW WARNINGS;" test_db
fi

When using the mysqlimport command-line tool to load CSV data into MySQL tables, warnings may occur due to data type mismatches, truncated values, or other data integrity issues. Unlike MySQL's interactive mode where SHOW WARNINGS is available, mysqlimport doesn't directly display these warnings by default.

The mysqlimport utility is essentially a wrapper around the LOAD DATA INFILE SQL statement. To capture warnings, you need to:

mysqlimport --verbose --local your_database your_file.csv

However, in MySQL 5.0.5, the --verbose flag might not show warnings as expected. Here's a more reliable method:

Configure MySQL to log warnings during the import process:

# First, check your current log_error setting
mysql -e "SHOW VARIABLES LIKE 'log_error';"

# Then run mysqlimport with logging enabled
mysqlimport --local --verbose your_database your_file.csv 2>&1 | tee import_log.txt

For more control, consider using the MySQL client directly with LOAD DATA:

mysql -e "
USE your_database;
LOAD DATA LOCAL INFILE 'your_file.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
(your,column,names);
SHOW WARNINGS;
"

Even when warnings don't appear directly, you can parse the exit status and output:

if mysqlimport --local your_database your_file.csv; then
    echo "Import successful"
else
    echo "Import failed or had warnings"
    # Check MySQL error logs for details
    tail -n 50 /var/log/mysql/error.log
fi

Typical warnings you might encounter include:

  • Data truncation for VARCHAR/TEXT fields
  • Invalid datetime formats
  • NULL values in NOT NULL columns
  • Duplicate key entries

MySQL 5.0.5 has some limitations in warning reporting. If possible, consider upgrading to a newer version where warning handling is more robust. In later versions, you can use:

mysqlimport --verbose --debug-info your_database your_file.csv