Репликация MySQL на уже работающем сервере

В интернете есть достаточно много хаутушек про настройку репликации. Как подключить slave для уже работающего сервера с данными инструкции тоже есть. Но я не смог найти такую инструкцию, которая бы соответствовала современным особенностям и полностью меня устроила. Пришлось разобраться самому.

При использовании описанного ниже подхода стоит рассчитывать на даунтайм основного сервера на время его перезапуска. В примере использовался сервер под управлением Ubuntu и MySQL 5.0 из основного репозитория с настройками по умолчанию. Я исходил из того, что реплицировать нужно все базы данных, за исключением системных.

На главном сервере.

Надо поправить файл /etc/mysql/my.cnf:

[mysqld]
# Необходимо открыть доступ к серверу по сети,
# что бы slave имел возможность подключиться
# и не забыть закрыть этот доступ, например файрволом, для тех, кому он не нужен
bind-address            = 0.0.0.0
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
# Исключим ненужные БД
#binlog_do_db           = include_database_name
binlog_ignore_db        = information_schema
binlog_ignore_db        = mysql
binlog_ignore_db        = test
# Это рекомендуется для более стабильной работы репликации баз на InnoDB
innodb_flush_log_at_trx_commit=1
sync_binlog=1

Перезапускаем mysql:

/etc/init.d/mysql restart

Выдаем slave права на репликацию:

mysql -u root
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.0.0.2' IDENTIFIED BY 'slave_password';
FLUSH PRIVILEGES;

Посмотреть статус можно командой:

SHOW MASTER STATUS;
+------------------+----------+--------------+-------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB              |
+------------------+----------+--------------+-------------------------------+
| mysql-bin.000015 |       98 |              | information_schema,mysql,test |
+------------------+----------+--------------+-------------------------------+
1 row in set (0.00 sec)

Далее делаем дамп существующих баз данных. Ключи –single-transaction –master-data –flush-logs должны глобально заблокировать на время дампа базу данных на запись и вписать в дамп номер и позицию лога, с которых надо начать репликацию на slave. Это обеспечит точность совпадения данных на главном и slave серверах, даже если с главным сервером в этот момент идет работа и записываются данные.

mysqldump -u root --single-transaction --master-data --flush-logs --databases db1 db2 db3 > ALL_DB.sql

Если посмотреть внутрь ALL_DB.sql, то там должна присутствовать строка:

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=98;

Далее копируем дамп на slave:

scp ALL_DB.sql 10.0.0.2:

Продолжаем на втором сервере.

Убеждаемся что там нет остатков настроек репликации, в принципе, если на сервере нет нужных данных, не помешает переустановить mysql с очисткой папок БД.

Так как начиная с версии MySQL 5.2 параметры доступа для репликации убираются из my.cnf сразу перейдем на использование такой схемы.

Правим файл /etc/mysql/my.cnf:

[mysqld]
# ID slave должен отличаться от главного сервера
server-id               = 2
replicate-ignore-db     = information_schema
replicate-ignore-db     = mysql
replicate-ignore-db     = test
relay-log               = /var/log/mysql/mysqld-relay-bin.log

Перезапускаем сервер:

/etc/init.d/mysql restart

Поправим файл ALL_DB.sql:

Дописываем к строке

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=98;

параметры доступа:

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=98, MASTER_HOST='10.0.0.1', MASTER_USER='replication',
MASTER_PASSWORD='slave_password', MASTER_CONNECT_RETRY=60;

Загружаем данные:

mysql -u root < ALL_DB.sql

Проверяем состояние репликации, она НЕ должна быть запущена (Slave_IO_Running, Slave_SQL_Running: no, no):

mysql -u root
show slave status;

Запускаем репликацию (теперь должно быть Slave_IO_Running, Slave_SQL_Running: yes, yes):

START SLAVE;
show slave status;

Для проверки можно попробовать перезапустить mysql и проверить состояние репликации еще раз:

/etc/init.d/mysql restart
mysql -u root
show slave status;

Остается по желанию проверить репликацию, создав, например, тестовую таблицу или добавив данные в существующую и убедиться, что изменения отразились на slave.

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

DNS-323 – продолжение

После небольшой оплошности с коммандой find -exec chmod 😉 сегодня пришлось перенастраивать заново коробочку.

Прошивка обновилась до версии 1.06. Обновление прошло без сюрпризов и потери данных.

Transmission обновился до 1.51 версии и я открыл для себя клиента под Windows Transmission Remote. Теперь можно удобно выставлять приоритеты файлов, и, главное, выбирать файлы для закачки внутри одного торрента.

Домашнюю папку пользователю root я изменил на /mnt/HD_a2/root – стало гораздо удобнее.

Cleanboot, lighttpd не ставил за ненадобностью.

Еще захотелось присылать себе на почту отчет скрипта резервного копирования, о чем поподробнее.

Включаем syslogd (без логов понимать, что творится с почтой проблематично) и переместим логи на жесткий диск:

