shell之数据库操作

shell之数据库操作

前言:
最近的一个任务:shell中执行sql语句并取出执行结果进行简单的逻辑处理。
以下记录一下步骤及过程中遇到的问题。

shell脚本内容介绍

  1. 读取入参
para = $1   #参数1
  1. 获取相关时间
nowday=`date  +%Y%m%d` #当天时间
  1. 数据源配置
source_mysql_host=XXX.XXX.XXX.XXX  #数据库地址
source_mysql_database=test  #数据库名称
source_mysql_user=root  #用户名
source_mysql_password=root  #用户名密码
source_mysql_port=3306   #数据库端口号
  1. 业务相关sql语句
result_info="SELECT path as filePath,name as  fileName  from result where id = \"$1\" "
  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
  1. 逐行逐列取出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 ” 等问题

  1. 检查服务器是否安装msyql服务,此处不做具体介绍。

  2. 若已有服务,仍不可以用,则是因为mysql命令没有与bash命令做关联,找不着命令,此时做一下软连接即可。

ln -s /usr/local/mysql/mysql-5.7.27/bin/mysql  /usr/bin

配置免密传输

我的任务需要跨服务器进行文件传输,为了方便,配置了免密传输。
以下简称两台服务器分别为A、B

  1. 在A生成秘钥对
ssh-keygen -t rsa

说明:
id_rsa:秘钥文件
id_rsa.pub:公钥文件

  1. 查看A上生成的公钥并复制
cat /root/.ssh/id_rsa.pub
  1. 查看B上是否有root/.ssh/authorized_key
    如果有,将A的公钥追加至末尾
    如果没有创建该文件并添加A的公钥

  2. 在A上检查是否配置成功

scp test.txt root@B:/home

注意:

  1. 嵌套语句中各种符号间注意空格

  2. 不同bash版本命令有所差异

  3. 本文bash版本为4.2.46(查询版本命令 bash --version)

本人能力有限,如有不足欢迎指正,希望此篇博文对大家有帮助,手动比芯~ 我的第一篇博客,万事开头难,希望以后越来越好呢~~~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值