Запуск нескольких инстансов mysql на одном сервере

Имеется возможность запустить несколько инстансов 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

Всё

5 2 голоса
Оцените статью
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии