Для экспериментов и наведения порядка в коде проекта пришлось поднять его копию в песочнице. Отличия, правда, некоторые имеются: не apache2 в ней, но nginx, и не MySQL/MariaDB, но PostgreSQL.
С первым отличием справляться долго не пришлось. Поднял очередной virtualenv, да почти копипастой с других проектов в песочнице создал два конфига (один для nginx, второй для gunicorn).
А вот перенести БД не так просто и быстро. Вернее, и просто, и быстро, если уже опыт имеется. А мне раньше не приходилось.
Итак, на основном хосте создал пользователя с правом доступа к БД с адреса песочницы:
1
|
GRANT SELECT ON имя_бд.* TO 'имя_пользователя' @ 'IP-адрес_песочницы' IDENTIFIED BY 'пароль' ; |
В песочнице же, где PostgreSQL, при помощи manage.py migrate воссоздал необходимую структуру БД.
Далее поставил в песочнице необходимый мегаинструмент:
1
|
sudo pip2 install py-mysql2pgsql |
Для того чтобы сгенерился конфиг, куда надо прописать логины с паролями да прочую информацию для успешной миграции, запустил свежеустановленный мегаинструмент:
1
|
py-mysql2pgsql |
Его выхлоп подсказал имя конфига:
1
2
3
|
No configuration file found. A new file has been initialized at: mysql2pgsql.yml Please review the configuration and retry... |
В который я, не медля, прописал логины с паролями да прочую информацию.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
mysql: hostname: IP-адрес-mysql-БД port: 3306 socket: username: имя_пользователя password: пароль database: имя_БД compress: false destination: # if file is given, output goes to file, else postgres file: postgres: hostname: localhost port: 5432 username: имя_пользователя password: пароль database: имя_БД |
Далее пришлось чутка подправить lib/python2.7/site-packages/mysql2pgsql/lib/postgres_writer.py, поскольку получил ошибку Exception: unknown datetime(6)
А именно заменить строку
1
|
elif column[ 'type' ] = = 'datetime' : |
на
1
|
elif column[ 'type' ] = = 'datetime' or column[ 'type' ].startswith( 'datetime(' ): |
После этого запустил мегаинструмент еще раз и, не успев даже треть сигареты скурить, получил желаемое.