LINUX.ORG.RU

Непонятная проблема при автостарте двух MySQL


0

1

Привет. Обычно я пользуюсь 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/mysql-multiple-instance-on-centos-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.



Последнее исправление: fmyoen (всего исправлений: 2)

Непонятная проблема при автостарте двух MySQL

Конфиг 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
>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 || :

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

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

fmyoen
() автор топика
Ответ на: комментарий от maloi

Сделал так:

#get_mysql_option mysqld datadir "/var/lib/mysql2"
#datadir="$result"
#get_mysql_option mysqld socket "$datadir/mysql.sock"
#socketfile="$result"
#get_mysql_option mysqld_safe log-error "/var/lib/mysql2/mysqld.log"
#errlogfile="$result"
#get_mysql_option mysqld_safe pid-file "/var/run/mysqld/mysqld2.pid"
#mypidfile="$result"
datadir="/var/lib/mysql2"
socketfile="$datadir/mysql.sock"
errlogfile="/var/lib/mysql2/mysqld.log"
mypidfile="/var/run/mysqld/mysqld2.pid"

Ничего не изменилось.

Добавил перед запуском mysqld_safe строку

echo "datadir=$datadir, socketfile=$socketfile, errlogfile=$errlogfile, mypidfile=$mypidfile"

Её вывод одинаков и при запуске из шелла, и при перезагрузке:

datadir=/var/lib/mysql2, socketfile=/var/lib/mysql2/mysql.sock, errlogfile=/var/lib/mysql2/mysqld.log, mypidfile=/var/run/mysqld/mysqld2.pid

Сервис mysqld2 не стартует при перезагрузке в принципе. Даже если сделать chkconfig mysqld1 off, mysqld2 не начинает запускаться.

fmyoen
() автор топика
Ответ на: комментарий от leave

Имеется в виду сделать /etc/init.d/mysqld2 start из шелла? Работает. Насколько я понимаю, service mysqld2 start делает то же самое.

fmyoen
() автор топика

>двух MySQL
я прям даже стесняюсь спросить «а зачем?»

JFreeM ★★★☆
()
Ответ на: комментарий от leave

Всё сделано. Я уже понял проблему: selinux блокирует второй mysql. После переключения его в permissive режим, оба сервера стали запускаться. Продолбался несколько дней с этой проблемой из-за того, что на фре по умолчанию такой системы нет. Но я ещё не понял, как ему сказать разрешить запускать оба сервера в enforcing режиме — разибраюсь с документацией. Кто-то может подсказать, как это сделать?

fmyoen
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.