Что такое «способ Debian» для установки нескольких экземпляров MySQL на одном сервере?

9

Знаете ли вы какой-нибудь «способ Debian» для установки нескольких экземпляров MySQL на одном сервере? Сервер будет получать данные, реплицированные из нескольких удаленных баз данных.

Я мог бы использовать такие скрипты, как mysqlsandbox, но я предпочитаю придерживаться пакетов Debian и хотел бы иметь возможность обновить установку без особых сложностей в будущем. Другим решением является mysqlmanager - он работает с MySQL 5.1, но устарел и больше не выпускается с 5.5.

Итак, какова «лучшая практика» запуска нескольких экземпляров MySQL на одном сервере Debian?

PQD
источник
В настоящее время докер может быть использован в таких случаях.
ALex_hha

Ответы:

12

Я считаю, что это так же просто, как запустить mysqld_multiи правильно настроить my.cnf. mysqld_multiявляется частью дистрибутива MySQL, а не упакованным излишком.

Существует патч , чтобы сделать /usr/share/mysql/mysqld_multi.serverподходящую для использования в /etc/init.dи другом патч , чтобы сделать mysqld_multiфайлы использование в /etc/mysql/conf.d.

Вы можете инициализировать каталоги данных MySQL для новых экземпляров с помощью следующей mysql_install_dbкоманды:

mysql_install_db --datadir=/var/lib/mysql2

Не забудьте сменить пароль root вновь созданного экземпляра:

mysqladmin --port 3307 --user=root password 'new-password'
тонкий лед
источник
Спасибо; Вы используете это на практике? какие-нибудь ужасные истории / намеки?
PQD
1
Моя ужасная история - восстановление данных длиной 2 дня, потому что сценарий инициализации mysql Debian не корректно завершал работу mysql, потому что завершение работы заняло слишком много времени. С тех пор я не использую пакет Debian MySQL, только бинарный дистрибутив Percona и initscript в нем
Gabor Vincze
@GaborVincze - это было в настройке mysqld_multi или в «обычной» установке с одним экземпляром mysql?
PQD
Это была обычная установка. 5.1
Габор Винч
1
Я использую mysqld_multi на практике. Самое сложное в том, что вам нужно использовать mysqld_multi / mysqladmin для запуска / выключения экземпляров по сравнению с /etc/init.d/mysqld restart - там не так уж много заранее подготовленных сценариев, которые облегчают эту задачу. Как только вы справитесь с этим, он станет устаревшим и станет очень удобным способом раскрутить экземпляр, скажем, для восстановления, отложенной репликации - что угодно.
12:00
3

В Debian 8 вы можете использовать механизм Systemd: больше не нужно mysqld_multi.

ПРИМЕЧАНИЕ: я использую версию MariaDB! Не уверен, работает ли он с «классическим» пакетом MySQL.

От /lib/systemd/system/mariadb@.service:

Многоэкземплярная версия mariadb. Ибо, если вы запускаете несколько версий одновременно. Также используется для mariadb @ bootstrap для начальной загрузки Galera.

создать файл конфигурации /etc/mysql/conf.d/ my {instancename} .cnf

начать как systemctl начать mariadb@ndominstancename‹.server

Итак, создайте файл /etc/mysql/conf.d/myserver2.cnfи укажите в нем новые файлы pid / socket / datadir и сетевой порт:

[mysqld]
user        = mysql
pid-file    = /var/run/mysqld/mysqld-server2.pid
socket      = /var/run/mysqld/mysqld-server2.sock
port        = 3307
basedir     = /usr
datadir     = /var/lib/mysql-server2
tmpdir      = /tmp

РЕДАКТИРОВАТЬ: будьте осторожны, что первый экземпляр MySQL не читает этот файл конфигурации, с !includedir /etc/mysql/conf.d/*в нижней части /etc/mysql/my.cnf. Если дело обстоит так, замените на !includedira !includeкаждого файла конфигурации ДРУГОЕ, чем myserver2.cnf:

#!includedir /etc/mysql/conf.d/*
!include /etc/mysql/conf.d/conf1.cnf
!include /etc/mysql/conf.d/confX.cnf

MySQL официального документа указать , что вы должны назвать , [mysqld]как [mysqld@server2]( https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html#systemd-multiple-mysql-instances ) , но это не работает с MariaDB , Так что просто давай [mysqld].

Перед запуском нового демона не забудьте создать datadir и необходимые файлы:

mkdir /var/lib/mysql-server2
chown mysql:mysql /var/lib/mysql-server2
mysql_install_db --datadir=/var/lib/mysql-server2

Также перезагрузите конфигурацию демона systemd:

systemctl daemon-reload

И если вы хотите запустить этот демон при загрузке:

systemctl enable mariadb@server2

Чтобы начать это:

service mariadb@server2 start
Наихудший
источник
Основной (неэкземплярный) mysql читает /etc/my.cnf, вот почему.
Майкл Хэмптон
Я отредактировал свой ответ: на самом деле, похоже, что первый экземпляр ДОЛЖЕН прочитать файл server2.cnf с !includedir /etc/mysql/conf.d/*. Для большей безопасности я включил каждый conf.dфайл вручную
Худшее