【问题标题】:How do I move my mySQL database from my local server to Heroku?如何将 mySQL 数据库从本地服务器移动到 Heroku?
【发布时间】:2018-08-20 15:59:28
【问题描述】:

我用 phpMyAdmin 创建了一个 mySQL 数据库。在这个数据库中,我存储了我朋友的姓名和位置(以及作为数据库主键的 id)。我编写并运行以下 php 脚本以从数据库中检索这些数据并将它们投影到我的本地 Web 服务器 (XAMPP):

<?php

$dbServername = 'localhost';
$dbUsername = 'root';
$dbPassword = '';
$dbName = 'Friends';

$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);

$sql = 'SELECT * FROM friends;';
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);


if ($resultCheck > 0) {
    while ($row = mysqli_fetch_assoc($result)) {
        echo $row['id'], ' ', $row['name'], ' ', $row['location']. '<br>';

    }
}

?>

现在我想从我的另一台计算机访问这个数据库,我需要它们在前端进行一些很酷的数据可视化。

一种方法是在另一台计算机上再次构建 phpMyAdmin(和 XAMPP)并将新用户添加到该数据库。

我选择的另一种方法是将 mySQL 数据库从本地服务器移动到 Heroku。

如何一步一步轻松完成(通过使用 ClearDB?)?

我可以将我的本地服务器同步到 Heroku,以便当我在本地服务器上对数据库进行更改时,Heroku 会自动更新吗?

【问题讨论】:

  • phpMyAdmin 不是数据库,它是查看您的 MySQL 数据库的工具。
  • 您将托管程序与数据库管理工具进行比较。您如何期望得到这样的答案。问题是什么?创建该数据库的转储?还是在 Heroku 导入它?还是访问 Heroku 服务器? …
  • 好的,我编辑了我的帖子,我认为现在它更有意义(?)。是的,现在 Google 搜索更容易了@ceejayoz(尽管我已经找到了其中一些链接)。
  • 为了非常清楚,如果您不介意,我想简短回答我的第二个问题。我可以以某种方式将本地服务器同步到 Heroku,还是每次将数据库从本地服务器手动更新到 Heroku 时都必须手动更新?
  • 您首先需要澄清“Heroku”的含义。他们不提供 MySQL,除非通过第三方服务。他们的主要数据库产品是 PostgreSQL一些他们的 MySQL 供应商可能会让你设置复制,但我想说你最好将数据迁移作为部署过程的一部分。

标签: php mysql heroku phpmyadmin


【解决方案1】:

您有多个选项,具体取决于您对数据库服务器等的访问权限。

猜想你还想在 heroku 上使用 mysql,你可以很容易地做到以下几点:

  • 使用 phpmyadmin 导出您想要的所有数据库/表,然后将它们重新导入您的 heroku 数据库。我不熟悉heroku,但我猜他们提供某种网络数据库管理。

  • 您可以使用从一台服务器到另一台服务器的一次性/永久 mysql 复制。关于如何设置它有多种选择(主 主、主 -> 从等)。以下是关于如何设置主 -> 从复制的快速教程:http://www.clusterdb.com/mysql-cluster/get-mysql-replication-up-and-running-in-5-minutes

还有更多选择,但这是我想到的。

【讨论】:

  • 感谢您的回复(点赞)。是的,我心里清楚地有了第一个选择。但是,我在考虑是否可以将本地服务器同步到 Heroku,这样每次我在本地服务器上更改某些内容时,Heroku 都会自动更新。这是可能的还是我每次都必须手动执行(或者我必须直接在 Heroku 数据库上执行)?
  • 第二个选项可以做到这一点,但只有在您拥有创建 mysql 复制的正确服务器权限时才能做到这一点。您需要查看您的服务器是否拥有必要的权限,以及 heroku 是否支持!
  • 好的,知道了。所以基本上我会手动将我的 SQL 数据库从我的一台计算机的本地服务器移动到 Heroku,然后我会通过对 Heroku 的 webhook 或 API 调用从我的另一台计算机(它有我的 javascript 前端的东西)访问它?
【解决方案2】:

另一种选择是使用用于迁移数据库的工具。如果需要,这将允许您将数据库和内容分发到多个实例,而无需复制不需要的数据。例如,如果您在本地数据库中有不希望复制的测试数据,但您确实希望复制表更改,这将是一个更好的解决方案。如果您计划将来分发您的应用程序,这是一个更好的解决方案。

我认为更常见的解决方案之一是 Phinx 这里是他们页面的链接。 https://phinx.org/

编辑:

这到底给了你什么?它会让您为您对数据库所做的所有更改创建一个迁移文件,例如,如果您添加一个表或更改列名/大小/类型等,您将添加一个新的迁移文件。该文件可以具有更改或向上和向下方法,这将用于将数据库迁移到新版本或回滚。你可以有插入和其他东西,所以如果你想移动数据,你可以使用它。你要做的是制作你的迁移文件。然后将这些复制到服务器并运行迁移。它将更改数据库架构和数据以匹配您的数据库。是自动的吗?不,但它确实为您提供了从一个 Heroku 实例迁移到另一个实例的能力,而无需再次设置复制等。您将设置数据库名称,然后重新运行您的迁移,它将插入/创建您的数据库。基本上唯一的缺点是更改不会立即更改您需要上传文件更改和迁移并运行迁移的 heroku 实例。

这里有一个很好的关于 phinx 的概述https://book.cakephp.org/3.0/en/phinx.html

这样做的好处:

  • 只需运行脚本即可在任何地方设置数据库。
  • 可以对数据库进行版本控制,以便您可以前滚或回滚到新版本或旧版本
  • 不依赖于特定实例/需要的数据库
  • 无需对复制服务器进行所有设置或维护。

【讨论】:

  • 感谢您的回复(点赞)。这是一个非常有趣的答案。但是,我并不完全清楚(也许您可以稍微编辑一下)。具体来说,使用这样的工具有什么好处?这是否与我的第二个问题有关(“我可以将本地服务器同步到 Heroku,以便当我在本地服务器上对数据库进行更改时,Heroku 会自动更新?”)如果我理解正确?
  • 我会更新答案。我不认为它以您考虑的方式解决了问题,它可能只是为您提供了不同的解决方案。生病更新,如果仍然不清楚,请发表另一条评论。
猜你喜欢
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
相关资源
最近更新 更多