SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.04.2016 18:32:32

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

несколько mysql на одном сервере

Доброго времени суток!


Попробовал сделать. Но, что-то у меня не получается.
OS Debian 7
10.0.24-MariaDB

mkdir /var/lib/mysql2 && chown -R mysql:mysql /var/lib/mysql2
mkdir /var/log/mysql2 && chown -R mysql:mysql /var/log/mysql2
cp -rp /etc/mysql/ /etc/mysql2/
mkdir /var/run/mysqld2 && chown -R mysql:mysql /var/run/mysqld2
Правим /etc/mysql2/my.cnf:

===============================

[client]
port        = 3310
socket        = /var/run/mysqld2/mysqld2.sock

[mysqld_safe]
socket        = /var/run/mysqld2/mysqld2.sock
nice        = 0

[mysqld]
user        = mysql
pid-file    = /var/run/mysqld2/mysqld.pid
socket        = /var/run/mysqld2/mysqld2.sock
port        = 3310
basedir        = /usr
datadir        = /var/lib/mysql2
tmpdir        = /tmp
lc_messages_dir    = /usr/share/mysql
lc_messages    = en_US
skip-external-locking

bind-address        = 127.0.0.1

max_connections        = 100
connect_timeout        = 5
wait_timeout        = 600
max_allowed_packet    = 16M
thread_cache_size       = 128
sort_buffer_size    = 4M
bulk_insert_buffer_size    = 16M
tmp_table_size        = 32M
max_heap_table_size    = 32M

myisam_recover          = BACKUP
key_buffer_size        = 128M
table_open_cache    = 400
myisam_sort_buffer_size    = 512M
concurrent_insert    = 2
read_buffer_size    = 2M
read_rnd_buffer_size    = 1M

query_cache_limit        = 128K
query_cache_size        = 64M

log_warnings        = 2
slow_query_log_file    = /var/log/mysql2/mariadb-slow.log
long_query_time = 10
log_slow_verbosity    = query_plan

log_bin            = /var/log/mysql2/mariadb-bin
log_bin_index        = /var/log/mysql2/mariadb-bin.index

expire_logs_days    = 10
max_binlog_size         = 100M

default_storage_engine    = InnoDB
innodb_buffer_pool_size    = 256M
innodb_log_buffer_size    = 8M
innodb_file_per_table    = 1
innodb_open_files    = 400
innodb_io_capacity    = 400
innodb_flush_method    = O_DIRECT

[mysqldump]
quick
quote-names
max_allowed_packet    = 16M
[mysql]
#no-auto-rehash    # faster start of mysql but no tab completition
[isamchk]
key_buffer        = 16M
!includedir /etc/mysql2/conf.d/
===============================

cp /etc/init.d/mysql /etc/init.d/mysql2
правим /etc/init.d/mysql2

===============================

#!/bin/bash
set -e
set -u
${DEBIAN_SCRIPT_DEBUG:+ set -v -x}

_SYSTEMCTL_SKIP_REDIRECT=true

test -x /usr/sbin/mysqld || exit 0

. /lib/lsb/init-functions

SELF=$(cd $(dirname $0); pwd -P)/$(basename $0)
CONF=/etc/mysql2/my.cnf
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql2/debian.cnf"

ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mysql2 -i"

cd /
umask 077

export HOME=/etc/mysql2/

mysqld_get_param() {
    /usr/sbin/mysqld --print-defaults \
        | tr " " "\n" \
        | grep -- "--$1" \
        | tail -n 1 \
        | cut -d= -f2
}

sanity_checks() {
  if [ ! -r /etc/mysql2/my.cnf ]; then
    log_warning_msg "$0: WARNING: /etc/mysql2/my.cnf cannot be read. See README.Debian.gz"
    echo                "WARNING: /etc/mysql2/my.cnf cannot be read. See README.Debian.gz" | $ERR_LOGGER
  fi

  datadir=`mysqld_get_param datadir`
  if LC_ALL=C BLOCKSIZE= df --portability $datadir/. | tail -n 1 | awk '{ exit ($4>4096) }'; then
    log_failure_msg "$0: ERROR: The partition with $datadir is too full!"
    echo                "ERROR: The partition with $datadir is too full!" | $ERR_LOGGER
    exit 1
  fi
}

