Ansible — установка MySQL 5.5 на CentOS 7

В CentOS 7 по умолчанию доступен для установки только форк MariaDB. Что лучше — Мария или оригинальный мускул в комьюнити редакции — мне в данной задаче не важно. Мне нужно собрать дев среду максимально близкую к продакшену. Для скачивания и установки MySQL Оракл предоставляет rpm мета-пакет, который можно найти тут.

Установить этот пакет в Ansible можно примерно так

- name: Add MySQL repo
yum: name=http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm state=present

Проблема в том, что в этом пакете прописаны субрепозитории для версий 5.7, 5.6, 5.5 и по-умолчанию активирована 5.7, а мне нужна 5.5. Конфиг лежит в файле /etc/yum.repos.d/mysql-community.repo. Проверить какой именно репозиторий активирован можно так.

$ yum repolist enabled | grep mysql

Yum модуль в Ansible не предоставляет возможности управления субрепозиториями. Но конфиг репозитория — это ini файл. А для работы ini файлами в Ansible модуль есть. Делаем так

- name: Disable default/latest MySQL repository
ini_file:
  dest: /etc/yum.repos.d/mysql-community.repo
  section: "mysql57-community"
  option: enabled
  value: "0"

- name: Enable target MySQL repository
ini_file:
  dest: /etc/yum.repos.d/mysql-community.repo
  section: "mysql55-community"
  option: enabled
  value: "1"

После этого уже можно установить MySQL

- name: Install MySQL
yum: name={{ item }} update_cache={{ update_yum_cache }} state=installed
with_items:
  - mysql
  - mysql-server

Django — ошибка во время миграции

Во время миграции схемы базы данных для модели, в которую добавлено ForeignKey поле, может возникнуть ошибка вида:

django.db.utils.OperationalError: (1005, "Can't create table '...' (errno: 150)")

Это происходит из-за разных типов хранилищ таблиц (MyISAM/InnoDB). В таком случае MySQL не может корректно создаться индекс по внешнему ключу.

Следует руками привести обе таблицы к типу хранилища InnoDB, сделав ALTER TABLE, и повторить миграцию.

VirtualBox: доступ к MySQL

Задача

Открыть доступ к MySQL серверу на виртуальной машине клиенту на хост машине. Подразумевается конфигурация Windows хост и гостевая Ubuntu.

Решение

Включить отклик MySQL сервера на входящие соединения от всех хостов (по умолчанию только localhost). Заменить в my.conf опцию bind-address с 127.0.0.1 на 0.0.0.0. Перезапустить MySQL сервер.

sudo vim /etc/mysql/my.cnf
sudo service mysql restart

Назначить необходимому пользователю права на доступ с любого хоста.

mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%';
FLUSH PRIVILEGES;

Пробросить порт в сетевых настройках виртуальной машины, например, с порта 33306 хоста на порт 3306 гостевой ОС.

Настроить соединение mysql клиента как myuser@127.0.0.1:33306.

Проблемы при деплое Django на виртуальный хостинг на примере sweb.ru

Продолжаю собирать шишки во время деплоя Django на виртуальный хостинг. Пока имею дело с хостерами рунета. Скучать не приходится. Каждый новый хостер — новая проблема.
Итак, Spaceweb открывает соединение с базой MySQL в национальной кодировке cp1251, а не толерантной utf-8. Это приводит к выбросу исключения вида «codec can’t decode byte…» где-то в недрах модуля MySQLdb.

Я расцениваю это исключительно как оголтелое проявление национализма и разжигание розни на национальной почве.

Лечится так


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxx',
        'USER': 'xxx',
        'PASSWORD': 'xxx',
        'HOST': '',
        'PORT': '',
        'OPTIONS': {
            'init_command': 'set names utf8',
        },
    }
}

Установка дополнительных пакетов Ubuntu для разработки на Django

Python

sudo apt-get install python-dev python-pip
sudo -H pip install -U pip
sudo -H pip install -U virtualenv

MySQL

sudo apt-get install mysql-server python-mysqldb libmysqlclient-dev

PostgreSQL

sudo apt-get install libpq-dev postgresql postgresql-server-dev-all postgresql-contrib 

PostGIS

sudo apt-get install libgdal-dev postgresql-x.x-postgis-x.x postgresql-x.x-postgis-scripts

Pillow (PIL)

sudo apt-get install libjpeg-dev libpng-dev libwebp-dev libtiff-dev zlib1g-dev python-imaging

lxml

sudo apt-get install python-lxml libxml2 libxml2-dev libxslt-dev

Memcached

sudo apt-get install memcached libmemcached-dev

Redis

sudo apt-get install redis-server python-redis

bcrypt

sudo apt-get install bcrypt libffi-dev