使用SSH隧道将本地SQL文件导入到远程MySQL服务器

39

我在本地计算机和远程服务器之间通过putty SSH隧道建立了连接。

这很好。

现在我需要一个命令来获取本地机器上的sql文件,即c:\folder\test.sql,并将其导入到远程服务器上的mysql中。

我想也许...

mysql -u prefix_username -p testpass -h localhost -P 3307 prefix_testdb

那么执行像这样的命令:

mysql -p testpass -u prefix_username prefix_testdb < c:\folder\test.sql 

这个命令没有起作用。

我该如何实现这个?


你真的想将它导入到远程机器上的mysql服务器吗?那么就没有必要先将它传输到本地机器。 - cb0
这是一个来自不同服务器的SQL文件,将被用于我将要使用的远程服务器。 - Jkk
6个回答

57

你应该运行这个命令

mysql -h host -u user_name -pPassword database < file.sql > output.log

file.sql 包含要运行的 SQL 查询,output.log 只有在查询返回结果(例如 select)时才有意义。

我能看到你代码中唯一不同的地方是 -p 选项和密码之间的空格。如果使用 -p 选项,必须不留任何空格地输入密码。或者你可以使用 --password=Password 选项。

希望你能解决这个问题。


这是理论上的正确做法。但是,在你确切知道自己在做什么之前,允许远程连接到 MySQL 服务器可能不是一个好习惯。 - Augusto
1
如果您的 sql 文件包含模式定义,您只需要运行以下命令:mysql -h 主机名 -u 用户名 -p密码 < 文件名.sql - CommandZ
“host” 在这里指的是什么?是 “root@myServerIp” 吗? - Aipo
1
如果.sql文件在本地计算机上怎么办? - Ankit Sahu
我知道这已经过时了,但它可能会对某些人有所帮助... 如果在Linux上或者使用Windows子系统Linux,则处理密码的最简单方法是在您的主目录中创建一个名为".my.cnf"的文件。该文件应包含以下行以进行还原: [mysql] username=username password=mysecret - BrettJ

17
你需要使用附加了mysql命令的ssh连接到远程机器:
ssh remote_user@remote_server mysql -p testpass -u username testdb < c:\folder\test.sql 

15
 1. mysql -h xxx -uxxx -pxxx . //login to the remote mysql
 2. use DATABASE.             //assign which db to import
 3. source path/to/file.sql  //the path can be your local sql file path.

参考:将SQL文件导入MySQL


7
使用“scp”将内容复制到本地机器,使用mysql进行插入。
语法:

使用“scp”将内容复制到本地机器。

使用mysql进行插入。

scp remote_user@remove_server:/path/to/sql/file.sql ~/path/to/local/directory

文件传输完成后,请使用以下命令:

mysql -uYouUserName -p name_of_database_to_import_to < ~/path/to/local/directory/file.sql

使用以下命令将 SQL 文件导入 MySQL 数据库:mysql -u 用户名 -p 数据库名 < /文件路径/文件名.sql在 MySQL 中执行以下操作:mysql> use 数据库名; mysql> source 备份文件名.sql; - Kennedy Maikuma

0

mysql {mydbname} --host {server}.mysql.database.azure.com --user {login} --password={password} < ./{localdbbackupfile}.sql

随着托管服务、DevOps和CI/CD工作流程的普及,大多数托管服务提供商希望消除连接字符串正确性方面的人为错误。如果您正在使用Azure、AWS、GCP等服务,通常会有一个页面或终端命令显示这些字符串,以帮助您轻松集成。如果您使用类似的服务,请不要忘记查阅其文档。这些字符串是自动生成的,因此它们很可能是适用于您所使用的数据库版本的“最佳实践”,语法准确无误。

上述命令来自我Azure托管MySQL数据库服务器实例的“连接字符串”部分。

虽然没有明确要求,但需要注意的是,许多服务都会自动生成模板,用于许多常见的连接场景:

{
  "connectionStrings": {
    "ado.net": "Server={server}.mysql.database.azure.com; Port=3306; Database=mytestdb; Uid={login}; Pwd={password};",
    "jdbc": "jdbc:mysql://{server}.mysql.database.azure.com:3306/mytestdb?user={login}&password={password}",
    "jdbc Spring": "spring.datasource.url=jdbc:mysql://{server}.mysql.database.azure.com:3306/mytestdb  spring.datasource.username={login}  spring.datasource.password={password}",
    "mysql_cmd": "mysql mytestdb --host {server}.mysql.database.azure.com --user {login} --password={password}",
    "node.js": "var conn = mysql.createConnection({host: '{server}.mysql.database.azure.com', user: '{login}', password: {password}, database: mytestdb, port: 3306});",
    "php": "$con=mysqli_init(); [mysqli_ssl_set($con, NULL, NULL, {ca-cert filename}, NULL, NULL);] mysqli_real_connect($con, '{server}.mysql.database.azure.com', '{login}', '{password}', 'mytestdb', 3306);",
    "python": "cnx = mysql.connector.connect(user='{login}', password='{password}', host='{server}.mysql.database.azure.com', port=3306, database='mytestdb')",
    "ruby": "client = Mysql2::Client.new(username: '{login}', password: '{password}', database: 'mytestdb', host: '{server}.mysql.database.azure.com', port: 3306)"
  }
}

-2

你可以使用pscp上传文件到服务器。打开你的命令行并输入以下命令:

pscp.exe c:\folder\test.sql usernameoftheserver@websitename.com:/serverpath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接