====== Несколько MySQL серверов на одной машине ====== 1. Создаем необходимые нам папки и устанавливаем в них пустую базу mkdir -p /var/lib/mysql2/mysql mkdir /var/lib/mysql2/mysql/data mkdir /var/lib/mysql2/mysql/log mkdir /var/lib/mysql2/mysql/run mkdir /var/lib/mysql2/mysql/lock chown -R mysql:mysql /var/lib/mysql2/mysql mysql_install_db --datadir=/var/lib/mysql2/mysql/data --user=mysql 2. Создаем новый минимальный конфигурационный файл для нашего нового сервера **/etc/my2.cnf** [mysqld] port=3307 datadir=/var/lib/mysql2/mysql/data socket=/var/lib/mysql2/mysql/mysql.sock user=mysql log-bin = /var/lib/mysql2/mysql/log/mysql-bin.log [mysqld_safe] log-error=/var/lib/mysql2/mysql/log/mysqld.log pid-file=/var/lib/mysql2/run/mysqld.pid [isamchk] [myisamchk] 3. Создаем новый init.d скрипт **/etc/init.d/mysql2** #!/bin/bash # # mysqld.server2 This shell script takes care of starting and stopping # the MySQL subsystem (mysqld). # # chkconfig: - 64 36 # description: MySQL database server 2nd instance. # processname: mysqld # config: /etc/my2.cnf # pidfile: /var/lib/mysql2/mysql/run/mysqld.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network prog="MySQL" # extract value of a MySQL option from config files # Usage: get_mysql_option SECTION VARNAME DEFAULT # result is returned in $result # We use my_print_defaults which prints all options from multiple files, # with the more specific ones later; hence take the last match. get_mysql_option(){ result=`/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1` if [ -z "$result" ]; then # not found, use default result="$3" fi } get_mysql_option mysqld datadir "/var/lib/mysql2/mysql/data" datadir="/var/lib/mysql2/mysql/data" get_mysql_option mysqld socket "$datadir/mysql.sock" socketfile="$datadir/mysql.sock" get_mysql_option mysqld_safe log-error "/var/lib/mysql2/mysql/log/mysqld.log" errlogfile="/var/lib/mysql2/mysql/log/mysqld.log" get_mysql_option mysqld_safe pid-file "/var/lib/mysql2/mysql/run/mysqld.pid" mypidfile="/var/lib/mysql2/mysql/run/mysqld.pid" start(){ touch "$errlogfile" chown mysql:mysql "$errlogfile" chmod 0640 "$errlogfile" [ -x /sbin/restorecon ] && /sbin/restorecon "$errlogfile" if [ ! -d "$datadir/mysql" ] ; then action $"Initializing MySQL database: " /usr/bin/mysql_install_db ret=$? chown -R mysql:mysql "$datadir" if [ $ret -ne 0 ] ; then return $ret fi fi chown mysql:mysql "$datadir" chmod 0755 "$datadir" # Pass all the options determined above, to ensure consistent behavior. # In many cases mysqld_safe would arrive at the same conclusions anyway # but we need to be sure. /usr/bin/mysqld_safe --defaults-file=/etc/my2.cnf --datadir="$datadir" --socket="$socketfile" \ --log-error="$errlogfile" --pid-file="$mypidfile" \ >/dev/null 2>&1 & ret=$? # Spin for a maximum of N seconds waiting for the server to come up. # Rather than assuming we know a valid username, accept an "access # denied" response as meaning the server is functioning. if [ $ret -eq 0 ]; then STARTTIMEOUT=30 while [ $STARTTIMEOUT -gt 0 ]; do RESPONSE=`/usr/bin/mysqladmin -uUNKNOWN_MYSQL_USER ping 2>&1` && break echo "$RESPONSE" | grep -q "Access denied for user" && break sleep 1 let STARTTIMEOUT=${STARTTIMEOUT}-1 done if [ $STARTTIMEOUT -eq 0 ]; then echo "Timeout error occurred trying to start MySQL Daemon." action $"Starting $prog: " /bin/false ret=1 else action $"Starting $prog: " /bin/true fi else action $"Starting $prog: " /bin/false fi [ $ret -eq 0 ] && touch /var/lib/mysql2/mysql/lock/mysqld return $ret } stop(){ MYSQLPID=`cat "$mypidfile" 2>/dev/null ` if [ -n "$MYSQLPID" ]; then /bin/kill "$MYSQLPID" >/dev/null 2>&1 ret=$? if [ $ret -eq 0 ]; then STOPTIMEOUT=60 while [ $STOPTIMEOUT -gt 0 ]; do /bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break sleep 1 let STOPTIMEOUT=${STOPTIMEOUT}-1 done if [ $STOPTIMEOUT -eq 0 ]; then echo "Timeout error occurred trying to stop MySQL Daemon." ret=1 action $"Stopping $prog: " /bin/false else rm -f /var/lib/mysql2/mysql/lock/mysqld rm -f "$socketfile" action $"Stopping $prog: " /bin/true fi else action $"Stopping $prog: " /bin/false fi else ret=1 action $"Stopping $prog: " /bin/false fi return $ret } restart(){ stop start } condrestart(){ [ -e /var/lib/mysql2/mysql/lock/mysqld ] && restart || : } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status mysqld ;; restart) restart ;; condrestart) condrestart ;; *) echo $"Usage: $0 {start|stop|status|condrestart|restart}" exit 1 esac exit $? 4. Включаем автозапуск и стартуем chmod +x /etc/init.d/mysqld2 chkconfig mysqld2 on service mysqld2 start 5. Меняем пароль mysqladmin -P 3307 --protocol=tcp -u root password 'NEWPASSWORD' 6. Подключаемся и смотрим # mysql -P 3307 --protocol=tcp -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 5.5.19-log Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) mysql> 7. Проверяеем запущеные демоны # ps -ax | grep mysql Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ 2996 pts/1 S+ 0:00 grep --color=auto mysql 15491 ? S 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql --open-files-limit=65535 16096 ? Sl 5422:02 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --open-files-limit=65535 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock 19765 ? S 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my2.cnf --datadir=/var/lib/mysql2/mysql/data --socket=/var/lib/mysql2/mysql/data/mysql.sock --log-error=/var/lib/mysql2/mysql/log/mysqld.log --pid-file=/var/lib/mysql2/mysql/run/mysqld.pid 20343 ? Sl 15:04 /usr/libexec/mysqld --defaults-file=/etc/my2.cnf --basedir=/usr --datadir=/var/lib/mysql2/mysql/data --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql2/mysql/log/mysqld.log --pid-file=/var/lib/mysql2/mysql/run/mysqld.pid --socket=/var/lib/mysql2/mysql/data/mysql.sock --port=3307 8. По мотивам статьи [[http://unixmen.com/linux-tutorials/1863--multiple-mysql-instance-on-fedoracentosredhatscientific-linux]]