1 (06.11.2011 15:20:30 отредактировано fmyoen)

Привет. Обычно я пользуюсь FreeBSD, поэтому, возможно, ответ на мой вопрос будет тривиальным. Мне нужно установить два MySQL сервера на одну CentOS. Всё работает, но при перезапуске системы запускается только один MySQL.

Вот описание того, как я проводил установку. Сначала я установил MySQL и добавил сервис к автозапуску при перезагрузке:

 Консоль:
>yum update
>yum install mysql-server.i386
>chkconfig mysqld on
>service mysqld start

Всё работает и MySQL запускается и при перезапуске системы, и из шелла.

Потом я начал разделение на два сервера. В качестве руководства использовалась статья http://blog.mydream.com.hk/howto/linux/ … ntos-howto. Для первого сервера файлы были переименованы следующим образом:

 Консоль:
>chkconfig --del mysqld
>mv /etc/my.cnf /etc/my1.cnf
>rm -rf /var/lib/mysql
>mv /etc/init.d/mysqld /etc/init.d/mysqld1
>chkconfig --add mysqld1
>chkconfig mysqld1 on
>rm /var/log/mysqld.log

Отредактированные my1.cnf и mysqld1 я приаттачиваю к посту. Если в двух словах, я поменял пути к сокету, локу, логу, директории с БД, добавил added "port=3306" в my1.cnf и "--defaults-file=/etc/my1.cnf" в mysqld1.

Всё по-прежнему работает, первый сервер нормально запускается и при перезапуске системы, и из шелла.

Настройка второго сервера на порту 3307:

 Консоль:
>cp -vp /etc/my1.cnf /etc/my2.cnf
>cp -vp /etc/init.d/mysqld1 /etc/init.d/mysqld2
>chkconfig --add mysqld2
>chkconfig mysqld2 on
>semanage port -a -t mysqld_port_t -p tcp 3307

Отредактированные my2.cnf и mysqld2 тоже есть в архиве. Единственное отличие от конфига для первого MySQL — пути содержат 2 вместо 1 и порт изменён на 3307.

Оба сервера нормально стартуют из шелла, но только первый запускается при перезагрузке. В логах ничего вразумительного. Второй сервер запускается и сразу останавливается:

 Консоль:
>less /var/lib/mysql2/mysqld.log
111106 02:32:32 mysqld started
111106 02:32:32 mysqld ended

111106 02:38:29 mysqld started
111106 02:38:29 mysqld ended

111106 02:44:50 mysqld started
111106 02:44:51 mysqld ended

111106 02:48:21 mysqld started
111106 02:48:21 mysqld ended

111106 02:56:23 mysqld started
111106 02:56:23 mysqld ended

111106 03:06:31 mysqld started
111106 03:06:31 mysqld ended

Есть у вас хоть какие-то идеи, что я сделал не так? Вроде как это не проблема с правами или владельцем файлов. Для меня это выглядит как какой-то подозрительный глюк MySQL или неправильно настроенный перезапуск сервиса из-за того, что у меня нет опыта работы с CentOS.

Конфиг CentOS практически ничем не отличается от дефолтного. Я отключил ip6tables и добавил pc.lan в /etc/hosts и/etc/sysconfig/network.

 Консоль:
>chkconfig --list mysqld1
mysqld1 0:off 1:off 2:on 3:on 4:on 5:on 6:off

>chkconfig --list mysqld2
mysqld2 0:off 1:off 2:on 3:on 4:on 5:on 6:off

 Консоль:
>ls -lA /etc/rc.d/rc?.d/ | grep mysql
lrwxrwxrwx 1 root root 17 Nov 6 02:54 K36mysqld1 -> ../init.d/mysqld1
lrwxrwxrwx 1 root root 17 Nov 6 03:27 K36mysqld2 -> ../init.d/mysqld2
lrwxrwxrwx 1 root root 17 Nov 6 02:54 K36mysqld1 -> ../init.d/mysqld1
lrwxrwxrwx 1 root root 17 Nov 6 03:27 K36mysqld2 -> ../init.d/mysqld2
lrwxrwxrwx 1 root root 17 Nov 6 03:27 K36mysqld2 -> ../init.d/mysqld2
lrwxrwxrwx 1 root root 17 Nov 6 02:54 S64mysqld1 -> ../init.d/mysqld1
lrwxrwxrwx 1 root root 17 Nov 6 03:27 K36mysqld2 -> ../init.d/mysqld2
lrwxrwxrwx 1 root root 17 Nov 6 02:54 S64mysqld1 -> ../init.d/mysqld1
lrwxrwxrwx 1 root root 17 Nov 6 03:27 K36mysqld2 -> ../init.d/mysqld2
lrwxrwxrwx 1 root root 17 Nov 6 02:54 S64mysqld1 -> ../init.d/mysqld1
lrwxrwxrwx 1 root root 17 Nov 6 03:27 K36mysqld2 -> ../init.d/mysqld2
lrwxrwxrwx 1 root root 17 Nov 6 02:54 S64mysqld1 -> ../init.d/mysqld1
lrwxrwxrwx 1 root root 17 Nov 6 02:54 K36mysqld1 -> ../init.d/mysqld1
lrwxrwxrwx 1 root root 17 Nov 6 03:27 K36mysqld2 -> ../init.d/mysqld2

 Консоль:
