Я очень новичок в администрировании баз данных.
Я сталкиваюсь с множеством проблем при настройке репликации master-slave для mysql.
Я также сталкиваюсь с регулярными проблемами устранения проблем репликации mysql.
Кто-нибудь может помочь понять, как мне справиться со всем этим?
mysql
replication
mysql-5
Абдул Манаф
источник
источник
Ответы:
Я предоставил ссылки на учебники. Просто помните, что в Ubuntu файл my.cnf находится в /etc/mysql/my.cnf, а не в /etc/my.cnf, как в руководстве по howtoforge. В моей настройке я не использовал FLUSH TABLES WITH READ LOCK; на мастера. Если на вашем главном сервере много операций записи, вам может потребоваться заблокировать таблицы, выполнив эту команду перед резервным копированием. Если вы используете FLUSH TABLES WITH READ LOCK ;, то после резервного копирования вы захотите запустить UNLOCK TABLES. Если у вас возникнут проблемы, дайте мне знать.
Вот учебник, который я нашел в Howto Forge, сделанный для Redhat / CentOS: http://www.howtoforge.com/mysql_database_replication
Другой учебник, который выглядел хорошо для Ubuntu http://www.srcnix.com/2010/10/14/simple-mysql-replication-with-ubuntu-master-to-slave/
Вот конфигурация, которую я использовал:
На сервере МАСТЕР
Настройте главный сервер:
Перезапустите MySQL:
/etc/init.d/mysql restart
Подключитесь к консоли mysql: mysql -u root -ppassword
Создайте и предоставьте разрешения пользователю репликации.
Обязательно скопируйте эту информацию куда-нибудь или оставьте ее видимой
Дамп базы данных в файл:
Скопируйте дамп базы данных на подчиненный сервер с помощью scp или используйте ftp, если хотите:
На РАБНОМ сервере
Отредактируйте конфигурацию mysql:
Перезапустите MySQL:
/etc/init.d/mysql restart
Восстановите резервную копию:
Подключитесь к MySQL:
Выполнить
SHOW SLAVE STATUS\G
:После этого имейте в виду, что репликация может произойти сбой по разным причинам. На ведомом устройстве вы можете отслеживать состояние, выполнив команду SHOW SLAVE STATUS \ G; Или настройте задание cron для отслеживания состояния и отправки электронных писем, если оно не удалось. Получить знакомый с выходом из этой команды. Если репликация работает правильно, вы должны увидеть «Slave_IO_State: Ожидание, когда мастер отправит событие».
Как только вы правильно настроите эту настройку, я могу предоставить вам скрипт для мониторинга этой репликации.
Вот скрипт для мониторинга журнала ошибок в MySQL. Если вы добавите строку
перезапустите mysql: /etc/init.d/mysql перезапустите
Затем вы можете использовать следующий скрипт для мониторинга файла журнала. Если журнал каким-либо образом изменится, вы получите электронное письмо с уведомлением о том, что на подчиненном сервере произошла ошибка. Если вы хотите регулярно проверять журнал ошибок, вам нужно будет добавить этот скрипт в ваш crontab.
Вот пример сценария: /somepath/monitor_mysql_log.sh
Добавить в crontab.
Сделайте скрипт исполняемым:
Обновление crontab:
И скрипт будет запускаться каждую минуту.
Сценарий, который я предоставил, - это сценарий, который я быстро собрал. Кроме того, чтобы ваш сервер мог отправлять электронные письма, вам нужно установить что-то вроде postfix или sendmail.
источник
Mysqldump работает быстро, но восстановление больших дампов может быть очень медленным для большой БД, а блокировка таблиц недопустима на работающем сайте. Гораздо лучший и быстрый способ настройки подчиненных устройств - использовать XtraBackup от Percona . XtraBackup накладывает небольшую нагрузку на мастер, не требует блокировок и восстановление на ведомом устройстве происходит очень быстро. Этот механизм производит полный клон всей базы данных, включая такие вещи, как пользовательские таблицы, которые нарушают некоторые вещи, которые устанавливаются при стандартной установке, такие как пользователь debian-sys-maint, что не обязательно плохо !
В качестве бонуса, если вы знаете, как это сделать, вы можете использовать точно такой же механизм для ежедневного резервного копирования. Резервное копирование медленнее, чем mysqldump, но восстановление происходит намного быстрее, и это именно то, что вам нужно, если вы находитесь в ситуации, когда вы в панике и вам необходимо восстановить резервную копию! Если вы когда-нибудь получите серьезную ошибку репликации, просто используйте эту процедуру, чтобы очистить ведомое устройство и восстановить его; это действительно не займет много времени.
Вам нужно будет настроить репозиторий apt / yum Percona для своего дистрибутива, а затем установить
xtrabackup
пакет как на главном, так и на ведомом устройствах. Я также настоятельно рекомендую использовать утилиту сжатия pigz (параллельный gzip, доступный в большинстве стандартных репозиториев), поскольку она существенно влияет на скорость резервного копирования.Процесс идет следующим образом (в Ubuntu другие дистрибутивы могут немного отличаться) и предполагается, что вы уже установили MySQL на своем ведомом устройстве:
mkdir -p /var/xtrabackup; /usr/bin/innobackupex --slave-info --stream=tar --throttle=1500 /var/xtrabackup 2> /tmp/xtrabackup.out | /usr/bin/pigz -p 4 -c --best -q > /var/backups/mysql.tgz
сервере : (измените значение газа, чтобы ограничить влияние резервного копирования на работающий сервис)scp -l 400000
чтобы не истощать мастер пропускной способности сети для активных клиентов)service mysql stop
mv /var/lib/mysql /var/lib/mysql2
(или сожмите его где-нибудь, если у вас мало места на диске)mkdir /var/lib/mysql; cd /var/lib/mysql
tar xvzif /path/to/backup/mysql.tgz
. Обратите внимание наi
опцию операции tar - она не будет работать без нее . Это займет некоторое время, если у вас большая БД./usr/bin/innobackupex --apply-log --use-memory=6G --ibbackup=xtrabackup /var/lib/mysql
. Это эффективно запускает аварийное восстановление файлов из двоичных журналов. Это займет всего несколько секунд; используйте меньший объем памяти, если на меньшем сервере.rm /path/to/backup/mysql.tgz; chown -R mysql:mysql /var/lib/mysql
service mysql start
cat xtrabackup_binlog_info
. Это скажет что-то вродеmysql-bin.000916 13889427
CHANGE MASTER TO MASTER_HOST='192.168.0.1', MASTER_USER='replica', MASTER_PASSWORD='r3plica', MASTER_LOG_FILE='mysql-bin.000916', MASTER_LOG_POS=13889427;
(Изменить, чтобы соответствовать реальным данным сервера БД)START SLAVE;
SHOW SLAVE STATUS\G
Ваш раб теперь все настроено. При необходимости теперь вы можете настроить циклическую репликацию:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
запишите имя и положение файла журнала (что-то вроде mysql-bin.000031 и 17244785).CHANGE MASTER TO MASTER_HOST='192.168.0.2', MASTER_USER='replica', MASTER_PASSWORD='r3plica', MASTER_LOG_FILE='mysql-bin.000031', MASTER_LOG_POS=17244785;
вставка значений от раба, на который мы только что посмотрели.START SLAVE;
UNLOCK TABLES;
Теперь вы должны быть готовы к циклической репликации.
Что касается устранения неполадок, в инструментарии Percona есть все, что нужно, например, контрольные суммы для выявления коррупции, измерения задержки и многое другое. Наиболее распространенных форм повреждения репликации можно избежать, установив
binlog_format = MIXED
в my.cnf. Тем не менее, по моему опыту, репликация обычно не вызывает проблем.источник