通过shell脚本 动态批量导出mysql 数据

一般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 的注释 -- 

猜你喜欢

转载自blog.csdn.net/u013240609/article/details/81748442
今日推荐