shell中执行 mysql 使用tee 返回执行结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell中执行 mysql 使用tee 返回执行结果相关的知识,希望对你有一定的参考价值。
方式1
mysql -uroot -p --tee=/root/Desktop/xxxx.log -e " create table test.db (id integer);"
方式2
echo " create table test.db (id integer);" |mysql -uroot -p --tee=/root/Desktop/xxxx.log
方式3
mysql -uroot -p -e "tee /root/Desktop/xxxx.log;create table test.db (id integer); notee;"
方式4
mysql -uroot -p << EOF
tee /root/Desktop/xxxx.log
create table test.db6(id integer);
notee
EOF
为什么 tee只有在 进入mysql 后
mysql>
这样情况下才会有记录
是啊 我知道是mysel的tee 但为什么没有效果?
追答tee只支持在交互模式下,不支持batch(批)模式下!你可以查一下mysql的帮助文档,有说明的
追问那就是说若是想得到返回情况只能是通过shell的返回值 来判定了么回复
追答是的,判断$?的值 非0为失败
追问谢谢啦
追答不客气
本回答被提问者采纳 参考技术B mysql -uroot -p123456 -Dmysql -e "select user,password,host from user;" > log.txt追问这个是输出查询记录,我要的是执行操作记录 如create load 之类
参考技术C本文介绍 MySQL 8.0 shell 子模块 Util 的两个导入特性 importTable/import_table(JS和python 版本的命名差异)、importJson/import_json的使用方法。
其中 import_table 是通过传统 MySQL 协议来通信,Import_json 是通过 X 插件协议来通信。MySQL 一直以来提供导入文件 SQL 命令 load data infile(单线程)以及对应的可执行文件 mysqlimport(多线程)。
比如我导入 100W 行示例数据到表 ytt.tl1,花了 24 秒。这个已经是 MySQL 默认导入来的最快的。分析那我们现在看下 mysqlimport 工具的升级版,mysqlshell 的 util 工具集。
使用这两个工具之前,必须得临时开启 local_infile 选项。1. import_table建立 3306 端口的新连接我这里切换为 python 模式清空掉示例表 Ytt.tl1import_table 有两个参数,第一个参数定义导入文件的路径,第二个定义相关选项,比如导入的格式,并发的数量等。定义文件路径(参数1)定义选项(参数2)执行导入:只花了不到 17 秒,比传统 mysqlimport 快了不少。
我们上面指定了显式指定了字段分隔符,那有没有已经定义好的组合格式呢? 答案是有的,选项 dialect 可以指定以下格式:csv,tsv,json,csv-unix那么上面的导入,我们可以更简单,改下变量 y_options1 的定义导入时间差不多。这里要说明下,dialect 选项的优先级比较低,比如添加了'linesTerminatedBy':'\\r\\n', 则覆盖他自己的'\\n'。
选项 diaelect 还有一个可选值为 json,可以直接把 json 结果导入到文档表里。比如我新建一张表 tl1_json重新定义文件以及导入选项。导入 JSON 数据速度也还可以,不到 24 秒。那导入 json 数据,就必须得提到以 X 插件协议通信的工具 import_json了。2. imort_json我们切换到 mysqlx 端口import_json 参数和 Import_table 参数类似,这里我改下选项我在手册上没有看到多线程的选项,所以单线程跑 35 秒慢了些。查看刚刚导入的数据import_json 不仅仅可以导入 Json 数据,更重要的是可以在 BSON 和 JSON 之间平滑的转换,有兴趣的同学可以去 TRY 下。
shell运行下的写日志
tee -a file //追加
tee - //输出到标准输出两次
tee - - //输出到标准输出三次
tee file1 file2 - //输出到标准输出两次,并写到那两个文件中
ls | tee file
另:把标准错误也被tee读取
ls "*" 2>&1 | tee ls.txt
例子1:
#!/bin/sh if [ $# -ne 1 ] then echo "Usage:sh $0 YYYYMMDD " exit 1 fi V_DT=$1 exec 1>>`basename $0`.log date_current=`date +%Y%m%d` echo "传入时间为: ${V_DT}" echo "系统时间为: ${date_current}" exit 0
#!/bin/sh
if [ $# -ne 1 ]
then
echo "Usage:sh $0 YYYYMMDD "
exit 1
fi
V_DT=$1
date_current=`date +%Y%m%d`
echo "传入时间为: ${V_DT}" >> $(basename $0).log
echo "系统时间为: ${date_current}" >> $(basename $0).log
echo "tee commant test" 2>&1|tee -a $(basename $0).log --日志和屏幕都存在
exit 0
[[email protected] test]$ sh test.sh 20181010 [[email protected] test]$ sh test2.sh 20181010 tee commant test [[email protected] test]$ more test2.sh.log 传入时间为: 20181010 系统时间为: 20181029 tee commant test
以上是关于shell中执行 mysql 使用tee 返回执行结果的主要内容,如果未能解决你的问题,请参考以下文章