如何通过命令行捕获MySQL完整执行日志(含耗时、告警报错)
MySQL非交互模式获取完整执行输出的方法
你当前只拿到SQL回显没有执行结果,是因为单-v参数仅开启SQL语句回显,要拿到和交互模式source命令一致的完整输出,只需要调整命令参数即可:
方案1:直接修改原有执行命令
将原命令中的-v替换为-vvv(三重冗余模式),同时合并标准错误输出避免遗漏告警/报错:
mysql -uuser -ppassword db -vvv -c --show-warnings -e \ "alter table A engine=InnoDB; alter table B engine=InnoDB; alter table C engine=InnoDB; alter table D engine=InnoDB;" 2>&1 | tee alter_exec.log
参数说明:
-vvv:开启最高级别的冗余输出,会自动打印每条SQL的执行状态、影响行数、执行耗时、告警信息,和交互模式输出完全一致2>&1:将标准错误流(包含密码安全提示、运行时错误)合并到标准输出,避免信息遗漏tee alter_exec.log:同时将输出打印到屏幕和写入日志文件,不需要屏幕输出可替换为> alter_exec.log 2>&1
方案2:通过SQL文件执行(和source效果完全一致)
先将所有待执行SQL写入alter.sql文件:
alter table A engine=InnoDB; alter table B engine=InnoDB; alter table C engine=InnoDB; alter table D engine=InnoDB;
再执行以下命令:
mysql -uuser -ppassword db -vvv -c --show-warnings < alter.sql 2>&1 | tee alter_exec.log
该方式得到的输出和你在MySQL交互客户端执行source alter.sql的结果完全一致。
可选优化:消除密码安全警告
如果不需要命令行的密码提示警告,可以在用户目录下创建.my.cnf配置文件存储登录信息:
[client] user=your_username password=your_password database=your_db_name
修改文件权限避免泄露:
chmod 600 ~/.my.cnf
后续执行命令时不需要再输入账号密码,也不会出现密码安全提示:
mysql -vvv -c --show-warnings < alter.sql 2>&1 | tee alter_exec.log
内容的提问来源于stack exchange,提问作者user3299633
相关产品推荐
相关产品推荐