>uname -a
Linux pc.lan 2.6.18-274.7.1.el5 #1 SMP Thu Oct 20 16:20:37 EDT 2011 i686 i686 i386 GNU/Linux

>rpm -qa | grep mysql
mysql-5.0.77-4.el5_6.6
mysql-server-5.0.77-4.el5_6.6

 Консоль:
>diff /etc/my1.cnf /etc/my2.cnf
2,4c2,4
< port=3306
< datadir=/var/lib/mysql1
< socket=/var/lib/mysql1/mysql.sock
---
> port=3307
> datadir=/var/lib/mysql2
> socket=/var/lib/mysql2/mysql.sock
16,17c16,17
< log-error=/var/lib/mysql1/mysqld.log
< pid-file=/var/run/mysqld/mysqld1.pid
---
> log-error=/var/lib/mysql2/mysqld.log
> pid-file=/var/run/mysqld/mysqld2.pid

[console]>diff /etc/init.d/mysqld1 /etc/init.d/mysqld2
9,10c9,10
< # config: /etc/my1.cnf
< # pidfile: /var/run/mysqld/mysqld1.pid
---
> # config: /etc/my2.cnf
> # pidfile: /var/run/mysqld/mysqld2.pid
19c19
< prog="MySQL1"
---
> prog="MySQL2"
34c34
< get_mysql_option mysqld datadir "/var/lib/mysql1"
---
> get_mysql_option mysqld datadir "/var/lib/mysql2"
38c38
< get_mysql_option mysqld_safe log-error "/var/lib/mysql1/mysqld.log"
---
> get_mysql_option mysqld_safe log-error "/var/lib/mysql2/mysqld.log"
40c40
< get_mysql_option mysqld_safe pid-file "/var/run/mysqld/mysqld1.pid"
---
> get_mysql_option mysqld_safe pid-file "/var/run/mysqld/mysqld2.pid"
61c61
< /usr/bin/mysqld_safe --defaults-file="/etc/my1.cnf" --datadir="$datadir" --socket="$socketfile" \
---
> /usr/bin/mysqld_safe --defaults-file="/etc/my2.cnf" --datadir="$datadir" --socket="$socketfile" \
86c86
< [ $ret -eq 0 ] && touch /var/lock/subsys/mysqld1
---
> [ $ret -eq 0 ] && touch /var/lock/subsys/mysqld2
107c107
< rm -f /var/lock/subsys/mysqld1
---
> rm -f /var/lock/subsys/mysqld2
127c127
< [ -e /var/lock/subsys/mysqld1 ] && restart || :
---
> [ -e /var/lock/subsys/mysqld2 ] && restart || ah/console]

Не разобрался с аттачами на форуме, поэтому залил файлы на внешний сервер: http://zalil.ru/32000948. В архиве /etc/my?.cnf, /etc/init.d/mysqld* и скриншот того, что происходит при запуске.

Если надо, могу залить образ виртуальной машины VMware, на которой я провожу настройку.

2

Американцы тоже молчат  ag 
http://www.linuxforums.org/forum/red-ha … oblem.html
Седня просто день такой, завтра народ понабежит...

3

Ka3aH6ac пишет:

Седня просто день такой, завтра народ понабежит...


Очень на это надеюсь.

4

Как то сложно все, а если так:
http://dev.mysql.com/doc/refman/5.0/en/ … multi.html

It is good day to die ...
MS Windows 10
Заметки о главном...

5

i2ks пишет:

Как то сложно все, а если так:
http://dev.mysql.com/doc/refman/5.0/en/ … multi.html

Ты вываливаешь слишком общий кусок и предлагаешь сделать какие-то выводы на его основе. "Так" это конкретно как? В статье тоже переделывают RC скрипт и тоже советуют сделать cnf файл под каждый из серверов. Что именно сложно? Что я не учёл? Обоим серверам точно передаются правильные пути:

datadir="/var/lib/mysql1"
socketfile="$datadir/mysql.sock"
errlogfile="/var/lib/mysql1/mysqld.log"
mypidfile="/var/run/mysqld/mysqld1.pid"
datadir="/var/lib/mysql2"
socketfile="$datadir/mysql.sock"
errlogfile="/var/lib/mysql2/mysqld.log"
mypidfile="/var/run/mysqld/mysqld2.pid"