mysqld_status () {
    ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? ))

    ps_alive=0
    pidfile=`mysqld_get_param pid-file`
    if [ -f "$pidfile" ] && ps `cat $pidfile` >/dev/null 2>&1; then ps_alive=1; fi
   
    if [ "$1" = "check_alive"  -a  $ping_alive = 1 ] ||
       [ "$1" = "check_dead"   -a  $ping_alive = 0  -a  $ps_alive = 0 ]; then
    return 0 # EXIT_SUCCESS
    else
      if [ "$2" = "warn" ]; then
          echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug
    fi
      return 1 # EXIT_FAILURE
    fi
}

case "${1:-''}" in
  'start')
    sanity_checks;
    # Start daemon
    log_daemon_msg "Starting MariaDB database server" "mysqld"
    if mysqld_status check_alive nowarn; then
       log_progress_msg "already running"
       log_end_msg 0
    else
        # Could be removed during boot
        test -e /var/run/mysqld2 || install -m 755 -o mysql -g root -d /var/run/mysqld2

        # Start MariaDB!
          /usr/bin/mysqld_safe "${@:2}" > /dev/null 2>&1 &

        # 6s was reported in #352070 to be too few when using ndbcluster
        for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-30}"); do
                sleep 1
            if mysqld_status check_alive nowarn ; then break; fi
        log_progress_msg "."
        done
        if mysqld_status check_alive warn; then
                log_end_msg 0
            # Now start mysqlcheck or whatever the admin wants.
            output=$(/etc/mysql2/debian-start)
        [ -n "$output" ] && log_action_msg "$output"
        else
            log_end_msg 1
        log_failure_msg "Please take a look at the syslog"
        fi
    fi
    ;;

  'stop')
    log_daemon_msg "Stopping MariaDB database server" "mysqld"
    if ! mysqld_status check_dead nowarn; then
      set +e
      shutdown_out=`$MYADMIN shutdown 2>&1`; r=$?
      set -e
      if [ "$r" -ne 0 ]; then
        log_end_msg 1
        [ "$VERBOSE" != "no" ] && log_failure_msg "Error: $shutdown_out"
        log_daemon_msg "Killing MariaDB database server by signal" "mysqld"
        killall -15 mysqld
            server_down=
        for i in `seq 1 600`; do
              sleep 1
              if mysqld_status check_dead nowarn; then server_down=1; break; fi
            done
          if test -z "$server_down"; then killall -9 mysqld2; fi
      fi
        fi

        if ! mysqld_status check_dead warn; then
      log_end_msg 1
      log_failure_msg "Please stop MariaDB manually and read /usr/share/doc/mariadb-server-10.0/README.Debian.gz!"
      exit -1
    else
      log_end_msg 0
        fi
    ;;

  'restart')
    set +e; $SELF stop; set -e
    $SELF start
    ;;

  'reload'|'force-reload')
      log_daemon_msg "Reloading MariaDB database server" "mysqld"
    $MYADMIN reload
    log_end_msg 0
    ;;

  'status')
    if mysqld_status check_alive nowarn; then
      log_action_msg "$($MYADMIN version)"
    else
      log_action_msg "MariaDB is stopped."
      exit 3
    fi
      ;;

  'bootstrap')
    # Bootstrap the cluster, start the first node
    # that initiates the cluster
    log_daemon_msg "Bootstrapping the cluster" "mysqld"
    $SELF start "${@:2}" --wsrep-new-cluster
    ;;

  *)
    echo "Usage: $SELF start|stop|restart|reload|force-reload|status|bootstrap"
    exit 1
    ;;
esac


===============================

стартуем
/etc/init.d/mysql2 start

и получаем
ps aux | grep mysql
root      9131  0.0  0.3  12096  1700 pts/1    S    18:21   0:00 /bin/bash /usr/bin/mysqld_safe
mysql     9475  0.1 24.7 1077592 125920 pts/1  Sl   18:21   0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --wsrep_provider=/usr/lib/galera/libgalera_smm.so --skip-log-error --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --wsrep_start_position=b2cc37dc-f821-11e5-9eb7-4ad4222673ac:18231
root      9476  0.0  0.1   6744   700 pts/1    S    18:21   0:00 logger -t mysqld -p daemon.error
root      9625  0.0  0.1   8988   880 pts/1    R+   18:31   0:00 grep mysql

запустился старый скрипт, не новый

Неактивен

 

#2 03.04.2016 03:41:56

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: несколько mysql на одном сервере

# Start MariaDB!
/usr/bin/mysqld_safe "${@:2}" > /dev/null 2>&1 &

--defaults-file добавьте вот сюда, и будет счастие.

А если глобально, то специально обученные люди из MySQL придумали mysqld_multi smile

Неактивен

 

#3 03.04.2016 11:12:26

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: несколько mysql на одном сервере

