On a MySQL server, I launched the following command

load data local infile '/tmp/bar' into table foo . bar ;

The command was running for quite some time, and I was looking for a fast way to know its progress, withouth having to restart it or reload MySQL server changing some option.

The idea is to find how much of /tmp/bar MySQL has read.

First, lets find mysql PID:

$ pgrep mysql 1337

Then, lets find /tmp/bar file descriptor in /proc

$ ls -l /proc/1337/fd |grep /tmp/bar total 0 lr-x------. 1 user user 64 Oct 10 21:55 4 -> /tmp/bar

This is file descriptor #4.

fdinfo allows to know more about file descriptor #4.

$ cat /proc/1337/fdinfo/4 pos: 84443136 flags: 0100000 mnt_id: 650

The first line gives us the read position in the file. We then just have to divide it by the total size of the file:

$ echo $[ $( cat /proc/1337/fdinfo/4|head -1 |sed 's/.*\t//' ) 00 \ / $( ls -nl /tmp/bar | awk '{print $5}' ) ] % 42%

So 42% of the file was processed !