一般mysql导出数据会使用select into outfile 导出,这种方式只有在命令行模式下才能把文件生成 到本地,如果通过存储过程执行,文件会生成到mysql数据库所在的主机上。
这个时候如果你需要动态配置查询条件来导出文件,就会变得很麻烦。这种情况下,可以使用shell脚本来解决这个问题 ,具体shell脚本如下:
####MYSQL数据库账号
MYSQL_USER=root
MYSQL_PWD=****
MYSQL_NAME=mtg
MYSQL_HOST=XXX.XXX.XXX.XXX
MYSQL_PORT=3306
function exp_mysql_data()
{
#statement="select * from member;"
statement=$1
mysql -u${MYSQL_USER} -p${MYSQL_PWD} -P${MYSQL_PORT} -h${MYSQL_HOST} -D${MYSQL_NAME} >1.log << EOF
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
$statement
EOF
#cat the 1.log file and convert it to csv file
cat 1.log | while read line
do
echo $line | tr " " ","
#done > /exp.csv
done > $2
rm 1.log
}
通过调用函数时传入的查询语句和 导出文件名,轻松批量动态导出数据文件。
另附shell 脚本下 执行sql语句块的 代码示例
function excute_mysql()
{
mysql -u${MYSQL_USER} -p${MYSQL_PWD} -P${MYSQL_PORT} -h${MYSQL_HOST} -D${MYSQL_NAME} <<!
delete from cdr_table where yearmonth= ${_INSERT_MONTH};
-- 这是注释
update cdr_table a set file_name = concat(yearmonth,'_',CUST_ID,'.tar.gz');
update cdr_table a set member_id = '0';
update cdr_table a set file_path = 'cdr_download/';
commit;
!
}
当然 感叹号内 包住的 文本可以通过参数传进来,将函数打包成公共 函数。
此外在这个范围内还能使用mysql 的注释 --