混合使用SQL和shell命令

mysql下可以用批处理模式运行SQL,比如:

shell> mysql -h host -u user -p < batch-file.sql
Enter password: ********

但是平常往往需要在执行sql的同时,运行一些shell脚本进行进一步计算,保存日志之类的。这个可以靠mysql的system命令来实现,例如:

# Mixing shell commands and SQL queries in batch mode- demo script
use test;
#INSTALL PLUGIN example SONAME 'ha_example.so'; #Ignore statement
system cp /tmp/mysqld.trace logs/init.trace # Shell commands prefixed with a 'system'
create table new4(num integer) engine=EXAMPLE;
system cp /tmp/mysqld.trace logs/after_create.trace # Shell commands prefixed with a 'system'
system diff logs/init.trace logs/after_create.trace # Shell commands prefixed with a 'system'

注意

  • system命令只在类unix操作系统上有效。
  • 可以在存储过程中使用system。

在命令行里执行mysql的sql

平常执行sql,需要登录到mysql的shell下,然后再执行。比如:

$ /usr/bin/mysql -u root
mysql> select * from users;

但是如果写一点简单的脚本,也可以在命令行下直接运行sql并显示结果,比如:


$ cat executemysql.sh
#!/bin/sh

qry=$1;

echo "Executing the following query"
echo "$qry"

mysql -u root << eof
$qry
eof

运行一下:

$ ./executemysql.sh "select id,name,age from test.users limit 2"
Executing the following query
select id,name,age from test.users limit 2
id name age
3 john 20
4 tom 21

原文:Execute mysql from bash script