|
|
www.lissyara.su
—> www.lissyara.su
—> MySQL multiple server
несколько серверов MySQL
Задача вполне тривиальная, нужно сделать создание бэкапов баз раз в сутки.
Казалось бы достаточно средств mysqldump, но здесь есть одно большое НО.
При создании дампа с помощью mysqldump таблица с которой делается дамп лочиться.
То есть что либо писать в неё нельзя. Вроде бы пустяк, а если база большая и в неё активно пишуться данные?
Поиск решения избежать блокировок большого результата не дал, база размером 4 гига, дампилась 3-5 минут,в это время работа стояла.
Было принято решение настроить репликацию, и уже со второго реплицирующего сервера делать дампы, без простоя.
Возникла новая сложность, баз несколько, все они большие, да и проекты в активной разработке.
Реплицировать на другой сервер можно было, но не было сервера,а его расположение в этом же датацентре было призрачной мечтой.
Можно создать виртуальную машину на qemu, на ней поднять mysql сервер и с ним реплицироваться, но это накладные расходы.
Еще немного почитав документацию была разработана следующая схема
1)Поднять несколько mysql серверов на одном хосте, слушать на разных портах
2)Настроить репликацию
Приступим к части №1.
Были мысли сделать запуск нескольких серверов средствами mysql_multi, но толи плохо искал, толи туго соображал, но запустить другие сервера при загрузке не получилось, как вариант поправить rc.d скрипт запуска, но это меня тоже не особо прельщало.
А что будет если создать второй rc.d скрипт, на основе имеющегося ?
#cp /usr/local/etc/rc.d/mysql-server /usr/local/etc/rc.d/mysql_replica-server
#vim /usr/local/etc/rc.d/mysql_replica-server
:%s/mysql_/mysql_replica_/g
| Правда изменить mysqld_safe на mysqld_replica_safe, так что правим это руками
В итоге имеем следующее:
#>grep -v "^#" /usr/local/etc/rc.d/mysql_replica-server
. /etc/rc.subr
name="mysql_replica"
rcvar=`set_rcvar`
load_rc_config $name
: ${mysql_replica_enable="NO"}
: ${mysql_replica_limits="NO"}
: ${mysql_replica_dbdir="/var/db/mysql"}
: ${mysql_replica_socket="/tmp/mysql.sock"}
mysql_replica_user="mysql"
mysql_replica_limits_args="-e -U ${mysql_replica_user}"
pidfile=${mysql_replica_pidfile:-"${mysql_replica_dbdir}/`/bin/hostname`.pid"}
command="/usr/sbin/daemon"
command_args="-c -f /usr/local/bin/mysqld_safe --defaults-extra-file=${mysql_replica_dbdir}/my.cnf \
--user=${mysql_replica_user} --datadir=${mysql_replica_dbdir} --socket=${mysql_replica_socket} \
--pid-file=${pidfile} ${mysql_replica_args}"
procname="/usr/local/libexec/mysqld"
start_precmd="${name}_prestart"
start_postcmd="${name}_poststart"
mysql_replica_install_db="/usr/local/bin/mysql_install_db"
mysql_replica_install_db_args="--ldata=${mysql_replica_dbdir}"
mysqladmin="/usr/local/bin/mysqladmin"
mysqladmin_args="-s --socket=${mysql_replica_socket} ping"
mysql_replica_create_auth_tables()
{
eval $mysql_replica_install_db $mysql_replica_install_db_args >/dev/null
[ $? -eq 0 ] && chown -R ${mysql_replica_user}:${mysql_replica_user} ${mysql_replica_dbdir}
}
mysql_replica_prestart()
{
if [ ! -d "${mysql_replica_dbdir}/mysql/." ]; then
mysql_replica_create_auth_tables || return 1
fi
if checkyesno mysql_replica_limits; then
eval `/usr/bin/limits ${mysql_replica_limits_args}` 2>/dev/null
else
return 0
fi
}
mysql_replica_poststart()
{
count=0
while [ $count -lt 10 ] ; do
eval $mysqladmin $mysqladmin_args >/dev/null
[ $? -eq 0 ] && return 0
count=`expr $count + 1`
sleep 1
done
return 1
}
run_rc_command "$1"
| Вносим изменения в rc.conf
#>grep -e mysql /etc/rc.conf
mysql_enable="YES"
mysql_dbdir="/var/db/mysql"
mysql_replica_enable="YES"
mysql_replica_dbdir="/var/db/mysql_replica"
| По умолчанию mysql ищет конфиг в домашнем папке базы, то есть в dbdir, поэтому создаем конфиги в соответствующих папках
#>cat /var/db/mysql/my.cnf
[mysqld]
bind-address=127.0.0.1
port=3306
socket=/tmp/mysql.sock
#>cat /var/db/mysql_replica/my.cnf
[mysqld]
bind-address=127.0.0.1
port=3307
socket=/tmp/mysql_replica.sock
| Запускаем:
#service mysql-server start
#service mysql_replica-server start
| Слушаются ли порты ?
#>sockstat -4 -p 3306-3307
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
mysql mysqld 72989 13 tcp4 127.0.0.1:3306 *:*
mysql mysqld 72919 10 tcp4 127.0.0.1:3307 *:*
| Первая часть закончена, можно отдохнуть
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=33063.
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
|
Статистика сайта
|
Сейчас на сайте находится: 4 чел.
|
За последние 30 мин было: 38 человек
|
За сегодня было 1068 показов, 255 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|
Комментарии пользователей [0 шт.]