在shell脚本中连接mysql并进行相关操作

本文介绍了如何使用Shell脚本连接MySQL数据库并执行各种操作,包括创建表、插入数据和读取文件内容。通过封装函数和使用here文档,提高了数据库操作的效率和准确性。示例脚本展示了如何处理SQL语句,以及如何从文本文件读取数据并进行插入操作。

在实际使用中,有时候需要定时的对数据库进行一些重复的操作。这样通过脚本的方式能更好的降低出错率并提高速度

连接数据库,我们可以封装一个函数来操作。方便进行数据的传递。将相关参数进度对应的传递。分析脚本我们可以知道就是将sql脚本以here文档的格式传递给mysql。

do_mysql(){
    mysql -h${host} -P${port} -u${account} -p${password} -D${database} -N -r -B << EOF
    ${1}
EOF
    }

那么我们就可以使用另一种直接传递文件的格式去传递sql语句

mysql -u ${account} -p${password} < table.sql

sql脚本的内容: use test; INSERT INTO media_session_20220831 (`session`, `meida_type`) VALUES(181026278212063, 'video');
对比会发现直接写在shell里的语句还是有区别的。在shell脚本中。符合’`'引起来的东西会被当做命令去解析。
也可以这样

echo "show databases;" | mysql -uroot -p123456

读取文件内容的方式,通过while循环实现

while read line
do 
   echo $line
   media_type=`echo $line|awk '{print $2}'`
done < media_session.txt
  • 每次读取文件的一行信息
  • 行信息中列信息的获取使用awk来实现

整体的使用方式

#!/bin/bash

#连接mysql
database=test
host=ip
port=3306
account=root
password=password
table_media=media_session_$(date +%Y%m%d)
table_data=statics_data_$(date +%Y%m%d)

#txt数据文件的路径及文件名
script=${1:-"media_session.txt"}

do_mysql(){
    mysql -h${host} -P${port} -u${account} -p${password} -D${database} -N -r -B << EOF
    ${1}
EOF
    }


#连接数据库并执行
create_tables(){
mysql -u ${account} -p${password} <<EOF 
use ${database};
CREATE TABLE ${table_media} (
session varchar(255) COLLATE utf8_bin DEFAULT NULL,
meida_type varchar(255) COLLATE utf8_bin DEFAULT NULL,
id bigint(12) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;;
show tables;
EOF
}

# 插入session和media的关系
insert_data(){
while read line
do 
   media_type=`echo $line|awk '{print $2}'`
   session=`echo $line|awk '{print $1}'` 
#   echo ${session}
#   echo ${media_type}
   do_mysql "INSERT INTO ${table_media} (session, meida_type) VALUES(${session}, '${media_type}');"
done < ${script}

}



# 生成数据
static_data(){
do_mysql "CREATE TABLE ${table_data}  as select 
a.session '会话id',
case b.dial_type when 1 then '外呼'
when 2 then '入呼' else '其他' end '呼叫类型',
b.ani '主叫',
b.dnis '被叫',
b.meeting_create_time '呼叫时间',
case a.meida_type when 'audio' then '音频' 
when 'video' then '视频' else '其他'  end '媒体类型'
 from test.${table_media} a left join vcc.t_meeting_detail b on a.session=b.session_id;"
}


create_tables
insert_data
static_data

在 Linux Shell 脚本中调用 MySQL 命令传递变量,通常涉及使用 `mysql` 命令行客户端结合 Shell 脚本变量替换机制。以下是一个完整的实现方式: ### 通过 Shell 脚本变量构建 SQL 语句 Shell 脚本支持将变量插入命令中,进而构建动态 SQL 语句。可以使用双引号包裹 SQL 语句,通过 `$变量名` 的方式将变量值插入语句中。例如: ```bash #!/bin/bash # 定义变量 USER="root" PASSWORD="your_password" DATABASE="test_db" TABLE="users" ID=1 # 执行 SQL 查询 mysql -u $USER -p$PASSWORD $DATABASE -e "SELECT * FROM $TABLE WHERE id = $ID;" ``` 上述脚本通过 Shell 变量 `TABLE` 和 `ID` 动态构建 SQL 查询语句,MySQL 命令行中执行[^1]。 ### 使用变量执行带参数的写操作 对于 `INSERT`、`UPDATE` 或 `DELETE` 等写操作,同样可以通过变量传参的方式实现。例如: ```bash #!/bin/bash USER="root" PASSWORD="your_password" DATABASE="test_db" NAME="Alice" AGE=30 mysql -u $USER -p$PASSWORD $DATABASE -e "INSERT INTO users (name, age) VALUES ('$NAME', $AGE);" ``` 该脚本Shell 变量 `NAME` 和 `AGE` 插入到 `INSERT` 语句中,执行插入操作[^1]。 ### 防止 SQL 注入与特殊字符处理 当变量内容可能包含特殊字符(如单引号 `'`)时,应进行转义处理。Shell 脚本中可以使用 `sed` 或其他文本处理工具对变量内容进行清理或转义,以防止 SQL 注入或语法错误。例如: ```bash NAME=$(echo "$NAME" | sed "s/'/''/g") ``` 该命令将变量 `NAME` 中的单引号替换为两个单引号,以符合 SQL 语法要求。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值