【问题标题】:create mysql backups using shell script on ubuntu server在 ubuntu 服务器上使用 shell 脚本创建 mysql 备份
【发布时间】:2022-01-17 15:04:04
【问题描述】:

我有一个在 ubuntu 服务器上运行的 mysql 服务器。在 mysql 服务器上,我有一个包含一些架构和表的数据库。我每天运行一个带有 cron 作业的 mysql_backup.sh 文件来创建我的 mysql 数据库的备份。 mysql_backup.sh 文件包含以下脚本。我检查并注意到,当 mysql_backup.sh 文件运行时,它似乎创建了一个只有几行一般 mysql 函数描述的文件。我在下面包含了 mysql_backup.sh 文件创建的一些示例输出。有谁看到我做错了什么,你能建议如何修改 mysql_backup.sh 脚本,以便它创建数据库的 mysql 备份吗?

mysql_backup.sh

代码:

#!/bin/bash
mysqldump -u root -p psswd --all-databases > /home/mysql_backups/backup_$(date +%F.%H%M%S).sql

当前输出示例:

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

【问题讨论】:

    标签: mysql shell ubuntu-server


    【解决方案1】:

    如果您将密码放在带有-p 标志的命令行上,则-p 和密码之间不能有空格。 -p 标志后面有一个空格,表示它将提示您输入密码,而不是从下一个参数中获取。下一个参数将被解释为要备份的模式的名称,但由于您还使用了--all-databases,这会混淆 mysqldump。

    为了使用法更清晰,我建议使用这样的长标志:

    #!/bin/bash
    mysqldump --user=root --password=psswd --all-databases > /home/mysql_backups/backup_$(date +%F.%H%M%S).sql
    

    或者更好的是,根本不要将凭据放在命令行上。将它们放入options file

    【讨论】:

    • 感谢您就此事回复我。我将脚本更改为“#!/bin/bash mysqldump --user=root --password=psswdd --all-databases >/home/mysql_backups/backup_$(date +%F.%H%M%S)。 sql" 正如你所建议的,但现在它只是输出一个空白文件。还有什么我做错了吗?
    • 听起来是的,如果它没有给出输出。我猜你的密码不是字面上的“psswdd”。如果您的密码包含某些特殊字符,则它可能与 shell 元字符冲突。见stackoverflow.com/a/57171921/20860
    • 谢谢,是的,我的密码确实有!和号码。关于如何处理的任何建议?
    • 把它放在单引号中以保护它免受外壳扩展:--password='yadda!yadda'
    • 谢谢你成功了!
    猜你喜欢
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2014-10-19
    • 2018-05-31
    • 2014-01-21
    • 2015-11-03
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多