Заменил в файле тот параметр на --defaults-file. И, все равно не стартанул. Ну, да ладно.

Давайте, тогда разберемся с mysqld_multi

В конец файла my.cnf добавил


[isamchk]
key_buffer              = 16M

[mysqld_multi]
mysqld = /usr/sbin/mysqld
mysqladmin = /usr/bin/mysqladmin
user = multi_admin
password = multipass


[mysqld2]
socket = /var/run/mysqld/mysqld2.sock
port = 3312
pid-file = /var/run/mysqld/mysqld2.pid
datadir = /var/lib/mysql_multi/02
language = /usr/share/mysql/english
user = mysql

[mysqld3]
socket = /var/run/mysqld/mysqld3.sock
port = 3313
pid-file = /var/run/mysqld/mysqld3.pid
datadir = /var/lib/mysql_multi/03
language = /usr/share/mysql/english
user = mysql



#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/

Захватил по куску кода сверху и снизу, чтобы было понятно, где именно он находится.
=====================
Стартую:
mysqld_multi start 2
проверяю
mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is  not running
=====================
стартую 3ю
mysqld_multi start 3
проверяю
mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is  not running
===============
одним словом, больше одной не стартует.
я так понимаю, нужно было прописать права на пользователя  multi_admin в базе данных? Что за права ему дать?
я вот ему дал вот такие права
GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
FLUSH PRIVILEGES;

Отредактированно saifuddin (03.04.2016 11:13:34)

Неактивен

 

#4 03.04.2016 11:15:18

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: несколько mysql на одном сервере

А, если запустить первым главную mysql на порту 3306
service mysql start , то тогда ни одни из mysqld_multi не стартует. Или, если ее использовать, то тогда нужно забыть про основную?

Неактивен

 

#5 03.04.2016 12:53:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: несколько mysql на одном сервере

Вы логи MySQL смотрели? Что там написано, почему не стартует? «Основную» проще тоже запускать через multi.

Неактивен

 

#6 03.04.2016 12:59:22

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: несколько mysql на одном сервере

Вот именно в логах ни чего нет.
syslog
mysql/mysql.log

там пусто(ни чего про mysql)

Неактивен

 

#7 03.04.2016 13:00:21

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: несколько mysql на одном сервере

как они включаются в mysqd_multi?

Неактивен

 

#8 03.04.2016 13:50:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: несколько mysql на одном сервере

Найдите, где добавляется --skip-log-error, уберите и добавьте параметры log-error = /path/to/log/file в нужные куски my.cnf?

Неактивен

 

#9 03.04.2016 15:07:24

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: несколько mysql на одном сервере

в my.cnf нет такого параметра.

Там были закомментированные строки
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1
я их разкомментировал.
Все равно ни чего не получается.
При этом я убил процесс и снова запустил
mysqld_multi start 2 потом 3

в syslog and mysql.log\err\info пусто.

Неактивен

 

#10 03.04.2016 15:08:20

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: несколько mysql на одном сервере

Reporting MySQL servers
MySQL server from group: mysqld2 is not running
MySQL server from group: mysqld3 is running

что первым запускаю, то и имеет статус is running, другой не запускается.

Неактивен

 

#11 03.04.2016 21:19:21

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: несколько mysql на одном сервере

Так, видимо я ранее, что-то испортил в системе. Все снес и начал с начала. Вроде все запустилось с первого раза.
Прописал в my.cnf
[mysqld_multi]
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = multi_admin
password   = multipass

[mysqld2]
user            = mysql
pid-file        = /var/run/mysqld/mysqld2.pid
socket          = /var/run/mysqld/mysqld2.sock
port            = 3307
datadir         = /data/mysql/mysql2

[mysqld3]
user            = mysql
pid-file        = /var/run/mysqld/mysqld3.pid
socket          = /var/run/mysqld/mysqld3.sock
port            = 3308
datadir         = /data/mysql/mysql3

добавил пользователя и права на него
GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
FLUSH PRIVILEGES;

заполняем папки файлами
mysql_install_db --user=mysql --datadir=/data/mysql/mysql2
mysql_install_db --user=mysql --datadir=/data/mysql/mysql3

mysqld_multi start
mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running


netstat -nlput
tcp        0      0 127.0.0.1:3307          0.0.0.0:*               LISTEN      8107/mysqld     
tcp        0      0 127.0.0.1:3308          0.0.0.0:*               LISTEN      8104/mysqld

пытаюсь подключиться
mysql -h127.0.0.1 -ptest -uroot -P3307 -S /var/run/mysqld/mysqld2.sock
В ответ ни чего, переход на новую строку в консоли без возможности, что либо ввести, только контр + С спасает.

