Имеется возможность запустить несколько инстансов mysql одного заинсталеного экземпляра mysql. Зачем? Это даст администратору возможность более тонкой настройки каждого сервера под тот круг задач, который он будет исполнять.
Например
Новостной мультидоменный портал с информационной частью, форумом. Каждый поддомен такого портала использует в работе свою БД. На всём портале работает рекламный движок, который учитывает показы и клики посетителей. Интенсивность операций insert/update этого движка значительно выше, чем других частей портала, где зачастую используется выборка, а значит select. Логично будет вынести БД рекламного движка на отдельный сервер и применить к нему другие настройки.
Еще пример
Администратор заметил, что портал стал медленно отдавать контент. После анализа выяснилось, что затык на стороне mysql. Теперь администратор желает знать, на какую именно БД приходится основная нагрузка. Если все БД портала находятся на одном сервере, то выснить это несколько затруднительно. Значительно проще вынести подозреваемую БД на другой сервер. В таком случае картина становится значительно яснее. А если еще и применить munin, то и нагляднее
Теперь, как это сделать практически
Рассмотрим на примере mysql55 и FreeBSD. Предполагается, что mysql установлен с нуля на удалённый сервер. Настроен удалённый доступ серверу mysql с рабочего места администратора при помощи phpMyAdmin. Сделать нужно три инстанса на портах 3306, 3307, 3308. Настройка шифрованного подключения к серверам с рабочего места администратора в этой статье не рассматривается
Конфигурирование эталонной БД mysql
которую потом мы растиражируем на нужное количество инстансов. В таблицу mysql.user вносим пользователя multi_admin, забиваем ему пароль и даём права shutdown и process. С правами этого пользователя сценарий mysqld_multi будет осуществлять стоп/старт серверов mysql. Пользователя mysqld_multi нужно завести в mysql.user каждого запускаемого инстанса mysql и задать пароль, который позже укажем в конфиге my.cnf
Подготовка окончена, останавливаем сервер mysql
service mysql stop
Конфигурация инстансов в my.cnf
Его нужно положить в каталог /etc. В этом файле настройки каждого инстанса описаны в параметрических группах mysql6, mysql7, mysql8. Индексы в названии групп нужно запомнить, так как они используются как параметр при стоп/старте конкретного инстанса. В группе mysqld_multi конфигурационного файла указан пользователь multi_admin и его пароль для того, чтоб каждый раз не пришлось вводить его вручную при стоп/старте
[mysqld_multi] mysqld = /usr/local/bin/mysqld_safe mysqladmin = /usr/local/bin/mysqladmin user = multi_admin password = ****** [mysqld6] datadir=/var/db/mysql/3306 pid-file=/var/db/mysql/3306/myserver.pid port=3306 socket=/tmp/mysql.sock3306 ... [mysqld7] datadir=/var/db/mysql/3307 pid-file=/var/db/mysql/3307/myserver.pid port=3307 socket=/tmp/mysql.sock3307 ... [mysqld8] datadir=/var/db/mysql/3308 pid-file=/var/db/mysql/3308/myserver.pid port=3308 socket=/tmp/mysql.sock3308 ...
Для каждого инстанса создаём свои каталоги
cd /var/db/mysql mkdir 3306 3307 3308 chown mysql:mysql 3306 3307 3308
Тиражирование
Всю структуру данных, которую мы получили после инсталяции в каталоге /var/db/mysql копируем в каталоги 3306, 3307, 3308 и пробуем запустить все инстансы
mysqld_multi --no-log --defaults-file=/etc/my.cnf --user=multi_admin --password=****** start 6-8
Опция —no-log выведет диагностическое сообщение на экран, а не в лог-файл. Если всё сделано правильно, то в процессах мы увидим все три инстанса, которые висят на своих портах. Опцию mysql_enable=»YES» из rc.conf удаляем, она больше не понадобится. А чтобы все инстансы стартовали после включения сервера нужно в рутовый crontab внести запись
@reboot mysqld_multi --defaults-file=/etc/my.cnf --user=multi_admin --password=****** start 6-8
Всё

- Системный администратор с 2000 года
- Участник Хабр Q&A и cyberforum
- Кейсы