我有一个 Ubuntu 服务器,用于托管我的 Web 应用程序。
但是由于某些安全原因,它无法通过互联网查看。客户需要更新数据库并更新其中的一些值,但由于同样的安全原因,我不再被允许在那里,所以他们要求我创建一个可执行文件(如 Windows 中的批处理文件),该文件将更新数据库,将其交给当局并向他们解释,以便他们可以更新数据库。
假设我有一个数据库名为我的数据库用户说我的用户和我的密码,我需要执行这个查询:
UPDATE myDb.member SET member_creditDueDate='2025-09-21 12:00:00';
我怎样才能做到这一点?
答案1
制作命令脚本
如果您要创建的脚本只是为了由有权访问服务器的人员按原样执行,并且要放入数据库的数据已交付给您(因此没有任何动态),那么您必须创建如下 bash 脚本:
#!/bin/bash
if [ "x$1" == "x" ]; then
echo "Usage: $0 <SQL commands file>"
exit 1
fi
if [ ! -f "$1" ]; then
echo "The file specified in parameter ($1) does not exist or is not readable"
exit 2
fi
USER=myUser
PASS=myPassword
DB=myDB
SERVER=ipMysql
mysql -u$USER -p$PASS -h$ipMysql $DB < $1
将以上所有内容复制到一个可以调用的测试文件中数据上传脚本然后 使 之 可执行 : sudo chmod +x dataUpload.sh
.
这个脚本起什么作用?
- 检查您是否给出了一个强制性参数:包含用于更新数据库中数据的 SQL 命令的文本文件的路径(见下文)
- 检查参数中给出的文件是否可被脚本访问
- 设置一些带有凭证的变量来连接到数据库(请注意,这是一种快速方法,没有考虑一些安全方面:例如,密码将以明文形式显示在脚本和进程列表中 -
ps -ef
或者ps auxwww
脚本运行时。您可以寻找更安全的方法) - 使用命令行客户端将 SQL 文件的 SQL 命令加载到数据库中
mysql
。
SQL 命令文件
此 SQL 命令文件只是一个文本文件,其中包含您自己可以访问服务器时需要执行的所有 SQL 命令INSERT
或数据。一行一行地输入命令,如本例所示:UPDATE
UPDATE myDb.member SET member_creditDueDate='2025-09-21 12:00:00';
UPDATE myDb.member SET member_credutDueDate='2025-10-11 00:00:00';
等等。
如果你写了一个文件,比如说,名为20140620_数据库更新.sqldataUpload.sh 20140620_dbupdate.sql
,那么有权访问数据库的人只需在命令行提示符下执行即可。
通过拆分 shell 和 SQL 命令,您可以:
- 轻松测试将数据加载到数据库的逻辑
- 仅传递一次可执行脚本
- 对于以后的更新,只需专注于构建 SQL 命令文件
还有更多事情要做
这是解决您的问题的第一个快速方法,为了详尽起见,我需要涵盖:
- 确保密码安全
- 利用 SQL 事务
- 脚本中更多的错误检测和报告
答案2
您是否尝试过shell 脚本这与 Windows 中的批处理脚本相同(但功能更强大)