【问题标题】:How to import mysql data into postgresql in Heroku?(Django project)如何在 Heroku 中将 mysql 数据导入 postgresql?(Django 项目)
【发布时间】:2017-08-22 11:14:54
【问题描述】:

最近需要将mysql数据导入Heroku中的postgres数据库。实际上它包括几个步骤:

  1. 将mysql数据转成postgresql
  2. 将 postgresql 数据导入 Heroku

参考了很多资料,在github上测试了几个工具,终于成功了。在这里我想分享一些我的经验和参考。

【问题讨论】:

    标签: mysql django postgresql heroku


    【解决方案1】:

    首先,我列出了一些将mysql数据库格式转换为postgresql格式的工具。

    1. mysql-postgresql-converter :我终于用这个工具成功了。以兼容 PostgreSQL 的格式转储 MySQL 数据库

    mysqldump -u 用户名 -p --compatible=postgresql 数据库名> outputfile.sql

    然后使用转换器将数据传输到*.psql 文件中。然后将新转储加载到新的 PostgreSQL 数据库中。

    1. mysql2postgres : Heroku Dev Center 中引入的工具。只需参考这里Migrating from MySQL to Postgres on Heroku。它基于 Ruby。但是我自己安装完成后发现了一些issues,无法解决。

    您已经激活了 test-unit 2.5.5,但是您的 Gemfile 需要 test-unit 3.2.3。 #95

    1. py-mysql2pgsql:通过编辑*.yml 文件进行配置,与上面的 mysql2postgres 类似的过程。 README 文件中有一个很好的参考表,名为数据类型转换图例,它比较了 MySQL 和 PostgreSQL 之间的不同数据类型。您可以手动修改数据类型。

    ** This website 列出了一些其他的转换方法。

    PostgreSQL中的一些基本操作:

    $sudo su - postgres
    $createtedb testdb
    $psql testdb
    =# create user username password ' password ';
    -- To change a password:
    =# alter role username password ' password ';
    =# create database databasename with encoding 'utf8';
    

    如何在 postgres 中列出所有数据库:PostgreSQL - SELECT Database

    postgres-# \l
                             List of databases
       Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
    -----------+----------+----------+---------+-------+-----------------------
     postgres  | postgres | UTF8     | C       | C     | 
     template0 | postgres | UTF8     | C       | C     | =c/postgres          +
               |          |          |         |       | postgres=CTc/postgres
     template1 | postgres | UTF8     | C       | C     | =c/postgres          +
               |          |          |         |       | postgres=CTc/postgres
     testdb    | postgres | UTF8     | C       | C     | 
    (4 rows)
    
    postgres-# 
    

    现在输入以下命令连接/选择所需的数据库,这里我们将连接到 testdb 数据库:

    postgres=# \c testdb;
    psql (9.2.4)
    Type "help" for help.
    You are now connected to database "testdb" as user "postgres".
    testdb=# 
    

    创建数据库后,将转换后的表导入 psql。请注意,在导入数据之前应先创建数据库。

    $psql -h server -d databasename -U username -f data.sql
    

    (有时应在 psql 之前添加 sudo -u postgres

    如何使用 pg_dump 生成 psql 的转储:creating dump file

    $sudo -u postgres pg_dump -Fc --no-acl --no-owner -h localhost -U postgres databasename > mydb.dump
    

    下一步,如何将数据导入 Heroku Postgres? 在前面的步骤之后,您可能已经将数据导入本地 PostgresSQL 或生成 pg_dump 文件。这里将介绍两种将数据传输到远程 Heroku Postgres 的方法。

    1. 使用 pg_dump 文件。referencepg:backups restore 命令中使用原始文件 URL:

      $ heroku pg:backups:restore 'https://s3.amazonaws.com/me/items/3H0q/mydb.dump' DATABASE_URL
      

    在这种情况下,您应该首先将转储文件上传到具有 HTTP 可访问 URL 的位置。 Heroku 的开发中心recommend using Amazon S3DATABASE_URL 代表您希望还原到的数据库的 HEROKU_POSTGRESQL_COLOR_URL。比如我的数据库url是postgresql-globular-XXXXX。

    1. 使用pg:push pg:push 会将本地 psql 数据库中的数据推送到远程 Heroku Postgres 数据库中。该命令如下所示:

      $heroku pg:push mylocaldb DATABASE_URL --app sushi
      

    此命令将获取本地数据库“mylocaldb”并将其推送到应用程序“sushi”上DATABASE_URL 的数据库。请注意,在执行pg:push 之前,远程数据库必须为空,以防止意外的数据覆盖和丢失。 其实我用了pg:push这个方法,终于成功了。

    有关 Heroku Postgres 的更多信息,请访问official document of Heroku

    **其他:

    1. 您在 Heroku 中的 Web 应用程序的 Viewing logsheroku logs --tail
    2. How to deploy Heroku 上的 Python 和 Django 应用程序?
    3. 如何编写 Django Apps 的 Procfile? 一个常见的 Django 项目 Procfile 如下所示:

      web: gunicorn yourprojectname.wsgi --log-file -
      

    这里的 web 是一个单一的进程类型。我们需要修改的是yourprojectname.wsgi。只需在前缀中替换您的项目名称即可。

    1. 如何将 Gunicorn 添加到您的应用程序中?

      $ pip install gunicorn
      $ pip freeze > requirements.txt
      
    2. 如何在远程 Heroku 服务器上运行命令行? 您可以在 Heroku 中执行bash 命令。

      $heroku run bash
      Running bash attached to terminal... up, run.1
      ~ $ ls
      

    然后您可以像在本地 bash 中一样执行一些命令,例如 lscd

    另外,您可以使用此模式中的命令在远程 Heroku 中执行manage.pyheroku run python manage.py runserver

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 2019-07-16
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      相关资源
      最近更新 更多