如何从远程计算机使用MySQL转储


74

如何备份在远程服务器上运行的mysql数据库,我需要将备份文件存储在本地pc中。

Answers:



55

您可以使用SSH吗?

您可以在shell中使用此命令来备份整个数据库:

mysqldump -u [username] -p[password] [databasename] > [filename.sql]

实际上,这是>操作员遵循的一个命令,说:“获取前一个命令的输出并将其存储在此文件中”。

注意:-p和mysql密码之间没有空格不是错字。但是,如果您保留该-p标记,但实际密码为空,则将提示您输入密码。有时建议这样做,以使密码不受bash历史记录的影响。


9
man mysql:如果使用简短的选项格式(-p),则选项和密码之间不能空格
Tanky Woo 2014年

3
好人解释了-p和实际密码之间的“无空格”
okey_on

1
如果您使用SSH,则应提一下SCP或SFTP用法以按照问题的要求将转储文件存储在本地PC中
izzulmakin

您应该确保防火墙设置为TCP打开了3306端口。
Gspoon

43

没有人提及--single-transaction选项。人们应该默认将它用于InnoDB表,以确保数据一致性。在这种情况下:

mysqldump --single-transaction -h [remoteserver.com] -u [username] -p [password] [yourdatabase] > [dump_file.sql]

这样可以确保转储在与其他事务隔离的单个事务中运行,从而避免了部分事务的备份。

例如,假设您有一个游戏服务器,人们可以在其中使用他们的帐户信用购买装备。针对数据库实际上有2种操作:

  1. 从他们的积分中扣除金额
  2. 将装备添加到他们的武器库中

现在,如果转储发生在这些操作之间,那么下次还原备份将导致用户丢失已购买的商品,因为第二个操作未转储到SQL转储文件中。

虽然这只是一个选项,但是您没有在mysqldump中不使用此选项的原因基本上没有很多。


1
优秀的!谢啦。我可以通过mysql访问远程服务器,但无法转储数据库。错误是 mysqldump: Got error: 1044: "Access denied for user 'USER'@'%' to database 'DB_NAME'" when using LOCK TABLES,但使用--single-transactionoptionmysqldump解决了我的问题。
Ali Yousefi Sabzevar

20

这个主题显示在我的Google搜索结果的第一页上,因此这对新手来说是个有用的提示。

您还可以转储sql并将其gzip压缩为一行:

mysqldump -u [username] -p[password] [database_name] | gzip > [filename.sql.gz]

3
mysqldump -h [domain name/ip] -u [username] -p[password] [databasename] > [filename.sql]

3
难道真的-p[password]-p [password]
Artjom B.

4
@ArtjomB。是的,如果您的密码有特殊字符,请用引号引起来:-p'pa$$w0rd!!!!'
Ryan Taylor

1

在这里尝试了所有组合,但这对我有用:

mysqldump -u root -p --default-character-set=utf8mb4 [DATABASE TO BE COPIED NAME] > [NEW DATABASE NAME]

-4

成功备份.sql文件后,这就是恢复备份的方式

mysql -u [username] [databasename]

然后使用以下命令选择您的sql文件:

source MY-BACKED-UP-DATABASE-FILE.sql

3
这就是还原备份的方式,而不是创建备份的方式。
昆汀2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.