Іноді постає необхідність встановити ще одну базу даних на тому ж хості, але просто на іншому порту. І як показала практика, краще за все це робити за допомогою функціоналу mysqld_multi, котрим володіють останні версії mysql.
1) Ясна справа у вас має бути встановлений mysql-server та mysql-client.
2) Зупиняємо наявний демон, якщо його запущено, бекапимо конфіг /etc/mysql/my.cnf (чи просто /etc/my.cnf).
3) Створюємо новий:
cat /etc/my.cnf
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
[mysqld1]
datadir = /var/lib/mysql1
socket = /var/lib/mysql1/mysql.sock
pid-file = /var/run/mysqld/mysqld1.pid
user = mysql
port = 3306
log-error=/var/log/mysqld1.log
[mysqld2]
datadir=/var/lib/mysql2
socket=/var/lib/mysql2/mysql.sock
pid-file = /var/run/mysqld/mysqld2.pid
user=mysql
port = 3307
log-error=/var/log/mysqld2.log
[mysqld3]
datadir=/var/lib/mysql3
socket=/var/lib/mysql3/mysql.sock
pid-file = /var/run/mysqld/mysqld3.pid
user=mysql
port = 3308
log-error=/var/log/mysqld3.log
Одне невеличке зауваження: директорія /var/run - це сімлінк на директорію /run, що примонтована як віртуальна файлова система (tmpfs), тому краще за все не створювати нових піддерикторій для розміщення pid-файлів, адже вони просто не будуть створені при наступному перезавантаженні. Або ж можна створювати pid-файли на реальній файлові системі...
4) Зупиняємо/видаляємо/редагуємо правила системного демона безпеки. Наприклад, для Ubuntu - це Apparmor, для Centos/Red Hat - це SElinux і т.п. Впевнений, що вам допоможуть ці посилання:
5) Генеруємо структуру баз даних для інстансів в кожній директорії /var/lib/mysql[1,2,3]:
mysql_install_db --user=mysql --datadir=/var/lib/mysql1
mysql_install_db --user=mysql --datadir=/var/lib/mysql2
mysql_install_db --user=mysql --datadir=/var/lib/mysql3
Звісно, що директорії /var/lib/mysql[1,2,3] мають існувати перед цим.
6) Встановлюємо правильного власника на директорії:
chown mysql:mysql /var/lib/mysql[1,2] -R
7) Запускаємо mysql і читаємо лог-файли при необхідності:
mysqld_multi start
Перевіряємо статус роботи серверів:
# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
Можна запустити лиш один/декілька серверів із групи:
mysqld_multi start 1
mysqld_multi start 1,2
8) Перевіряємо роботу інстансу, підключившись до нього:
mysql -P3306 --protocol=tcp
mysql -P3307 --protocol=tcp
mysql -P3308 --protocol=tcp
Або ж через сокети:
mysql -S /var/lib/mysql1/mysql.sock
mysql -S /var/lib/mysql2/mysql.sock
mysql -S /var/lib/mysql3/mysql.sock
ПС. Якщо підключатись лише з ключем порту, то кожного разу ви будете потрапляти до дефолтного інстансу на 3306 порту.
Ось власне і все. Додам декілька корисних посилань:
chkconfig --add mysqld_multi
ВідповістиВидалитипишет не такого файл или процесса. в /etc/rc.d/init.d там действительно нет этого файла.
как то победить это можно?
на убунті в автозапуск дещо інакше додається. а я підозріваю що в тебе взагалі freebsd.
Видалитинеа, Centos.
Видалититак, выдповідно коли mysql_multi запускається як:
Видалитиmysql_multi start N
То init.d скрипт выдсутній. Тому є два варіанти: додати команду запуску в /etc/rc.local чи написати свій init.d скрипт, щось на зразок цього http://www.cyberciti.biz/tips/linux-write-sys-v-init-script-to-start-stop-service.html