MySQL将输出重定向到文件方法汇总

重定向sql输出

今天在做数据导入的需求的时候,用的source命令,发现差了两条数据,但是source的输出太多,查不到具体的出问题的数据,如何能将日志进行重定向就比较容易定位问题了。

下面是总结的一些方法:

  1. 连接时指定:
mysql -uroot -p -Dtest -tee=/tmp/mysql.log

# 注:这种如果在连接后删除了文件,日志文件不会被重建,除非重新连接
  1. 在mysql终端内执行:
tee /tmp/mysql.log

-- 取消输出到日志
notee
  1. 使用系统重定向:
mysql -uroot -p -e 'select * from t1;' > /tmp/mysql.log
  1. 在mysql终端执行,注意,大于号与系统重定向一样,追加需要用两个:
pager cat > '/tmp/mysql.log'

-- 取消写入
pager
  1. 执行sql的时候:
select * from t1 into outfile '/tmp/mysql.log'

-- 这种方法的输出跟上面的不一样,上面的都是原样输出,和终端上一样,这种的格式默认像是csv

因为我的问题是收集source命令的输出,经测试只有前两种方法可以,第五种执行source会报错,其他的都不行。

update 2019-03-23

在mysql5.7之后添加了个配置项,into outfile这个语句输出的文件目录由该选项指定:

-- [mysqld]下添加配置
secure-file-priv = /tmp

这样into outfile和load data只能指定该目录下的文件。

(完)