Как, оказалось старанули в первый раз все две базы данных, как только я попробовал их остановить, он не остановись  пришлось через kill убивать процесс.

В логах syslog:
====================
Apr  3 21:01:12 debian mysqld_safe: A mysqld process already exists
Apr  3 21:01:12 debian mysqld_safe: A mysqld process already exists
Apr  3 21:01:14 debian mysqld: 160403 21:01:14 [Warning] Access denied for user 'multi_admin'@'localhost' (using password: YES)
Apr  3 21:01:14 debian mysqld: 160403 21:01:14 [Warning] Access denied for user 'multi_admin'@'localhost' (using password: YES)
Apr  3 21:09:03 debian mysqld: 160403 21:09:03 [Warning] Access denied for user 'multi_admin'@'localhost' (using password: YES)
Apr  3 21:09:03 debian mysqld: 160403 21:09:03 [Warning] Access denied for user 'multi_admin'@'localhost' (using password: YES)

==========================
Потом они и вовсе не стартовали.
syslog:
=========================
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: Service thread queue flushed.
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: Assign initial position for certification: -1, protocol version: -1
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: wsrep_sst_grab()
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: Start replication
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: Setting initial position to 00000000-0000-0000-0000-000000000000:-1
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: protonet asio version 0
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: Using CRC-32C for message checksums.
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: backend: asio
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Warning] WSREP: access file(/data/mysql/mysql2//gvwstate.dat) failed(No such file or directory)
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: restore pc from disk failed
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: GMCast version 0
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: (dff41c59, 'tcp://0.0.0.0:4567') listening at tcp://0.0.0.0:4567
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: (dff41c59, 'tcp://0.0.0.0:4567') multicast: , ttl: 1
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: EVS version 0
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: gcomm: connecting to group 'clusterDB', peer '192.168.0.200:'
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [ERROR] WSREP: Address already in use
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [ERROR] WSREP: failed to open gcomm backend connection: 98: error while trying to listen 'tcp://0.0.0.0:4567?socket.non_blocking=1', asio error 'Address already in use': 98 (Address already in use)
Apr  3 21:14:15 debian mysqld: #011 at gcomm/src/asio_tcp.cpp:listen():777
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():208: Failed to open backend connection: -98 (Address already in use)
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [ERROR] WSREP: gcs/src/gcs.cpp:gcs_open():1379: Failed to open channel 'clusterDB' at 'gcomm://192.168.0.200': -98 (Address already in use)
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [ERROR] WSREP: gcs connect failed: Address already in use
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [ERROR] WSREP: wsrep::connect(gcomm://192.168.0.200) failed: 7
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [ERROR] Aborting
Apr  3 21:14:15 debian mysqld:
Apr  3 21:14:15 debian mysqld: 160403 21:14:15 [Note] WSREP: Service disconnected.
Apr  3 21:14:16 debian mysqld: 160403 21:14:16 [Note] WSREP: Some threads may fail to exit.
Apr  3 21:14:16 debian mysqld: 160403 21:14:16 [Note] /usr/sbin/mysqld: Shutdown complete
Apr  3 21:14:16 debian mysqld:
Apr  3 21:14:16 debian mysqld_safe: mysqld from pid file /var/run/mysqld/mysqld2.pid ended
==============

Что за варианты есть?

Отредактированно saifuddin (03.04.2016 21:21:02)

Неактивен

 

#12 03.04.2016 21:37:01

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: несколько mysql на одном сервере

У меня еще одни вопрос, а как же мне галеру запустить?

обычно я запускал первый кластер service mysql start --wsrep-new-cluster , а другие к нему присоединял service mysql start.

Тут выходит mysql на порту 3306 я запускаю через service mysql start --wsrep-new-cluster, а остальные через mysqld_multi start?

Неактивен

 

#13 04.04.2016 00:03:00

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: несколько mysql на одном сервере

Кажется, Вы делаете что-то странное. Для галеры нужно будет указывать отдельные порты галеры для каждого экземпляра. Но вообще, галера для этого не предназначена ;-)

Неактивен

 

#14 04.04.2016 00:04:39

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: несколько mysql на одном сервере

эх... это и плохо... вот вроде нашел статью, как галеру поднимают таким образом, но что-то не получается....

http://www.sebastien-han.fr/blog/2012/0 … th-galera/

Неактивен

 

#15 04.04.2016 02:07:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: несколько mysql на одном сервере

Да, там написаны разумные слова про отдельные порты. Но я все равно не понимаю, зачем это может понадобиться smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson