我想知道在没有提示密码的情况下执行数据库mysqldump的命令。

原因: 我想运行一个cron作业,每天对数据库进行一次mysqldump。因此,当提示时,我将无法插入密码。

我怎么解决这个问题呢?


当前回答

你可以通过4个简单的步骤来实现这一点

创建目录存储脚本和DB_backups 创建~ / .my.cnf 创建一个~/.script.sh shell脚本来运行mysqldump 添加cronjob来运行mysql转储。

下面是详细的步骤

步骤1

使用sudo mkdir ~/backup在主目录上创建一个目录

步骤2

在您的主目录下运行sudo nano ~/.my.cnf并添加下面的文本并保存

[mysqldump]
#use this if your password has special characters (!@#$%^&..etc) in it
 password="YourPasswordWithSpecialCharactersInIt"
  
 #use this if it has no special characters
 password=myPassword

步骤3

CD到~/backup,并创建另一个文件script.sh 向其添加以下文本

SQLFILE=/path/to/where/you/want/to/dump/dbname.sql
DATABASE=dbname
USER=myUsername

, mysqldump——defaults-file = ~ / .my.cnf - u $ {USER} ${数据库}| gzip > dbName_美元(日期+ Y \ % m \ % d_ \ \ % % H \ % m) .sql.gz

步骤4

在控制台中,键入crontab -e打开将从其中执行自动备份作业的cron文件

将下面的文本添加到文件底部

0 0 * * * ./backup/script.sh

添加到cron文件底部的文本假设您的备份将在每天午夜运行。

这就是你需要的,伙计们 ;)

其他回答

我有以下内容。

/etc/mysqlpwd

[mysql]
user=root
password=password

使用以下别名。

alias 'mysql -p'='mysql --defaults-extra-file=/etc/mysqlpwd'

要做恢复,我简单地使用:

mysql -p [database] [file.sql]

对我来说,使用MariaDB我必须这样做:添加文件~/.my.cnf,并通过执行chmod 600 ~/.my.cnf更改权限。然后将您的凭据添加到文件中。神奇的是,我错过了密码需要在客户端块下(参考:docs),就像这样:

[client]
password = "my_password"

[mysqldump]
user = root
host = localhost

如果你碰巧来这里寻找如何用MariaDB做mysqldump。将密码放在[client]块下,然后将用户放在[mysqldump]块下。

使用——defaults-extra-file eg:

mysqldump --defaults-extra-file=/path/.sqlpwd [database] > [desiredoutput].sql

注意:.sqlpwd只是一个示例文件名。你想用什么就用什么。

注意:MySQL会自动检查~/.my.cnf,它可以用来代替——defaults-extra-file

如果你像我一样使用CRON,试试这个!

mysqldump --defaults-extra-file=/path/.sqlpwd [database] > "$(date '+%F').sql"

要求的许可和建议的所有权

sudo chmod 600 /path/.sqlpwd && sudo chown $USER:nogroup /path/.sqlpwd

.sqlpwd内容:

[mysqldump]
user=username
password=password

传递.cnf或.sqlpwd的其他示例

[mysql]
user=username
password=password

[mysqldiff]
user=username
password=password

[client]
user=username
password=password

如果你想自动登录到一个数据库,你需要[mysql]条目作为实例。

您现在可以创建一个别名,自动将您连接到DB

alias whateveryouwant="mysql --defaults-extra-file=/path/.sqlpwd [database]"

您也可以只将密码放在.sqlpwd中,并通过脚本/cli传递用户名。我不确定这是否会提高安全性,这完全是另一个问题。

为了完整起见,我将声明您可以执行以下操作,但这是非常不安全的,不应该在生产环境中使用:

mysqldump -u [user_name] -p[password] [database] > [desiredoutput].sql

注意:-p和密码之间没有空格。

例如-pPassWord是正确的而-p Password是不正确的。

——password="" 在5.1.51上运行对我有用

mysqldump -h localhost -u <user> --password="<password>"

可以在命令行中指定密码,具体操作如下:

mysqldump -h <host> -u <user> -p<password> dumpfile

mysqldump的选项是区分大小写的!