如何在Bash脚本中实现MySQL状态数据的条件化增删改操作?
在Bash脚本中实现MySQL状态数据的条件增删改操作
一、优化你的插入脚本(避免重复+提升效率)
你提供的插入脚本存在重复插入IP、循环内重复连接数据库等问题,以下是优化后的版本,同时加入避免重复插入的条件逻辑:
#!/bin/bash # 数据库配置 DB_USER='root' DB_PASSWD='' DB_NAME='iplist' TABLE='iplist' # 下载Arvancloud IP列表 echo "Downloading Arvancloud IPs list..." rm -f ip.txt curl https://www.arvancloud.ir/fa/ips.txt >> ip.txt # 获取当前完整时间(适配MySQL datetime类型) current_datetime=$(date +"%Y-%m-%d %H:%M:%S") status="up" # 批量处理IP,一次性连接数据库执行所有操作 mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME << EOF $(while read -r IPLIST; do # 跳过空行 [[ -z "$IPLIST" ]] && continue # 带条件插入:IP存在则更新状态和时间,不存在则插入 echo "INSERT INTO $TABLE (\`IPLIST\`, \`status\`, \`DATE\`) VALUES ('$IPLIST', '$status', '$current_datetime') ON DUPLICATE KEY UPDATE \`status\` = '$status', \`DATE\` = '$current_datetime';" done < ip.txt) EOF echo "IP status data synced successfully."
关键优化说明:
- 避免重复插入:使用
ON DUPLICATE KEY UPDATE,需要先给IPLIST字段设置唯一索引(执行SQL:ALTER TABLE iplist ADD UNIQUE INDEX idx_ip (IPLIST);) - 提升效率:仅建立一次MySQL连接,批量执行所有SQL语句
- 鲁棒性:用
read -r读取IP,避免特殊字符解析问题;跳过空行
二、带条件的更新操作
1. 更新指定IP的状态
target_ip="185.143.232.0" new_status="down" update_datetime=$(date +"%Y-%m-%d %H:%M:%S") mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME << EOF UPDATE $TABLE SET \`status\` = '$new_status', \`DATE\` = '$update_datetime' WHERE \`IPLIST\` = '$target_ip'; EOF
2. 批量更新超时IP的状态
比如将3小时未更新的IP状态改为unknown:
update_datetime=$(date +"%Y-%m-%d %H:%M:%S") three_hours_ago=$(date -d "-3 hours" +"%Y-%m-%d %H:%M:%S") mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME << EOF UPDATE $TABLE SET \`status\` = 'unknown', \`DATE\` = '$update_datetime' WHERE \`DATE\` < '$three_hours_ago'; EOF
三、带条件的删除操作
1. 删除指定状态的IP
比如删除所有状态为down的IP:
mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME << EOF DELETE FROM $TABLE WHERE \`status\` = 'down'; EOF
2. 删除超时的历史数据
比如删除24小时前的状态数据:
twentyfour_hours_ago=$(date -d "-24 hours" +"%Y-%m-%d %H:%M:%S") mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME << EOF DELETE FROM $TABLE WHERE \`DATE\` < '$twentyfour_hours_ago'; EOF
内容的提问来源于stack exchange,提问作者Ali Nedaeitoosi
相关产品推荐
相关产品推荐

