Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток!
Попробовал сделать. Но, что-то у меня не получается.
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
запустился старый скрипт, не новый
Неактивен
Неактивен
Заменил в файле тот параметр на --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)
Неактивен
А, если запустить первым главную mysql на порту 3306
service mysql start , то тогда ни одни из mysqld_multi не стартует. Или, если ее использовать, то тогда нужно забыть про основную?
Неактивен
Вы логи MySQL смотрели? Что там написано, почему не стартует? «Основную» проще тоже запускать через multi.
Неактивен
Вот именно в логах ни чего нет.
syslog
mysql/mysql.log
там пусто(ни чего про mysql)
Неактивен
как они включаются в mysqd_multi?
Неактивен
Найдите, где добавляется --skip-log-error, уберите и добавьте параметры log-error = /path/to/log/file в нужные куски my.cnf?
Неактивен
в my.cnf нет такого параметра.
Там были закомментированные строки
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1
я их разкомментировал.
Все равно ни чего не получается.
При этом я убил процесс и снова запустил
mysqld_multi start 2 потом 3
в syslog and mysql.log\err\info пусто.
Неактивен
Reporting MySQL servers
MySQL server from group: mysqld2 is not running
MySQL server from group: mysqld3 is running
что первым запускаю, то и имеет статус is running, другой не запускается.
Неактивен
Так, видимо я ранее, что-то испортил в системе. Все снес и начал с начала. Вроде все запустилось с первого раза.
Прописал в 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)
Неактивен
У меня еще одни вопрос, а как же мне галеру запустить?
обычно я запускал первый кластер service mysql start --wsrep-new-cluster , а другие к нему присоединял service mysql start.
Тут выходит mysql на порту 3306 я запускаю через service mysql start --wsrep-new-cluster, а остальные через mysqld_multi start?
Неактивен
Кажется, Вы делаете что-то странное. Для галеры нужно будет указывать отдельные порты галеры для каждого экземпляра. Но вообще, галера для этого не предназначена ;-)
Неактивен
эх... это и плохо... вот вроде нашел статью, как галеру поднимают таким образом, но что-то не получается....
http://www.sebastien-han.fr/blog/2012/0 … th-galera/
Неактивен
Да, там написаны разумные слова про отдельные порты. Но я все равно не понимаю, зачем это может понадобиться
Неактивен