想要一个单独的文件来存储mysql用户名、密码和数据库名称

想要一个单独的文件来存储mysql用户名、密码和数据库名称

我有一个转储 MySQL 数据库并压缩文件的脚本。我想要做的是有另一个(编辑)文件可以更改用户名、密码和数据库名称。然后以某种方式将该文件连接到该脚本。

在另一个文件中,我想要一些内容,例如。

username =  "username"
password = "password"
database = c2duo_db

然后在脚本名称中mysql备份.sh有些从文件导入用户名密码和数据库。

#!/bin/sh

mysqldump -u"username" -p"password" --opt c2duo_db > /home/sh/c2duo_db-`date +%d%m%Y`.sql

cd /home/sh
tar -zcvf c2duo_db-`date +%d%m%Y`.tar.gz  *.sql

答案1

您可以使用以下source命令轻松完成此操作,将另一个文件的内容导入到当前 shell 环境(在您的情况下是您的脚本)并在那里运行它。

db.conf

username="username"
password="password"
database="database"

在你的脚本中:

#!/bin/sh

source /path/to/db.conf
cd /home/sh
dumpfile_name=$database-$(date +%d%m%Y).sql

mysqldump -u"$username" -p"$password" --opt "$database" > $dumpfile_name
gzip $dumpfile_name

笔记:

  • =分配 shell 变量时,切勿在赋值运算符后面添加空格!
  • 我做了一些事情来清理你的代码。我没有像您那样将新转储添加到单个 tar 文件中。我确实展示了如何压缩单个文件。如果您想将其打包,以便将它们全部放在一个存档中,您也可以这样做,但我发现单独的压缩转储文件非常有用。
  • 我将cd操作移到命令之前,mysqldump这样您就不必指定输出文件的路径,因为那是当前目录。只是保存重复的代码。

编辑:即使完成了这一步,对我来说这似乎也是一个不成熟的解决方案。您可能对如何使用参数传递值感兴趣。例如,您可以从上面的脚本中取出配置文件的硬编码路径,并将其替换为:

#!/bin/sh

source "$1"
cd /home/sh
[...] # rest of script as above

然后你可以像这样执行它./mysqlbackup.sh /path/to/db.conf。您甚至可以更进一步,将其全部编写在一个脚本中,并提供所有三个值作为参数:

#!/bin/sh

username="$1"
password="$2"
database="$3"
cd /home/sh
[...] # rest of script as above

...并称其为./mysqlbackup.sh username password database.

答案2

您可以将第一个文件更改为:

s/username/joe/
s/password/secret/
s/database/c2duo_db/g

将其存储为 db.sed,并使用

sed -f db.sed mysqlbackup.sh > joeSqlbackup.sh

对于不同的用户/密码和数据库,您将生成不同的 sed 脚本。

相关内容