Запускаем несколько копий MySQL на одной машине
Для решения задачи запуска нескольких копий mysql (на разных портах) на одном сервере существуют различные методы. Вы можете либо установить mysql в разные места, используя проекты mysqld_multi или MySQL Sandbox. Но простейшим решением, которое использую я, является использование общего дистрибутива, но с использованием нескольких конфигурационных файлов (с разными значениями портов, сокетов, пидов и директорий данных). В этой заметке я покажу этот метод.
1. Создаем новые директории для данных и логов
Нам необходимо создать новую директорию для данных и лог файлов. Также нужно назначить правильные права на эти папки:
mkdir /var/lib/mysql2 chown -R mysql.mysql /var/lib/mysql2/ mkdir /var/log/mysql2 chown -R mysql.mysql /var/log/mysql2
2. Создаём новый конфигурационный файл
Далее нам необходимо создать новый конфиг. Мы можем скопировать существующий конфиг и изменить необходимые значения. В моём дистрибутиве Debian конфигурационный файл лежит в /etc/mysql/my.cnf:
cp -R /etc/mysql/ /etc/mysql2
если вы используете редхатоподобные дистрибутивы тогда ваш конфиг будет лежать по адресу /etc/my.cnf и вы можете скопировать непосредственно его:
cp /etc/my.cnf /etc/my2.cnf
Далее нам необходимо отредактировать конфигурационный файл и внести изменения как минимум в параметры mysql port (по умолчанию 3306), pid и socket, и также директории данных и логов:
cd /etc/mysql2/ sed -i 's/3306/3307/g' my.cnf sed -i 's/mysqld.sock/mysqld2.sock/g' my.cnf sed -i 's/mysqld.pid/mysqld2.pid/g' my.cnf sed -i 's/var\/lib\/mysql/var\/lib\/mysql2/g' my.cnf sed -i 's/var\/log\/mysql/var\/log\/mysql2/g' my.cnf
3. Инициализация и запуск
Наконец проводим инициализацию:
mysql_install_db --user=mysql --datadir=/var/lib/mysql2/
В качестве альтернативного метода мы можем скопировать существующий /var/lib/mysql если необходимо (обязательно требуется остановить mysql).
Запускаем нашу новую копию mysql:
mysqld_safe --defaults-file=/etc/mysql2/my.cnf &
Мы можем подключиться к ней используя команды:
mysql -S /var/run/mysqld/mysqld2.sockor <code>mysql -h 127.0.0.1 -P 3307</code>
И если она больше не нужна, останавливаем её:
mysqladmin -S /var/run/mysqld/mysqld2.sock shutdown
Ниже размещен скрипт для создания множества копий mysql, который полностью автоматизирует работу. Запускать следует следующим образом: new_mysql_instance.sh <ID>
#!/bin/bash i=$1 port=$[3306+$i] mkdir /var/lib/mysql$i chown -R mysql.mysql /var/lib/mysql$i/ mkdir /var/log/mysql$i chown -R mysql.mysql /var/log/mysql$i cp -R /etc/mysql/ /etc/mysql$i cd /etc/mysql$i/ sed -i "s/3306/$port/g" my.cnf sed -i "s/mysqld.sock/mysqld$i.sock/g" my.cnf sed -i "s/mysqld.pid/mysqld$i.pid/g" my.cnf sed -i "s/var\/lib\/mysql/var\/lib\/mysql$i/g" my.cnf sed -i "s/var\/log\/mysql/var\/log\/mysql$i/g" my.cnf mysql_install_db --user=mysql --datadir=/var/lib/mysql$i/ mysqld_safe --defaults-file=/etc/mysql$i/my.cnf &
Постовой
Перевозка сыпучих грузов, цементовозы, муковозы. Большой парк машин в вашем распоряжении.
Комментариев: 4
Запускаю скрипт, создаются папки, а вт с базами проблема:
$ sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql2
Installing MySQL system tables...
110403 13:54:52 [Warning] Can't create test file /var/lib/mysql2/ubuntuServ64.lower-test
110403 13:54:52 [Warning] Can't create test file /var/lib/mysql2/ubuntuServ64.lower-test
Installation of system tables failed! Examine the logs in
/var/lib/mysql2 for more information.
You can try to start the mysqld daemon with:
shell> /usr/sbin/mysqld --skip-grant &
and use the command line tool /usr/bin/mysql
to connect to the mysql database and look at the grant tables:
shell> /usr/bin/mysql -u root mysql
mysql> show tables
Try 'mysqld --help' if you have problems with paths. Using --log
gives you a log in /var/lib/mysql2 that may be helpful.
The latest information about MySQL is available on the web at
http://www.mysql.com/. Please consult the MySQL manual section
'Problems running mysql_install_db', and the manual section that
describes problems on your OS. Another information source are the
MySQL email archives available at http://lists.mysql.com/.
Please check all of the above before mailing us! And remember, if
you do mail us, you MUST use the /usr/scripts/mysqlbug script!
Я так понимаю ему прав не хватает чтоли? Но права на папки то одинаковые (на mysql и mysql2), и с mysql первый сервер (который из коробки стоит) нормально работает, а вот в созданные скриптом папки устанавливать базы не хочет (
P.S. Ubuntu 10.10
сделай /etc/init.d/apparmor stop
или подправь его конфиг, это он запрещает
Every one acknowledges that modern life is not cheap, nevertheless different people require cash for various stuff and not every person earns enough money. Thus to get good personal loans and just car loan will be good way out.
Спасибо за статью.
Только у меня не захотела сразу
ругалась
Installation of system tables failed! Examine the logs in
/var/lib/mysql2 for more information.
проблема решилась указание пути к конфигам
# mysql_install_db --user=mysql --datadir=/var/lib/mysql2 --defaults-file=/etc/mysql2/my.cnf