Второй сервис не стартует даже если отключить первый при помощи chkconfig mysqld1 off. Т. е. когда нет lock'а и pid'а от первого сервера. Прописывание таких же путей, как у меня в консоли тоже не помогло.

6

fmyoen, Ок, ладно, тогда пойдем по другому пути, а что у нас в логах? есть ли ошибки какие, так как на скрине лишь только значение сервиса помеченным как failed который мало о чем скажет.

It is good day to die ...
MS Windows 10
Заметки о главном...

7

i2ks пишет:

Ок, ладно, тогда пойдем по другому пути, а что у нас в логах?

Об этом я тоже писал:

В логах ничего вразумительного. Второй сервер запускается и сразу останавливается:

 Консоль:
>less /var/lib/mysql2/mysqld.log
111106 02:32:32 mysqld started
111106 02:32:32 mysqld ended

111106 02:38:29 mysqld started
111106 02:38:29 mysqld ended

111106 02:44:50 mysqld started
111106 02:44:51 mysqld ended

111106 02:48:21 mysqld started
111106 02:48:21 mysqld ended

111106 02:56:23 mysqld started
111106 02:56:23 mysqld ended

111106 03:06:31 mysqld started
111106 03:06:31 mysqld ended

i2ks пишет:

на скрине лишь только значение сервиса помеченным как failed который мало о чем скажет.

На скрине ещё не самый худший вариант — я сделал, чтобы сообщение mysql_safe не перенаправлялись в /dev/null.

8

fmyoen, а в /var/log/messages нет ни чего что ли? какие то не информативные логи.

It is good day to die ...
MS Windows 10
Заметки о главном...

9

i2ks пишет:

fmyoen, а в /var/log/messages нет ни чего что ли?

Упоминаний о каких-то ошибках или о mysql нет. Если надо, могу приаттачить файл, но там действительно ничего нет.

i2ks пишет:

какие то не информативные логи.

Для сравнения вот как выглядит /var/lib/mysqld2/mysqld.log, когда сервер стартует и останавливается из шелла:

 Консоль:
111106 17:42:28  mysqld started
111106 17:42:28 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
111106 17:42:28 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
111106 17:42:28  InnoDB: Started; log sequence number 0 43655
111106 17:42:28 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.77'  socket: '/var/lib/mysql2/mysql.sock'  port: 3307  Source distribution
111106 17:44:21 [Note] /usr/libexec/mysqld: Normal shutdown

111106 17:44:21  InnoDB: Starting shutdown...
111106 17:44:22  InnoDB: Shutdown completed; log sequence number 0 43655
111106 17:44:22 [Note] /usr/libexec/mysqld: Shutdown complete

10

Может быть по экспериментировать с версиями MySQL...

11

fmyoen,в доке то что вы привели, уж очень много воды, и как это работает мне не понятно, если можно руководствоваться документацией, кстати, я ее вам привел. Если вы внимательно почитаете, то увидите то что используется лишь только один /etc/my.cnf файл, а в нем прописываются только [mysqldX], где X номер сервиса, к примеру [mysqld2] или [mysqld3], далее приведен скрипт mysqld_multi , который помещен в /etc/init.d/ . Может все же вы попробуете сделать так как пишут в документации?

Ka3aH6ac пишет:

Может быть по экспериментировать с версиями MySQL...

Надо документацию читать, а не экспериментировать.  smile

It is good day to die ...
MS Windows 10
Заметки о главном...

12 (07.11.2011 19:52:36 отредактировано fmyoen)

i2ks пишет:

Может все же вы попробуете сделать так как пишут в документации?

Если в двух словах, я тоже делаю правильно. В твоей "правильной" статье есть ссылка http://dev.mysql.com/doc/refman/5.0/en/ … rvers.html, в которой multiple_mysql называется лишь одним из вариантов руления множественными серверами. И я думаю, лучше его не использовать — он требует регистрации отдельного пользователя с правами шатдауна сервера и помещения его пароля в открытом виде в my.cnf. Да и идея с общим конфигом мне не нравится. У меня уже всё заработало. Проблема была не в mysql, а в том, что selinux, с которым под фрёй, понятное дело, я не сталкивался, блокировал второй сервер. Спасибо за желание помочь.

i2ks пишет:

fmyoen,в доке то что вы привели, уж очень много воды, и как это работает мне не понятно

Нет там воды и состоит она преимущественно из конфигов. И что непонятного в произведённых действиях?

1. Заменены пути к логу, локу, датадиру и конфигу. Они заменены и в конфиге mysql, и в скрипте из init.d. Можно было, в общем-то, только в конфиге.
2. Переименован init.d скрипт и сделана ещё одна его копия, запускающая второй сервер, в ней исправлены пути под второй сервер.

Это, собственно, всё.