предисловие
Как DBA, работа будет часто столкнуться с некоторыми проблемами MySQL мастер-ведомых задержки синхронизации, медленной синхронизации эти проблемы, на самом деле, причина очень много, потому что основная проблема может быть сеть из свинца, вероятно, из-за проблемы пропускной способности сети вызвано, может быть связанно с крупной сделкой вызывает, это может быть потому, что задержка, вызванная однопоточной репликацией.
На сегодняшний день сталкиваются с проблемой, Mysql постоянная ошибка, ведущий-ведомый задержка синхронизации является слишком большим или количество ошибок. Итак, эта статья поделиться с исследованием от основного принципа механизмов синхронизации и идеями проблем.
производительность Failure
Наиболее интуитивный следующим образом:
1
2
3
4
5
6
7
|
mysql> show slave status\G;
// 状态一
Seconds_Behind_Master:
NULL
// 状态二
Seconds_Behind_Master: 0
// 状态三
Seconds_Behind_Master: 79
|
Непрерывный запрос, значение атрибута большую часть времени = 0, 79, или случайные появляются как значения латентности Null. Для наблюдаемого от контроля длительности задержки синхронизации мастер-сигнализации.
Отказ причины и решения
Получение множественного сервера идентификатора той же машине, в то же время в результате чего хост не может подключиться подготовительный этап, и, таким образом, не могут быть синхронизированы должным образом.
После изменения идентификатора сервера, перезапустите восстановление базы данных.
механизмы синхронизации ведущий-ведомый
MySQL синхронизации ведущий-ведомый, называется копия (репликации), представляет собой высокопроизводительный встроенный в кластерных решений высокой доступности, основными функциями являются:
- Распределение данных: синхронизация не требует большой пропускной способности, данные репликации центр мульти-данных.
- Читайте балансировки нагрузки: кластер серверов, через DNS опрос, Linux LVS как GSLB режим (глобальная балансировка нагрузки), снижая давление основного сервера для чтения.
- Резервное копирование базы данных: Копировать является частью резервной копии, но не является заменой для резервного копирования. Кроме того, мы должны быть в сочетании с быстрой камерой.
- Высокая доступность и отказоустойчивость: Вы можете быстро переключиться на мастер-сервер с сервера, сокращая время простоя и восстановления после сбоя времени.
Синхронизация ведущий-ведомый разделен на три этапа:
- Первичный сервер (мастер) на двоичные данные изменяет журнал (Двоичный) в.
- Скопировано с сервера (ведомым) в собственном журнале реле двоичного журнала мастера (журнал реле) в.
- Повторить журналы из журнала релейного сервера, изменения в базу данных самостоятельно, чтобы обеспечить согласованность данных.
Синхронизация ведущий-ведомый является асинхронной синхронизации в режиме реального времени, в режиме реального времени передачи, но есть задержка в исполнении, если большой мастер давления, задержка будет расширена соответствующим образом.
С помощью приведенного выше графика, вы можете увидеть в общей сложности три нити необходимо:
- Доставка журналы основного потока сервера: Инкрементальные отвечают за передачу двоичного журнала на резервную машину
- Из потока сервера ввода / вывода: отвечает за чтение бинарного журнала мастера, и сохраните его в журналах реле
- Из нити SQL Server, ответственной за реализацию протокола реле
Просмотр MySQL нитки
Мы можем использовать show full processlist;
команду для просмотра состояния MySQL:
Хост состояния:
Получение конечного автомата:
Вы можете видеть, мою кластерную архитектуру 1 хозяина, 4 комплекта резервной машины, так что есть четыре одновременные потоков в хосте (Двоичный послали все данные в резервную машину, ожидая Двоичное обновление журнала), команда вида резьбы ( показать полный PROCESSLIST). Существует поток для того, чтобы просмотреть резервную машину, ввод / вывод поток (ждать хозяина, чтобы отправить событие синхронизации данных), SQL-нить (все журналы реле будет считаны, ожидая поток ввода / вывода, чтобы обновить его).
Просмотреть состояние синхронизации
Поскольку синхронизация ведущий-ведомый является асинхронный в режиме реального времени, которое в случае будет задержка, мы можем показать статус ведомого, чтобы просмотреть задержку синхронизации на резервном компьютере:
В какой-то свойство ведущий-ведомый синхронизации, мы должны сосредоточиться на том, что мы должны отметить красным цветом:
- Slave_IO_State: текущее состояние потоков ввода / вывода
- Master_Log_File: тока синхронизации мастер-сервера двоичные файлы
- Read_Master_Log_Pos: ток смещения двоичный синхронный первичный сервер, байт, как показано на синхронизированной содержание 12.9M (13630580/1024/1024) из
- Relay_Master_Log_File: Ток реле входа синхронного двоичного файла
- Slave_IO_Running: рабочее состояние с сервера ввода / вывода потока, ДА работает нормально
- Slave_SQL_Running: На сервере выполняется SQL нить, YES нормально работает
- Exec_Master_Log_Pos: указывает на смещение двоичного журнала завершение мастер синхронизации
- Seconds_Behind_Master: представляет собой большую продолжительность, чем данные с сервера, если за основной сервер
То же самое можно показать мастер статус, команда для просмотра рабочего состояния мастеров-сервера:
Первичная синхронизация состояние от нормальной работы:
Slave_IO_Running: ДА
Slave_SQL_Running: ДА
Seconds_Behind_Master: 0
поиск неисправностей
В понимании вопросов от основного механизма для синхронизации, выглядят встречается сегодня, глядя на состоянии резервного копирования машины, мы наблюдаем несколько ключевого значения атрибута в трех состояниях:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
mysql> show slave status\G;
#状态一:
Slave_IO_State: Reconnecting
after
a failed master event
read
Slave_IO_Running:
No
Slave_SQL_Running: Yes
Seconds_Behind_Master:
NULL
#状态二:
Slave_IO_State: Waiting
for
master
to
send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
#状态三:
Slave_IO_State: Queueing master event
to
the relay log
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 636
|
По переходу MySQL ведущих-ведомого состояния потока репликации , мы можем увидеть различные значения трех состояний:
1
2
3
4
5
6
7
8
9
10
|
# 状态一
# 线程正尝试重新连接主服务器,当连接重新建立后,状态变为Waiting
for
master
to
send event。
Reconnecting
after
a failed master event
read
# 状态二
# 线程已经连接上主服务器,正等待二进制日志事件到达。如果主服务器正空闲,会持续较长的时间。如果等待持续slave_read_timeout秒,则发生超时。此时,线程认为连接被中断并企图重新连接。
Waiting
for
master
to
send event
# 状态三
# 线程已经读取一个事件,正将它复制到中继日志供SQL线程来处理。
Queueing master event
to
the relay log
|
Здесь мы можем догадаться, по какой-то причине, по-прежнему отключены от сервера и основного сервера и пытается восстановить соединение, повторное подключение после отключения снова.
Давайте посмотрим на работу хоста:
.. Нашел проблему 10.144.63 10.144.68 * и * на обеих машинах, которые мы видим один из журнала ошибок:
190214 11:33:20 [Примечание] Подчиненный: получена конечный пакет от сервера, очевидно , мастер отключения:
190214 11:33:20 [Примечание] Ведомый ввод / вывод резьба: Ошибка чтения события журнала, чтобы повторить попытку повторного подключения, журнал «MySQL-бен 0,005682' в постион 13628070
Получить Ведомый ключевое слово: полученный конечный пакет от сервера, кажущийся мастер отключение: Google поиск, в статье запутывающей репликаций MySQL Сообщение об ошибке может увидеть причину две машины резервной сервера идентификатор повторяется.
Однажды это случилось со мной, и взял меня почти час , чтобы выяснить это.
Перемещение перемещения вперед Я всегда использую базовый my.cnf , чтобы скопировать на любой другой сервер и первая вещь, чтобы увеличить идентификатор сервера.
Может MySQL просто использовать имя_сервера Intead числового значения?
Исправление ошибок
Найдите эту проблему, мы подтвердим ли следующее повторение, то два обнаружили, что поле резервной машины делает то же самое:
1
2
3
4
5
6
7
|
vim my.cnf
#replication
log-bin=mysql-bin
# 这个随机数字相同导致的
server-
id
=177230069
sync_binlog=1
|
更改一个其他不同的数字,保存,重启MySQL进程,报警恢复。
总结
最终来看,这个问题的解决非常简单,但从刚开始的迷茫到最后的思路清晰,都是我们排查问题所常见的,这篇文章的主要收获是让你明白主从同步的机制和追查问题的思路,希望下次我们都能很快的解决主从同步带给我们的问题。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。