碰到了需要批量搜索替换网站数据库里网址的小问题,之前都是在phpMyAdmin里直接SQL语句完成的,但需要一个数据库表一个数据库表的去搜索替换,感觉太麻烦了。就想到了用Linux脚本来实现,经过优化和实测后感觉还不错,就当做笔记给大家分享一下了。
#!/bin/bash
# 数据库配置
DB_NAME="数据库名称"
DB_USER="数据库用户名"
DB_PASS="数据库密码"
# 查找和替换的字符串
SEARCH_STR="要搜索的关键词"
REPLACE_STR="要替换的关键词"
# 获取所有表名
TABLES=$(mysql -u $DB_USER -p$DB_PASS -D $DB_NAME -BN -e "SHOW TABLES;")
# 遍历每个表
for TABLE in $TABLES; do
# 获取表的列名
COLUMNS=$(mysql -u $DB_USER -p$DB_PASS -D $DB_NAME -BN -e "SHOW COLUMNS FROM $TABLE;" | awk '{print $1}')
# 遍历每个列
for COLUMN in $COLUMNS; do
# 使用反引号将列名括起来
mysql -u $DB_USER -p$DB_PASS -D $DB_NAME -e "UPDATE $TABLE SET \`$COLUMN\` = REPLACE(\`$COLUMN\`, '$SEARCH_STR', '$REPLACE_STR');"
# 检查上一条命令是否成功
if [ $? -ne 0 ]; then
echo "Error updating table $TABLE, column $COLUMN"
exit 1
fi
done
done
echo "Update completed successfully."
本脚本分别在MySQL和MariaDB下测试实践过, 只需要在终端编辑保存为data.sh执行即可:
bash data.sh
如果数据库庞大,可能执行需要些时间,请耐心等待哦!
本脚本没有系统依赖,无论是SSH远程终端还是宝塔面板里的终端都可以运行的,相对于phpMyAdmin里更加的安全高效!
小林博客