mkdir /ffp/var/log
cp -r /var/log/samba /ffp/var/log
cp -r /var/log/cores /ffp/var/log
cp /var/log/lastlog /ffp/var/log
cp /var/log/wtmp /ffp/var/log
cp /var/log/btmp /ffp/var/log
vim /ffp/start/syslogd.sh
syslogd_start()
{
    rm -r /var/log
    ln -s /ffp/var/log /var/log
    proc_start /ffp/sbin/syslogd /ffp/sbin/klogd
}
chmod +x /ffp/start/syslogd.sh
/ffp/start/syslogd.sh start

Устанавливаем postfix:

ipkg install postfix
vim /opt/etc/postfix/main.cf
mail_owner = admin
setgid_group = maildrop
myhostname = nas.domain.com
mynetworks_style = subnet

В интерфейсе управления коробочкой нужно создать группу maildrop.

Далее удаляем все строки, содержащие manpage_directory, sample_directory, readme_directory, html_directory из файла /opt/etc/postfix/postfix-files.

Поправляем привилегии на файлах, запускаемся, отправляем тест и смотрим лог:

postfix set-permissions
/opt/etc/init.d/S69postfix start
tail -f /ffp/var/log/messages
sendmail user@domain.com
TEST

Про японское качество

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

Так вот, спешу себя разубедить. Японские машины собирают не ангелы в белых халатах. Недавно осматривая машину жены (Nissan Micra 2008 года, собрана в Великобритании) обратил внимание на большой зазор слева задней двери. В щель вполне можно засунуть палец.

Более детальный осмотр двери целиком показал две вещи:

1) дверь и петля замка установлены достаточно криво

2) задний спойлер-накладка на двери приклеен с восьми миллиметровым (!!!) сдвигом влево

Если первое определенно поддается регулировке, то второе – явно очень прискорбный брак. Даже в Таврии, которую я покупал 3 года назад, не было таких зазоров.

Увидеть такое на иномарке весьма разочаровывает. Сразу становится очевидно, что и остальные узлы могут быть собраны подобным образом.

По этому поводу я, конечно же, обратился в гарантийный отдел, где мне непременно рассказали, что я подписал акт о приемке машины в идеальном состоянии. То есть они сразу заявили о том, что ни за что не отвечают, но за работу все таки взялись.

В итоге кривое приклеивание было сфотографировано и завод будет решать, должен ли исправляться такой брак.

А машина тем временем ушла на мойку и регулировку двери. Прождал я не 15 минут, как обещалось, а почти два часа. Внешне дверь стала прилегать лучше, но, когда я попробовал закрыть багажник, у меня это получилось только с 8 раза. Теперь точно придется все регулировать самому.

Еще перед всем этим безобразием мы прошлись с инженером по гарантии посмотреть на другие машины. И, если по началу я думал, что не повезло только мне, то оказалось что 80% машин обладают такими же проблемами. То есть проблема системна и с контролем качества не все в порядке. А ведь именно контроль качества делает машину японской, будь она сделана в Китае или Великобритании.

Еще меня повеселила цена на оригинальные диски и колпаки. Колпак на 14 дюймовый стальной диск от Micra – 500 грн, и это цена за 1 штуку, в то время как на авторынке за 100 грн можно купить 4 простеньких колпака. Литой диск на Micra – 2500 грн. На X-Trail – 9400 грн. На 350Z – 19600 грн за один литой диск. Прошу прощения, но это всего лишь кусок металла весом в пару кило. Скорее всего на обратной стороне есть инкрустация, которую я не заметил.

В любом случае “оригинальное” происхождение этих запчастей этого не стоит, и цена не соответствует качеству.

Резюме. Я по-прежнему считаю японские машины наиболее интересными. Но мнение о них несколько подупало. Да и о целесообразности покупки белой машины ради гарантии и официального сервиса стоит призадуматься.

Update: спойлер переклеили по гарантии, теперь все красиво. Через лет 5 посмотрим, не начнет ли ржаветь металл на двери от этих вмешательств.

Йога для сомневающихся

Очень долго не решался сходить на занятие йогой. Я опасался, что такие занятия посещают в большинстве своём продвинутые йоги, которые уже обладают тайным знанием и наладили контакт с инструктором. И что инструктор, в свою очередь, вряд ли будет уделять новичкам достаточно времени, а все вокруг меня будут делать умопомрачительные позы как на фото, а я буду выглядеть как жирный сопящий боров, над которым все будут подгыгыкивать 🙂 .


Все оказалось не так. Что действительно сложно, это успеть разложить свой коврик на месте поближе к инструктору. Я растерялся, не успел и был задвинут в самый угол. После того, как все расположились на ковриках все как то стало очень просто. В зале действительно было несколько продвинутых людей, но большинство из около двух десятков ничем не отличались от меня. Сопели, потели, дрожали от усилий. Ничего невероятно сложного инструктор не предлагал делать, все доступно и понятно. Взглянув на пару тел по соседству вполне можно понять что нужно делать. Если кто-то делал что-то уж совсем не правильно, инструктор подходит и поправляет. Упражнения не сложнее березки в младших классах на физкультуре, но выматывают изрядно, если стараться.

Так что, если кто-то еще сомневается, стесняется или побаивается чего-то, то достаточно просто взять футболку, спортивные штаны, тапочки и прийти в зал. Там все встанет на свои места и не возникнет никаких особых сложностей.