shell之数据库操作
前言:
最近的一个任务:shell中执行sql语句并取出执行结果进行简单的逻辑处理。
以下记录一下步骤及过程中遇到的问题。
shell脚本内容介绍
- 读取入参
para = $1 #参数1
- 获取相关时间
nowday=`date +%Y%m%d` #当天时间
- 数据源配置
source_mysql_host=XXX.XXX.XXX.XXX #数据库地址
source_mysql_database=test #数据库名称
source_mysql_user=root #用户名
source_mysql_password=root #用户名密码
source_mysql_port=3306 #数据库端口号
- 业务相关sql语句
result_info="SELECT path as filePath,name as fileName from result where id = \"$1\" "
- 执行sql
mysql -u${source_mysql_user} -p${source_mysql_password} -P${source_mysql_port} -h
${source_mysql_host} ${source_mysql_database} -e "$result_info" > $base_path/${nowday}_sql.txt
- 逐行逐列取出sql执行结果并做逻辑处理
count=0 #用于读sql结果表头(即第一行)时不做逻辑处理
while read filePath fileName;
do
if [ $count -ge 1 ];then
if [ ! -d "${nowday}/${fileName}" ];then
mkdir -p ${fileName}/${nowday}
fi
if [ -n "${filePath}" ];then
scp root@XXX.XXX.XXX.XXX:${filePath} ${nowday}/${fileName} #此处为无密传输
...... #根据业务自行扩充
fi
fi
count=`expr $count + 1`
done < $base_path/${nowday}_sql.txt
检验服务器上msyql命令是否可用
执行脚本可能会遇到 “mysql command not found ” 等问题
-
检查服务器是否安装msyql服务,此处不做具体介绍。
-
若已有服务,仍不可以用,则是因为mysql命令没有与bash命令做关联,找不着命令,此时做一下软连接即可。
ln -s /usr/local/mysql/mysql-5.7.27/bin/mysql /usr/bin
配置免密传输
我的任务需要跨服务器进行文件传输,为了方便,配置了免密传输。
以下简称两台服务器分别为A、B
- 在A生成秘钥对
ssh-keygen -t rsa
说明:
id_rsa:秘钥文件
id_rsa.pub:公钥文件
- 查看A上生成的公钥并复制
cat /root/.ssh/id_rsa.pub
-
查看B上是否有root/.ssh/authorized_key
如果有,将A的公钥追加至末尾
如果没有创建该文件并添加A的公钥 -
在A上检查是否配置成功
scp test.txt root@B:/home
注意:
-
嵌套语句中各种符号间注意空格
-
不同bash版本命令有所差异
-
本文bash版本为4.2.46(查询版本命令 bash --version)
本人能力有限,如有不足欢迎指正,希望此篇博文对大家有帮助,手动比芯~ 我的第一篇博客,万事开头难,希望以后越来越好呢~~~