我正在尝试从命令行使用mysqldump导出数据库。我使用以下语法:
mysqldump -u root -ppassword databasename > outputfile.sql
我已经尝试了几种变体,但我总是将以下内容作为输出文件的内容:
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
如果我排除数据库名称,我可以让mysqldump导出我的所有数据库,但它不会只导出一个数据库。
我在这里忽略了什么吗?
答案 0 :(得分:2)
上述评论中的疑难解答:
这是正确的语法。我猜想mysqldump正在某处找到其他一些选项。也许它是一个shell别名,并且在别名定义中包含了-A这样的选项?尝试运行
\mysqldump ...
以使其无法使用。
您的回复:
@BillKarwin你和-A走在了正确的轨道上。我试过mysqldump --print-defaults,显然--all-databases是默认参数。我用--no-defaults运行它,它就像一个魅力。
问题是--all-databases
被配置为默认选项。当您尝试将该选项与指定一个数据库的参数一起使用时,它会输出您描述的使用错误。
http://dev.mysql.com/doc/refman/5.6/en/mysqldump.html表示all-databases
可以是命令行标志,也可以是配置文件中的选项。
我建议您在/etc/my.cnf或$ HOME / .my.cnf中查找all-databases
选项。它可以显示在[mysqldump]
组或[client]
组中。
答案 1 :(得分:1)
如何(u
和root
之间没有空格
mysqldump -uroot -ppassword databasename > outputfile.sql
答案 2 :(得分:0)
将root密码放在命令行中是一个非常糟糕的主意。至少,在您的主目录中创建一个.my.cnf,将权限设置为600(仅限rw),其中包含:
[mysqldump]
user=root
password=yourpassword
这将允许您在没有密码的情况下执行该特定命令。由于您的root用户没有特殊原因需要进行转储,为什么不创建一个可以执行此操作的用户呢?
据推测,你正在做mysqldump来支持事情。为了让您的生活更轻松,请将其设置为cron,如下面的示例所示,该示例在午夜执行。由于存在包含密码的.my.cnf文件,因此在命令
中不需要密码0 0 * * * /usr/bin/mysqldump -u root -h localhost databasename > /home/someuser/outputfile.sql 2>&1