假设我有database1
和database2
。
database1
- 包含数据
database2
- 是空的。
我想通过SSH将所有数据从database1
复制到database2
- 重复database1
。
我应该使用什么命令?
我试过了
mysqldump -u user -p database1 > database1.sql
Enter password: mysqldump: Got error: 1045: Access denied for user 'user'@'localhost' (using password: NO) when trying to connect
答案 0 :(得分:5)
这会将数据库从S1复制到S2
mysqldump --opt <database> | gzip -c | ssh user@wherever 'cat > /tmp/yourfile.sql.gz'
解压缩文件
gunzip /tmp/yourfile.sql.gz
接下来你必须在S2上导入
mysql -h<host> -u<user> -p<password> < /tmp/yourfile.sql
享受
答案 1 :(得分:5)
只需一个命令即可通过SSH复制MySQL数据库:
mysqldump -u <local-user> -p <local-db> | gzip | ssh user@hostname \
"gunzip | mysql -u <remote-user> -p<password> <remote-db>"
请注意,您必须先创建远程数据库。
更高级版本:
mysqldump -u <local-user> -p <local-db> | xz | pv -W | ssh user@hostname \
"tee remote-dump.sql.xz | unxz | mysql -u <remote-user> -p<password> <remote-db>"
高级版本:
使用xz
/ unxz
进行更好的压缩(虽然请注意压缩速度不会成为瓶颈 - 如果xz
处于100%CPU,那么它可能已成为瓶颈,你可能会因gzip
)
使用pv
使用tee
我还没有解决的一个问题是如何避免在远程命令中指定密码。能够在命令行上以交互方式输入此密码真的很棒 - 如果有人知道如何,请加入。
答案 2 :(得分:1)
使用以下2个命令:
mysqldump -u customers -p customers > customers.dump
mysql -u new_customers -p new_customers < customers.dump
(您可能会因为无法写入目录而被拒绝访问,因此您可能需要使用cd
更改目录)
答案 3 :(得分:0)
您需要做的第一件事是ssh 到您要从中复制或复制数据库到另一台服务器的服务器。
对我有用的命令是:
mysqldump -u <database-user> -p<database-password> <database-name> | xz | ssh <target-ssh-username>@<target-hostname> \ "tee remote-dump.sql.xz | unxz | mysql -u <target-database-user> -p<target-database-password> <target-database-name>"
注意:-您可以使用.cnf文件来存储数据库的用户名和密码。因为我的执行量很小,所以我没有使用它。
链接:https://www.techiecorner.com/1619/how-to-setup-mysqldump-without-password-in-cronjob/
输入命令后。它会提示你
**The authenticity of host 'w01b3a99.kasserver.com (85.13.164.141)' can't be established.**
Are you sure you want to continue connecting (yes/no)?
输入是
然后它会提示你输入
*target-user@target-hostname* ssh password
输入密码target-user
password
它将静默执行运行。一段时间后,您的命令执行将完成。
我没有使用 pv -W
,因为我使用的是 Cloudways Server。 pv
尚未安装。他们不允许 root 访问来安装任何软件包。