如何制作一个可执行文件来更新mysql数据库?

Moi*_*nGK 3 mysql database

我有一个托管我的 Web 应用程序的 Ubuntu 服务器。

但由于某些安全原因,它无法通过 Internet 看到。客户需要更新数据库并更新其中的一些值,但由于相同的安全原因,我不再允许在那里,所以他们要求我创建一个可执行文件(如 Windows 中的批处理文件)来更新数据库,手动并向当局解释,以便他们更新数据库。

假设我有一个名为myDb的数据库,用户说myUsermyPassword,我需要执行以下查询:

UPDATE myDb.member SET member_creditDueDate='2025-09-21 12:00:00';
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Ben*_*oit 6

制作命令脚本

如果您必须创建的脚本只是由有权访问服务器的人按原样执行,并且如果要放入数据库的数据已交付给您(因此没有动态),您将不得不制作一个 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    
Run Code Online (Sandbox Code Playgroud)

将上述所有内容复制到一个可以调用dataUpload.sh 的测试文件中,然后使其可执行:sudo chmod +x dataUpload.sh

这个脚本有什么作用?

  1. 检查您是否提供了一个强制性参数:包含用于更新数据库中数据的 SQL 命令的文本文件的路径(见下文)
  2. 检查参数中给出的文件是否可被脚本访问
  3. 使用凭据设置一些变量以连接到数据库(请注意,这里是一种快速方法,不考虑某些安全方面:例如,密码将在脚本和进程列表中以明文形式可见 -ps -ef或者ps auxwww当脚本将运行。您可能会寻找更安全的方法)
  4. 使用命令行mysql客户端将 SQL 文件的 SQL 命令加载到 DB 中。

一个 SQL 命令文件

这个 SQL 命令文件只是一个文本文件,包含所有 SQL 命令INSERTUPDATE数据,如果您可以访问服务器,您将自己完成。一行一行的命令,如本例所示:

UPDATE myDb.member SET member_creditDueDate='2025-09-21 12:00:00';
UPDATE myDb.member SET member_credutDueDate='2025-10-11 00:00:00';
Run Code Online (Sandbox Code Playgroud)

等等。

如果您编写一个文件,比如说,名为20140620_dbupdate.sql,那么有权访问数据库的人只需dataUpload.sh 20140620_dbupdate.sql在命令行提示符下执行即可。

通过拆分 shell 和 SQL 命令,您可以:

  1. 轻松测试将数据加载到数据库中的逻辑
  2. 只传递一次可执行脚本
  3. 对于以后的更新,只需专注于构建 SQL 命令文件

更多事情要做

这是解决您的问题的第一个快速方法,为了详尽无遗,我需要涵盖:

  • 保护密码
  • 使用 SQL 事务
  • 脚本中的更多错误检测和报告