注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

不进入mysql,直接执行sql  

2015-03-27 10:51:04|  分类: MySQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

不进入mysql,直接执行mysql sql,这样在shell脚本中查询出结果,比较方便。
如下演示:
[root@racdb ~]# mysql -u root -proot123 -e 'use mysql;select host from user;select user from user;'
Warning: Using a password on the command line interface can be insecure.
+-----------+
| host      |
+-----------+
| %         |
| 127.0.0.1 |
| ::1       |
| localhost |
| racdb     |
| racdb     |
+-----------+
+------+
| user |
+------+
| root |
| root |
| root |
|      |
|      |
| root |
+------+


-e后面的sql可以用单引号,也可以是双引号,如果只是一个单词的命令,也可以不用引号,如下:
[root@racdb ~]# mysql -u root -proot123 -e status;
Warning: Using a password on the command line interface can be insecure.
--------------
mysql  Ver 14.14 Distrib 5.6.23, for Linux (x86_64) using  EditLine wrapper

Connection id:          17
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.6.23-log Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /usr/local/mysql/mysql.sock
Uptime:                 17 hours 29 min 2 sec

Threads: 1  Questions: 94  Slow queries: 0  Opens: 87  Flush tables: 1  Open tables: 80  Queries per second avg: 0.001


如果执行的sql很多,也可以写到一个文件中,每行一条sql,如下测试:
MySQL非交互执行文件中的sql:
[mysql@biee ~]$ cat 1.sql 
use test;
select count(1) from t_arc1;

[mysql@biee ~]$ mysql -usystem -p123456 -S /data/mysqldata/3306/mysql.sock -e "source /home/mysql/1.sql" -f
-e非交互模式  -f 遇到错误强制执行
Warning: Using a password on the command line interface can be insecure.
+----------+
| count(1)  |
+----------+
|     1737    |
+----------+


其他相关实现:
1.通过EOFt实现
mysql -usystem -p'123456' -S /data/mysqldata/3306/mysql.sock << EOF
show databases;
EOF 
提示:此法适合多行字符串比较多的时候。

2.通过echo实现
echo "show databases;" | mysql -usystem -p'123456' -S /data/mysqldata/3306/mysql.sock 
提示:此法适合单行字符串比较少的情况。

特殊生产场景应用:
例一:mysql自动批量制作主从同步需要的语句。
mysql -uroot -p'oldboy' -S /data/3308/mysql.sock<< EOF
 CHANGE MASTER TO  
 MASTER_HOST='10.0.0.16', 
 MASTER_PORT=3306,
 MASTER_USER='system', 
 MASTER_PASSWORD='123456', 
 MASTER_LOG_FILE='mysql-bin.000065'
 MASTER_LOG_POS=2269; 
EOF

例二:mysql线程中,“大海捞针”
   平时登陆数据库show processlist;,发现结果经常超长,找自己要看的的比较困难,而且,
SQL显示不全。如果直接执行show full processlist那更是瞬间滚了N屏。找到有问题的SQL语句非常困难。

现在可推荐如下语句。
mysql -usystem -p'123456' -S /data/mysqldata/3306/mysql.sock -e "show full processlist;"|grep -v Sleep
过滤当前执行的SQL语句完整内容,这条命令很有用。不知道你能否体会到。后面还可以加iconv等对中文转码,
根据需求过滤想要的内容,此命令屡试不爽啊。
  评论这张
 
阅读(1560)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018