Для экспериментов и наведения порядка в коде проекта пришлось поднять его копию в песочнице. Отличия, правда, некоторые имеются: не apache2 в ней, но nginx, и не MySQL/MariaDB, но PostgreSQL.
С первым отличием справляться долго не пришлось. Поднял очередной virtualenv, да почти копипастой с других проектов в песочнице создал два конфига (один для nginx, второй для gunicorn).
А вот перенести БД не так просто и быстро. Вернее, и просто, и быстро, если уже опыт имеется. А мне раньше не приходилось.
Итак, на основном хосте создал пользователя с правом доступа к БД с адреса песочницы:
GRANT SELECT ON имя_бд.* TO 'имя_пользователя'@'IP-адрес_песочницы' IDENTIFIED BY 'пароль';
В песочнице же, где PostgreSQL, при помощи manage.py migrate воссоздал необходимую структуру БД.
Далее поставил в песочнице необходимый мегаинструмент:
sudo pip2 install py-mysql2pgsql
Для того чтобы сгенерился конфиг, куда надо прописать логины с паролями да прочую информацию для успешной миграции, запустил свежеустановленный мегаинструмент:
py-mysql2pgsql
Его выхлоп подсказал имя конфига:
No configuration file found. A new file has been initialized at: mysql2pgsql.yml Please review the configuration and retry...
В который я, не медля, прописал логины с паролями да прочую информацию.
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)
А именно заменить строку
elif column['type'] == 'datetime':
на
elif column['type'] == 'datetime' or column['type'].startswith('datetime('):
После этого запустил мегаинструмент еще раз и, не успев даже треть сигареты скурить, получил желаемое.