我想知道在没有提示密码的情况下执行数据库mysqldump的命令。
原因: 我想运行一个cron作业,每天对数据库进行一次mysqldump。因此,当提示时,我将无法插入密码。
我怎么解决这个问题呢?
我想知道在没有提示密码的情况下执行数据库mysqldump的命令。
原因: 我想运行一个cron作业,每天对数据库进行一次mysqldump。因此,当提示时,我将无法插入密码。
我怎么解决这个问题呢?
当前回答
因为你使用的是Ubuntu,你所需要做的只是在你的主目录中添加一个文件,它将禁用mysqldump密码提示。这是通过创建文件~/.my.cnf来完成的(权限需要是600)。
将其添加到.my.cnf文件中
[mysqldump]
user=mysqluser
password=secret
这让您可以作为需要密码的MySQL用户连接,而无需实际输入密码。甚至不需要-p或——密码。
非常方便的脚本mysql和mysqldump命令。
实现这一目标的步骤可以在此链接中找到。
或者,您可以使用以下命令:
mysqldump -u [user name] -p[password] [database name] > [dump file]
但是请注意,它本质上是不安全的,因为在转储运行时,系统上的任何其他用户都可以使用简单的ps ax命令查看整个命令(包括密码)。
其他回答
使用——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是不正确的。
是的,这很简单....只需要一个神奇的命令行
mysqldump --user='myusername' --password='mypassword' -h MyUrlOrIPAddress databasename > myfile.sql
完成:)
你可以通过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文件底部的文本假设您的备份将在每天午夜运行。
这就是你需要的,伙计们 ;)
一些回答提到将密码放在配置文件中。
或者,从脚本中导出MYSQL_PWD=yourverysecretpassword。
与使用配置文件相比,这种方法的优点是不需要单独的配置文件来与脚本保持同步。您只需要维护脚本。
这种方法没有任何缺点。
密码对系统上的其他用户不可见(如果在命令行上则可见)。环境变量仅对运行mysql命令的用户和root用户可见。
密码对于任何能够阅读脚本本身的人都是可见的,因此请确保脚本本身受到保护。这与保护配置文件没有任何不同。如果您想让脚本公开可读,您仍然可以从一个单独的文件中获取密码(例如export MYSQL_PWD=$(cat /root/mysql_password))。导出变量仍然比构建配置文件容易。
例如,
$ export MYSQL_PWD=$(>&2 read -s -p "Input password (will not echo): "; echo "$REPLY")
$ mysqldump -u root mysql | head
-- MySQL dump 10.13 Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost Database: mysql
-- ------------------------------------------------------
-- Server version 5.6.23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
玛丽亚数据库
MariaDB将MYSQL_PWD的使用记录为:
连接mysqld时的默认密码。强烈建议使用更安全的方法将密码发送到服务器。
该页面没有提到什么是“更安全”的方法。
MySQL
这个方法在MySQL: https://dev.mysql.com/doc/refman/8.0/en/environment-variables.html的最新文档版本中仍然被支持,尽管它伴随着以下警告:
使用MYSQL_PWD来指定MySQL密码必须被认为是非常不安全的,不应该使用。某些版本的ps包含显示正在运行的进程的环境的选项。在某些系统上,如果您设置了MYSQL_PWD,则您的密码将暴露给任何其他运行ps的用户。即使在没有这样的ps版本的系统上,假定用户没有其他方法可以检查进程环境也是不明智的。
环境变量的安全性在https://security.stackexchange.com/a/14009/10002上有详细介绍,这个答案也解决了评论中提到的问题。十多年来一直无关紧要。
话虽如此,MySQL文档也警告:
MYSQL_PWD从MySQL 8.0开始已弃用;希望它在MySQL的未来版本中被移除。
对此,我将在下面留下maxschlepzig的评论:
有趣的是,Oracle并没有反对在命令行上传递密码,这实际上是非常不安全的
最终的想法
使用单一身份验证因素(密码)连接到系统确实是不安全的。如果您担心安全性,您应该考虑在常规连接之上添加相互TLS,以便服务器和客户端都被正确地标识为已授权。
补充@Frankline的回答:
为了在配置文件中使用密码,命令中必须排除-p选项。
正确的: Mysqldump -u my_username my_db > my_db.sql
错误的: Mysqldump -u my_username -p my_db > my_db.sql
.my.cnf可以省略用户名。
[mysqldump]
password=my_password
如果你的.my.cnf文件不在默认位置,mysqldump也看不到它,使用——defaults-file指定它。
Mysqldump——defaults-file=/path-to-file/.my.cnf -u my_username my_db > my_db.sql . Mysqldump