以前一直以为slave同步load data infile是转换成insert into (),(),()...写入slave的,今天发现并非如此,我了解到的情况如下:
Master上执行
mysql> load data INFILE '/tmp/del_proid.txt' INTO table del_proid;
在Binlog中记录的SQL是这样的
load data LOCAL INFILE '/tmp/SQL_LOAD_MB-1-0' INTO table del_proid
并且在/tmp目录中也确实出现了这个文件,内容和del_proid.txt一模一样
同步时,Master的Binlog Dump进程会读取SQL_LOAD_MB-1-0文件的数据传,送给Slave的IO进程写入Relaylog,当Slave同步到该语句时,SQL进程从Relaylog中解出数据,仍以文件名SQL_LOAD_MB-1-0写入slave-load-tmpdir参数打定的目录下,然后执行
load data LOCAL INFILE '/tmp/SQL_LOAD_MB-1-0' INTO table del_proid
完成后,删除该文件
slave-load-tmpdir参数,在默认或未设置的情况下,使用tmpdir参数值