Получить последнюю версию pgloader
;тот, который предоставляется Debian Jessie (по состоянию на 2019-01-27), равен 3.1.0, и не будет работать , поскольку pgloader
приведет к ошибке при
Can not find file mysql://...
Can not find file postgres://...
Доступе к источнику MySQL
Сначала убедитесь, что вы можете установить соединение с mysqld
на сервере под управлением MySQL, используя
telnet theserverwithmysql 3306
Если это не удается с
Имя или службанеизвестно
Войдите в систему theserverwithmysql
и отредактируйте файл конфигурации mysqld
.Если вы не знаете, где находится файл конфигурации, используйте find / -name mysqld.cnf
.
. В моем случае мне пришлось изменить эту строку с mysqld.cnf
# By default we only accept connections from localhost
bind-address = 127.0.0.1
на
bind-address = *
Помните, что разрешение доступа к базе данных MySQL со всех адресов может представлять угрозу безопасности, означая, что вы, вероятно, захотите изменить это значение обратно после переноса базы данных.
Сделайте изменения в mysqld.cnf
эффективнымиперезапустив mysqld
.
Подготовка цели Postgres
Предполагая, что вы вошли в систему, в которой работает Postgres, создайте базу данных с помощью
createdb databasename
Пользователь длябаза данных Postgres должна иметь достаточные права для создания схемы, в противном случае вы получите разрешение
для базы данных с именем
при вызове pgloader
.Я получил эту ошибку, хотя пользователь имел право создавать базы данных в соответствии с psql > \du
.
Вы можете убедиться в этом в psql
:
GRANT ALL PRIVILEGES ON DATABASE databasename TO otherusername;
Опять же, это может бытьИзбыток привилегий и, следовательно, риск для безопасности, если вы оставите все эти привилегии у пользователя otherusername
.
Миграция
Наконец, команда
pgloader mysql://theusername:thepassword@theserverwithmysql/databasename postgresql://otherusername@localhost/databasename
выполняется на работающей машинеPostgres должен создать вывод, который заканчивается строкой, подобной этой:
Total import time ✓ 877567 158.1 MB 1m11.230s