SlideShare uma empresa Scribd logo
1 de 137
Baixar para ler offline
Эффективная отладка репликации MySQL
June, 6, 2017
Света Смирнова
∙
Инженер тех. поддержки MySQL
∙ Автор
∙ MySQL Troubleshooting
∙ JSON UDF функции
∙ FILTER clause для MySQL
∙ Докладчик
∙ Percona Live, OOW, Fosdem,
DevConf, ...
Света Смирнова
2
∙ Существует с первых версий
Репликация в MySQL
3
∙ Существует с первых версий
∙ Простая в использовании
Репликация в MySQL
3
∙ Существует с первых версий
∙ Простая в использовании
∙ Требует минимальной настройки
Репликация в MySQL
3
∙
Мастер
∙
––log-bin
∙
––server-id
∙ GRANT REPLICATION SLAVE ON *.* ...
∙ Слейв
∙
––server-id
∙ CHANGE MASTER ...
∙ START SLAVE
Запустить репликацию
4
Типичные Ошибки Репликации
Репликация Остановлена
6
Слейв Отстаёт от Мастера
7
Возросшая Нагрузка на Мастере
8
Это не Полный Список!
9
Особенности репликации MySQL
Мастер Слейв
<- Инициирует
Асинхронная
11
Мастер Слейв
<- Инициирует
<- Запрашивает пакет
Асинхронная
11
Мастер
Отправляет пакет ->
Слейв
<- Инициирует
<- Запрашивает пакет
Асинхронная
11
Мастер
Отправляет пакет ->
Слейв
<- Инициирует
<- Запрашивает пакет
... ?
Асинхронная
11
∙ Ошибка сети
∙ Авторизация
Пришли ли Данные?
12
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: root
Master_Port: 13000
Connect_Retry: 60
Master_Log_File: master-bin.000002
Read_Master_Log_Pos: 63810611
Relay_Log_File: slave-relay-bin-master@002d1.000004
Relay_Log_Pos: 1156
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1032
Last_Error: Could not execute Update_rows event on...
Skip_Counter: 0
Exec_Master_Log_Pos: 989
Relay_Log_Space: 63814652
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No | Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1032
Last_SQL_Error: Could not execute Update_rows event on...
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: d08c509e-6857-11e6-8872-30b5c2208a0f
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 10
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 160823 15:11:21
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name: master-1 | Master_TLS_Version:
∙
Конфигурация IO thread
∙
Конфигурация SQL thread
∙
Состояние IO thread
∙
Состояние SQL thread
∙ Ошибки
∙
Только последняя
∙ Все есть в журнале ошибок
Инструмент №1: SHOW SLAVE STATUS
13
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
...
Last_IO_Errno: 1045
Last_IO_Error: error connecting to master ’root@127.0.0.1:13000’ -
Last_SQL_Errno: 0
Last_SQL_Error:
...
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp: 160824 03:18:36
Last_SQL_Error_Timestamp:
Ошибки Сети
14
mysql> select * from performance_schema.replication_connection_statusG
*************************** 1. row ***************************
CHANNEL_NAME:
GROUP_NAME:
SOURCE_UUID:
THREAD_ID: NULL
SERVICE_STATE: CONNECTING
COUNT_RECEIVED_HEARTBEATS: 0
LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00
RECEIVED_TRANSACTION_SET:
LAST_ERROR_NUMBER: 1045
LAST_ERROR_MESSAGE: error connecting to master ’root@127.0.0.1:13000’ -
retry-time: 60 retries: 4
LAST_ERROR_TIMESTAMP: 2016-08-24 03:21:36
1 row in set (0,01 sec)
№2: connection_status в Performance Schema
15
2016-08-24T00:18:36.077384Z 3 [ERROR] Slave I/O for channel ”: error connecting to
master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 1, Error_code: 1045
2016-08-24T00:19:36.299011Z 3 [ERROR] Slave I/O for channel ”: error connecting to
master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 2, Error_code: 1045
2016-08-24T00:20:36.485315Z 3 [ERROR] Slave I/O for channel ”: error connecting to
master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 3, Error_code: 1045
2016-08-24T00:21:36.677915Z 3 [ERROR] Slave I/O for channel ”: error connecting to
master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 4, Error_code: 1045
2016-08-24T00:22:36.872066Z 3 [ERROR] Slave I/O for channel ”: error connecting to
master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 5, Error_code: 1045
№ 3: Лог Ошибок
16
$ perror 1045
MySQL error code 1045 (ER_ACCESS_DENIED_ERROR): Access denied for user ’%-.48s’@’%-.64s’
(using password: %s)
№4: perror
17
∙
На слейве
$ mysql -h127.0.0.1 -P13000 -uslave_user -pslave_password
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user ’slave_user’@’localhost’ (using password: YES
№5: MySQL Command Line Client
18
∙
На слейве
∙
На мастере
mysql> SHOW GRANTS;
+-----------------------------------------+
| Grants for slave_user@% |
+-----------------------------------------+
| GRANT SELECT ON *.* TO ’slave_user’@’%’ |
+-----------------------------------------+
1 row in set (0.00 sec)
№5: MySQL Command Line Client
18
∙
На слейве
∙
На мастере
∙
Исправьте привилегии на мастере
GRANT REPLICATION SLAVE
ON *.* TO ’slave_user’@’%’
№5: MySQL Command Line Client
18
∙
На слейве
∙
На мастере
∙
Исправьте привилегии на мастере
∙
Перезапустите репликацию
№5: MySQL Command Line Client
18
Мастер Слейв
<- Инициирует
Полусинхронная (Semisynchrous plugin)
19
Мастер Слейв
<- Инициирует
<- Запрашивает пакет
Полусинхронная (Semisynchrous plugin)
19
Мастер
Отправляет пакет ->
Слейв
<- Инициирует
<- Запрашивает пакет
Полусинхронная (Semisynchrous plugin)
19
Мастер
Отправляет пакет ->
Ждёт "Ack"
Слейв
<- Инициирует
<- Запрашивает пакет
Полусинхронная (Semisynchrous plugin)
19
Мастер
Отправляет пакет ->
Ждёт "Ack"
Слейв
<- Инициирует
<- Запрашивает пакет
<- Отправляет "Ack"
Полусинхронная (Semisynchrous plugin)
19
∙ Запись на мастере медленнее асинхронной
Полусинхронная: с точки зрения отладки
20
∙ Запись на мастере медленнее асинхронной
∙ Сколько "Ack"-ов ждёт мастер?
Полусинхронная: с точки зрения отладки
20
∙ Запись на мастере медленнее асинхронной
∙ Сколько "Ack"-ов ждёт мастер?
∙ До версии 5.7: от одного слейва
Полусинхронная: с точки зрения отладки
20
∙ Запись на мастере медленнее асинхронной
∙ Сколько "Ack"-ов ждёт мастер?
∙ До версии 5.7: от одного слейва
∙
Сейчас в MySQL:
rpl_semi_sync_master_wait_for_slave_count
Полусинхронная: с точки зрения отладки
20
∙ Запись на мастере медленнее асинхронной
∙ Сколько "Ack"-ов ждёт мастер?
∙ До версии 5.7: от одного слейва
∙
Сейчас в MySQL:
rpl_semi_sync_master_wait_for_slave_count
∙ Остальных ждать не будет
Полусинхронная: с точки зрения отладки
20
∙ Запись на мастере медленнее асинхронной
∙ Сколько "Ack"-ов ждёт мастер?
∙ Что происходит при timeout-е?
Полусинхронная: с точки зрения отладки
20
∙ Запись на мастере медленнее асинхронной
∙ Сколько "Ack"-ов ждёт мастер?
∙ Что происходит при timeout-е?
∙ Репликация становится асинхронной
Полусинхронная: с точки зрения отладки
20
∙ Запись на мастере медленнее асинхронной
∙ Сколько "Ack"-ов ждёт мастер?
∙ Что происходит при timeout-е?
∙
Что значит "Ack"?
Полусинхронная: с точки зрения отладки
20
∙ Запись на мастере медленнее асинхронной
∙ Сколько "Ack"-ов ждёт мастер?
∙ Что происходит при timeout-е?
∙
Что значит "Ack"?
∙ Событие записано в relay log
Полусинхронная: с точки зрения отладки
20
∙ Запись на мастере медленнее асинхронной
∙ Сколько "Ack"-ов ждёт мастер?
∙ Что происходит при timeout-е?
∙
Что значит "Ack"?
∙ Событие записано в relay log
∙ Неизвестно, выполнено ли оно
Полусинхронная: с точки зрения отладки
20
IO thread
Читает с мастера
SQL thread
Два типа потоков
21
IO thread
Читает с мастера
Сохраняет в relay log
SQL thread
Два типа потоков
21
IO thread
Читает с мастера
Сохраняет в relay log
SQL thread
<- Читает из relay log
Два типа потоков
21
IO thread
Читает с мастера
Сохраняет в relay log
SQL thread
<- Читает из relay log
Исполняет
Два типа потоков
21
∙
Проще в отладке
∙ Медленнее мастера
∙ При больших нагрузках
Один SQL Поток
22
Запись на Мастере
23
Запись на Слейве: Один Поток
24
Несколько SQL-потоков: 5.6+
25
∙ MySQL: ––slave_parallel_workers
∙ MySQL: ––slave_parallel_type=DATABASE | LOGICAL_CLOCK
∙ MySQL 8.0.1+:
SET @@GLOBAL.binlog_transaction_dependency_tracking =
WRITESET | WRITESET_SESSION | COMMIT_ORDER;
Настройка Производительности
26
∙ MariaDB: ––slave_parallel_threads
∙ MariaDB: ––slave_parallel_max_queued
∙ MariaDB: ––slave_domain_parallel_threads
∙
MariaDB: ––slave_parallel_mode=optimistic | conservative |
aggressive | minimal | none
Настройка Производительности
26
mysql> select WORKER_ID, SERVICE_STATE, LAST_SEEN_TRANSACTION, LAST_ERROR_NUMBER,
-> LAST_ERROR_MESSAGE from performance_schema.replication_applier_status_by_workerG
*************************** 1. row ***************************
WORKER_ID: 1
SERVICE_STATE: OFF
LAST_SEEN_TRANSACTION: d318bc17-66dc-11e6-a471-30b5c2208a0f:4988
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
*************************** 2. row ***************************
WORKER_ID: 3
SERVICE_STATE: OFF
LAST_SEEN_TRANSACTION: d318bc17-66dc-11e6-a471-30b5c2208a0f:4986
LAST_ERROR_NUMBER: 1032
LAST_ERROR_MESSAGE: Worker 2 failed executing transaction...
№6: Ошибки Одного Останавливают Все
27
MariaDB [test]> select id, command, time, state from information_schema.processlist
-> where user=’system user’;
+----+---------+------+------------------------------------------------------------------+
| id | command | time | state |
+----+---------+------+------------------------------------------------------------------+
| 25 | Connect | 4738 | Waiting for master to send event |
| 24 | Connect | 5096 | Slave has read all relay log; waiting for the slave I/O thread t |
| 23 | Connect | 0 | Waiting for work from SQL thread |
| 22 | Connect | 0 | Unlocking tables |
| 21 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) |
| 20 | Connect | 0 | Waiting for prior transaction to start commit before starting ne |
| 19 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) |
| 18 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) |
| 17 | Connect | 0 | Update_rows_log_event::find_row(-1)
...
№6: Ошибки Одного Останавливают Все
27
∙
Разные данные
∙
Слейв не может выполнить event из relay log
Какие Бывают Ошибки?
28
∙
Разные данные
∙
Слейв не может выполнить event из relay log
∙ Разные ошибки на мастере и слейве
∙ Триггеры
∙ Транзакционные и нетранзакционные
таблицы одновременно
Какие Бывают Ошибки?
28
∙ Таблица менялась вне репликации?
∙ Как?
∙
Конфликт с обновлениями на мастере?
Разные Данные на Мастере и Слейве
29
∙ Таблица менялась вне репликации?
∙ Идентична ли структура таблиц?
∙ Percona Toolkit
pt-table-checksum, pt-table-sync
∙
MySQL Utilities
mysqlrplsync, mysqldbcompare, mysqldiff
Разные Данные на Мастере и Слейве
29
∙ Таблица менялась вне репликации?
∙ Идентична ли структура таблиц?
∙ Обновления в неправильном порядке?
∙ mysqlbinlog
∙
Логика приложения на мастере
Разные Данные на Мастере и Слейве
29
Мастер
Получает изменение
Табличный движок
Логическая
30
Мастер
Получает изменение
Передаёт движку ->
Табличный движок
Логическая
30
Мастер
Получает изменение
Передаёт движку ->
Табличный движок
Пишет в таблицу
Логическая
30
Мастер
Получает изменение
Передаёт движку ->
Табличный движок
Пишет в таблицу
<- Передаёт управление
Логическая
30
Мастер
Получает изменение
Передаёт движку ->
Пишет в binary log
Табличный движок
Пишет в таблицу
<- Передаёт управление
Логическая
30
Мастер
Получает изменение
Передаёт движку ->
Пишет в binary log
Синхронизируется ->
Табличный движок
Пишет в таблицу
<- Передаёт управление
<- Синхронизируется
Логическая
30
∙
Более активная запись
∙
RBR: ––binlog_row_image
Производительность Мастера
31
∙
Более активная запись
∙
RBR: ––binlog_row_image
∙
––binlog_cache_size
Наблюдайте Binlog_cache_disk_use
Производительность Мастера
31
∙
Более активная запись
∙
RBR: ––binlog_row_image
∙
––binlog_cache_size
Наблюдайте Binlog_cache_disk_use
∙ ––binlog_stmt_cache_size
Наблюдайте Binlog_stmt_cache_disk_use
Производительность Мастера
31
∙
Более активная запись
∙
Синхронизация
∙ ––binlog_sync
∙
Не отключайте!
∙ Может быть больше 1
Производительность Мастера
31
∙ Время жизни binary log
∙ ––expire_log_days
Поведение Мастера
32
∙ Время жизни binary log
∙ Синхронизация
∙ SBR несовместима с READ COMMITTED и READ
UNCOMMITTED
Поведение Мастера
32
∙ Время жизни binary log
∙ Синхронизация
∙ Порядок записи в binary log
∙ Non-deterministic события и SBR
Поведение Мастера
32
Клиент Binary log
Statement-Based Binary Log Format
33
Клиент
INSERT INTO ... ->
Binary log
Statement-Based Binary Log Format
33
Клиент
INSERT INTO ... ->
Binary log
SET TIMESTAMP...
Statement-Based Binary Log Format
33
Клиент
INSERT INTO ... ->
Binary log
SET TIMESTAMP...
SET sql_mode...
Statement-Based Binary Log Format
33
Клиент
INSERT INTO ... ->
Binary log
SET TIMESTAMP...
SET sql_mode...
INSERT INTO ...
Statement-Based Binary Log Format
33
∙ Существует с первых версий
SBR: Сильные Стороны
34
∙ Существует с первых версий
∙ Мало чувствительна к структуре таблиц на
слейве
SBR: Сильные Стороны
34
∙ Существует с первых версий
∙ Мало чувствительна к структуре таблиц на
слейве
∙
Экономна
SBR: Сильные Стороны
34
∙ Существует с первых версий
∙ Мало чувствительна к структуре таблиц на
слейве
∙
Экономна
∙ Понятна человеку
SBR: Сильные Стороны
34
∙ Существует с первых версий
∙ Мало чувствительна к структуре таблиц на
слейве
∙
Экономна
∙ Понятна человеку
∙ Легко отлаживать
SBR: Сильные Стороны
34
mysql> SHOW BINLOG EVENTS IN ’mysql-bin.000316’ FROM 422;
+------------------+-----+------------+------------+-------------+---------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+------------+------------+-------------+---------------------------------+
| mysql-bin.000316 | 422 | Query | 1456667904 | 509 | BEGIN |
| mysql-bin.000316 | 509 | Query | 1456667904 | 609 | use ‘PgDay‘; update ai set f1=1 |
| mysql-bin.000316 | 609 | Xid | 1456667904 | 640 | COMMIT /* xid=60328 */ |
+------------------+-----+------------+------------+-------------+---------------------------------+
3 rows in set (0,12 sec)
№7: SHOW BINLOG EVENTS
35
∙ Не все запросы одинаково безопасны
∙ Non-deterministic функции
∙
Расширения MySQL
∙ Триггеры
∙ Таблицы транзакционные и нет
∙ Временные таблицы
SBR: Слабые Стороны
36
∙ Не все запросы одинаково безопасны
∙ Порядок имеет значение!
∙
Построчные блокировки
SBR: Слабые Стороны
36
∙ Только при использовании SBR
Обновления в неправильном порядке
37
∙ Только при использовании SBR
∙ Блокировки на уровне строк
Обновления в неправильном порядке
37
∙ Только при использовании SBR
∙ Блокировки на уровне строк
∙ Триггеры
∙ SET GLOBAL slave_skip_counter– No GTIDs!
∙
Пропустите транзакцию – GTIDs
∙
Синхронизируйте таблицы!
Обновления в неправильном порядке
37
∙ Только при использовании SBR
∙ Блокировки на уровне строк
∙ Триггеры
∙
Разные опции: для олдфагов
∙ Запустите слейв с опциями мастера
∙ Перезапустите SQL thread
∙
Исправлено в последних версиях
Обновления в неправильном порядке
37
Клиент Binary log
Row-Based Binary Log Format
38
Клиент
UPDATE ... ->
Binary log
Row-Based Binary Log Format
38
Клиент
UPDATE ... ->
Binary log
SET TIMESTAMP...
Row-Based Binary Log Format
38
Клиент
UPDATE ... ->
Binary log
SET TIMESTAMP...
SET sql_mode...
Row-Based Binary Log Format
38
Клиент
UPDATE ... ->
Binary log
SET TIMESTAMP...
SET sql_mode...
Строка до изменений
Row-Based Binary Log Format
38
Клиент
UPDATE ... ->
Binary log
SET TIMESTAMP...
SET sql_mode...
Строка до изменений
Строка с изменениями
Row-Based Binary Log Format
38
∙
Безопасность
∙ Вам больше не нужно заботиться о
Порядке
Триггерах
Функциях
Какие запросы вы посылаете мастеру
RBR: Сильные Стороны
39
∙ Более чувствительна к структуре таблиц
∙ Как правило больше данных
∙
––binlog_row_image=FULL | MINIMAL | NOBLOB
∙ Сложнее отлаживать
RBR: Слабые Стороны
40
$ mysqlbinlog var/mysqld.1/data/master-bin.000001 –start-position=989 –stop-position=1213
...
# at 1167
#160822 14:15:11 server id 1 end_log_pos 1213 CRC32 0x1f346c6b
Update_rows: table id 109 flags: STMT_END_F
BINLOG ’
v966VxMBAAAAKwAAAI8EAAAAAG0AAAAAAAEAAm0yAAJ0MQABAwABY2HOoQ==
v966Vx8BAAAALgAAAL0EAAAAAG0AAAAAAAEAAgAB///+BQAAAP4GAAAAa2w0Hw==
’/*!*/;
ROLLBACK /* added by mysqlbinlog */ /*!*/;
SET @@SESSION.GTID_NEXT= ’AUTOMATIC’ /* added by mysqlbinlog */ /*!*/;
...
№8: mysqlbinlog
41
$ mysqlbinlog -v var/mysqld.1/data/master-bin.000001 –start-position=989 –stop-position=1213
...
# at 1167
#160822 14:15:11 server id 1 end_log_pos 1213 CRC32 0x1f346c6b
Update_rows: table id 109 flags: STMT_END_F
BINLOG ’
v966VxMBAAAAKwAAAI8EAAAAAG0AAAAAAAEAAm0yAAJ0MQABAwABY2HOoQ==
v966Vx8BAAAALgAAAL0EAAAAAG0AAAAAAAEAAgAB///+BQAAAP4GAAAAa2w0Hw==
’/*!*/;
### UPDATE ‘m2‘.‘t1‘
### WHERE
### @1=5
### SET
### @1=6
ROLLBACK /* added by mysqlbinlog */ /*!*/;
SET @@SESSION.GTID_NEXT= ’AUTOMATIC’ /* added by mysqlbinlog */ /*!*/;
№8: mysqlbinlog
42
∙ Необходимо указать
∙
Название binary log на мастере
∙ Позицию
Позиционная
43
∙ Необходимо указать
∙
Название binary log на мастере
∙ Позицию
∙ С точки зрения отладки
∙
Событие выполняется по указателю позиции
Позиционная
43
∙ Необходимо указать
∙
Название binary log на мастере
∙ Позицию
∙ С точки зрения отладки
∙
Событие выполняется по указателю позиции
∙ Легко пропустить
Позиционная
43
∙ Необходимо указать
∙
Название binary log на мастере
∙ Позицию
∙ С точки зрения отладки
∙
Событие выполняется по указателю позиции
∙ Легко пропустить
∙ Легко переместить указатель в прошлое
Позиционная
43
∙ Необходимо указать
∙
Название binary log на мастере
∙ Позицию
∙ С точки зрения отладки
∙
Событие выполняется по указателю позиции
∙ Легко пропустить
∙ Легко переместить указатель в прошлое
∙ Нет проверок
Позиционная
43
∙ Каждая транзакция получает номер: GTID
Глобальные идентификаторы транзакций (GTID)
44
∙ Каждая транзакция получает номер: GTID
∙ MySQL: AUTO_POSITION=1
Глобальные идентификаторы транзакций (GTID)
44
∙ Каждая транзакция получает номер: GTID
∙ MySQL: AUTO_POSITION=1
∙
MariaDB: master_use_gtid = { slave_pos | current_pos }
Глобальные идентификаторы транзакций (GTID)
44
∙ Каждая транзакция получает номер: GTID
∙ MySQL: AUTO_POSITION=1
∙
MariaDB: master_use_gtid = { slave_pos | current_pos }
∙
Не нужно указывать binary log и позицию
Глобальные идентификаторы транзакций (GTID)
44
∙ Каждая транзакция получает номер: GTID
∙ MySQL: AUTO_POSITION=1
∙
MariaDB: master_use_gtid = { slave_pos | current_pos }
∙
Не нужно указывать binary log и позицию
∙
Сложно исправить ошибку
Глобальные идентификаторы транзакций (GTID)
44
sveta@thinkie> mysqlslavetrx –gtid-set=fb776095-8474-11e5-ad41-30b5c2208a0f:3 
–slaves=root:@127.0.0.1:13001
WARNING: Using a password on the command line interface can be insecure.
#
# GTID set to be skipped for each server:
# - 127.0.0.1@13001: fb776095-8474-11e5-ad41-30b5c2208a0f:3
#
# Injecting empty transactions for ’127.0.0.1:13001’...
#
#...done.
#
№9: mysqlslavetrx
45
MySQL Репликация Может Быть Любой
Несколько Мастеров (Multi-channel): 5.7+
47
∙ Несколько наборов relay log
Несколько Мастеров: С Точки Зрения Отладки
48
∙ Несколько наборов relay log
∙ Несколько IO thread-ов
Несколько Мастеров: С Точки Зрения Отладки
48
∙ Несколько наборов relay log
∙ Несколько IO thread-ов
∙ Несколько SQL thread-ов
Несколько Мастеров: С Точки Зрения Отладки
48
∙ Несколько наборов relay log
∙ Несколько IO thread-ов
∙ Несколько SQL thread-ов
∙
MySQL: ––slave_parallel_workers для каждого
Несколько Мастеров: С Точки Зрения Отладки
48
∙ Несколько наборов relay log
∙ Несколько IO thread-ов
∙ Несколько SQL thread-ов
∙
MySQL: ––slave_parallel_workers для каждого
∙
Каналы независимые
Несколько Мастеров: С Точки Зрения Отладки
48
∙ Несколько наборов relay log
∙ Несколько IO thread-ов
∙ Несколько SQL thread-ов
∙
MySQL: ––slave_parallel_workers для каждого
∙
Каналы независимые
∙
Ошибка на одном остановит только его
Несколько Мастеров: С Точки Зрения Отладки
48
∙ Несколько наборов relay log
∙ Несколько IO thread-ов
∙ Несколько SQL thread-ов
∙
MySQL: ––slave_parallel_workers для каждого
∙
Каналы независимые
∙
Ошибка на одном остановит только его
∙
Одноимённые объекты =⇒ конфликты
Несколько Мастеров: С Точки Зрения Отладки
48
Круговая
49
Звезда
50
Креативная
51
∙ Все особенности сохраняются
Сложные Развёртывания
52
∙ Все особенности сохраняются
∙ Умножайте сложности на количество
каналов
Сложные Развёртывания
52
∙ Все особенности сохраняются
∙ Умножайте сложности на количество
каналов
∙
Контролируйте где и что вы пишете
Сложные Развёртывания
52
Итоги
∙ Лог ошибок
Основные Инструменты
54
∙ Лог ошибок
∙ На слэйве
∙ SHOW SLAVE STATUS
∙
MySQL: Таблицы в Performance Schema
∙ Системная база mysql
Основные Инструменты
54
∙ Лог ошибок
∙ На слэйве
∙ На мастере
∙ SHOW MASTER STATUS
∙
SHOW BINLOG EVENTS
∙
mysqlbinlog
Основные Инструменты
54
∙ Лог ошибок
∙ На слэйве
∙ На мастере
∙
Percona Toolkit
Основные Инструменты
54
∙ Лог ошибок
∙ На слэйве
∙ На мастере
∙
Percona Toolkit
∙
MySQL Utilities
Основные Инструменты
54
∙
Всегда доступна, требует настройки
∙
Асинхронная
∙
Мастер
∙ Хранит все изменения в binary log
Два формата: ROW и STATEMENT
∙ Слейв
∙
IO thread реплицирует с мастера в relay log
∙ SQL thread исполняет обновления
Несколько SQL thread-ов в 5.6+
Несколько каналов (мастеров) в 5.7+
∙ GTID в 5.6+
Особенности Репликации
55
∙
Мастер
∙ Те же, что и для обычного сервера
∙ Больше пишет и проверяет
Основные Проблемы
56
∙
Мастер
∙
Slave IO thread
∙ Обычные проблемы с сетью
∙ mysql command line client для тестов
Основные Проблемы
56
∙
Мастер
∙
Slave IO thread
∙
Slave SQL thread
∙ Обычные проблемы при выполнении запросов
∙ Обычные проблемы движка
∙
Меньше потоков выполнения, чем на мастере
Основные Проблемы
56
∙ Basic Techniques – troubleshooting webinar
∙
Troubleshooting hardware resource usage
∙ Introduction into storage engine troubleshoot...
∙
Percona Toolkit
∙ MySQL Utilities
∙
Книга MySQL High Availability
∙ MySQL Replication Team blog
Больше информации
57
http://www.slideshare.net/SvetaSmirnova
https://twitter.com/svetsmirnova
https://github.com/svetasmirnova
Спасибо!
58
Percona Live Europe Call for Papers & Registration!
59

Mais conteúdo relacionado

Mais procurados

Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Ontico
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Ontico
 
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
Ontico
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Новые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практикеНовые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практике
Sveta Smirnova
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
rit2010
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Sveta Smirnova
 

Mais procurados (20)

MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.
 
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Как делать backup MySQL
Как делать backup MySQLКак делать backup MySQL
Как делать backup MySQL
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Deployment to production with an unexpected load
Deployment to production with an unexpected loadDeployment to production with an unexpected load
Deployment to production with an unexpected load
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
 
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
"OpenStack & Oracle — взболтать, но не смешивать". Сергей Филимонцев, Яндекс
"OpenStack & Oracle — взболтать, но не смешивать". Сергей Филимонцев, Яндекс"OpenStack & Oracle — взболтать, но не смешивать". Сергей Филимонцев, Яндекс
"OpenStack & Oracle — взболтать, но не смешивать". Сергей Филимонцев, Яндекс
 
Новые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практикеНовые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практике
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Введение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийВведение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложений
 
How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)
 
Организация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхОрганизация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данных
 

Destaque

Reducing Risk When Upgrading MySQL
Reducing Risk When Upgrading MySQLReducing Risk When Upgrading MySQL
Reducing Risk When Upgrading MySQL
Kenny Gryp
 
MHA (MySQL High Availability): Getting started & moving past quirks
MHA (MySQL High Availability): Getting started & moving past quirksMHA (MySQL High Availability): Getting started & moving past quirks
MHA (MySQL High Availability): Getting started & moving past quirks
Colin Charles
 

Destaque (20)

MySQL - checklist для новичка в Highload
MySQL - checklist для новичка в HighloadMySQL - checklist для новичка в Highload
MySQL - checklist для новичка в Highload
 
Load Data Fast!
Load Data Fast!Load Data Fast!
Load Data Fast!
 
Why MySQL High Availability Matters
Why MySQL High Availability MattersWhy MySQL High Availability Matters
Why MySQL High Availability Matters
 
Requirements the Last Bottleneck
Requirements the Last BottleneckRequirements the Last Bottleneck
Requirements the Last Bottleneck
 
MySQL High Availability Deep Dive
MySQL High Availability Deep DiveMySQL High Availability Deep Dive
MySQL High Availability Deep Dive
 
Explain
ExplainExplain
Explain
 
Lessons Learned: Troubleshooting Replication
Lessons Learned: Troubleshooting ReplicationLessons Learned: Troubleshooting Replication
Lessons Learned: Troubleshooting Replication
 
MySQL High Availability and Disaster Recovery with Continuent, a VMware company
MySQL High Availability and Disaster Recovery with Continuent, a VMware companyMySQL High Availability and Disaster Recovery with Continuent, a VMware company
MySQL High Availability and Disaster Recovery with Continuent, a VMware company
 
Galera cluster for high availability
Galera cluster for high availability Galera cluster for high availability
Galera cluster for high availability
 
Everything You Need to Know About MySQL Group Replication
Everything You Need to Know About MySQL Group ReplicationEverything You Need to Know About MySQL Group Replication
Everything You Need to Know About MySQL Group Replication
 
Hbase源码初探
Hbase源码初探Hbase源码初探
Hbase源码初探
 
Reducing Risk When Upgrading MySQL
Reducing Risk When Upgrading MySQLReducing Risk When Upgrading MySQL
Reducing Risk When Upgrading MySQL
 
MHA (MySQL High Availability): Getting started & moving past quirks
MHA (MySQL High Availability): Getting started & moving past quirksMHA (MySQL High Availability): Getting started & moving past quirks
MHA (MySQL High Availability): Getting started & moving past quirks
 
Redis介绍
Redis介绍Redis介绍
Redis介绍
 
Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1
 
MySQL Server Defaults
MySQL Server DefaultsMySQL Server Defaults
MySQL Server Defaults
 
2010丹臣的思考
2010丹臣的思考2010丹臣的思考
2010丹臣的思考
 
Mix ‘n’ Match Async and Group Replication for Advanced Replication Setups
Mix ‘n’ Match Async and Group Replication for Advanced Replication SetupsMix ‘n’ Match Async and Group Replication for Advanced Replication Setups
Mix ‘n’ Match Async and Group Replication for Advanced Replication Setups
 
High Availability Using MySQL Group Replication
High Availability Using MySQL Group ReplicationHigh Availability Using MySQL Group Replication
High Availability Using MySQL Group Replication
 
MySQL High Availability with Group Replication
MySQL High Availability with Group ReplicationMySQL High Availability with Group Replication
MySQL High Availability with Group Replication
 

Semelhante a Эффективная отладка репликации MySQL

Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
Построение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтПостроение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайт
Alexander Mazurov
 
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON
 
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Fwdays
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
Nikita Borzykh
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
guest40e031
 
Поиск неисправностей в беспроводных сетях, управляемых контроллерами
 Поиск неисправностей в беспроводных сетях, управляемых контроллерами Поиск неисправностей в беспроводных сетях, управляемых контроллерами
Поиск неисправностей в беспроводных сетях, управляемых контроллерами
Cisco Russia
 
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Ontico
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
Andrey Rebrov
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
AvitoTech
 
Проблематика создания высокодоступной сетевой операционной системы для SDN-сетей
Проблематика создания высокодоступной сетевой операционной системы для SDN-сетейПроблематика создания высокодоступной сетевой операционной системы для SDN-сетей
Проблематика создания высокодоступной сетевой операционной системы для SDN-сетей
ARCCN
 

Semelhante a Эффективная отладка репликации MySQL (20)

OpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second EraOpenSource SQL Databases Enter Millions Queries per Second Era
OpenSource SQL Databases Enter Millions Queries per Second Era
 
Эффективная отладка репликации MySQL
Эффективная отладка репликации MySQLЭффективная отладка репликации MySQL
Эффективная отладка репликации MySQL
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Построение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтПостроение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайт
 
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
 
Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks Server
 
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
 
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
Поиск неисправностей в беспроводных сетях, управляемых контроллерами
 Поиск неисправностей в беспроводных сетях, управляемых контроллерами Поиск неисправностей в беспроводных сетях, управляемых контроллерами
Поиск неисправностей в беспроводных сетях, управляемых контроллерами
 
Репликация базы данных CUCM
Репликация базы данных CUCMРепликация базы данных CUCM
Репликация базы данных CUCM
 
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
Синхронная репликацтя БД: какая от неё польза? (Алексей Юрченко)
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
 
Проблематика создания высокодоступной сетевой операционной системы для SDN-сетей
Проблематика создания высокодоступной сетевой операционной системы для SDN-сетейПроблематика создания высокодоступной сетевой операционной системы для SDN-сетей
Проблематика создания высокодоступной сетевой операционной системы для SDN-сетей
 
Быстрое построение backendов c помощью реактивных потоков
Быстрое построение backendов c помощью реактивных потоковБыстрое построение backendов c помощью реактивных потоков
Быстрое построение backendов c помощью реактивных потоков
 

Mais de Sveta Smirnova

MySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации баговMySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации багов
Sveta Smirnova
 
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB ClusterHow to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
Sveta Smirnova
 

Mais de Sveta Smirnova (20)

MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
 
Database in Kubernetes: Diagnostics and Monitoring
Database in Kubernetes: Diagnostics and MonitoringDatabase in Kubernetes: Diagnostics and Monitoring
Database in Kubernetes: Diagnostics and Monitoring
 
MySQL Database Monitoring: Must, Good and Nice to Have
MySQL Database Monitoring: Must, Good and Nice to HaveMySQL Database Monitoring: Must, Good and Nice to Have
MySQL Database Monitoring: Must, Good and Nice to Have
 
MySQL Cookbook: Recipes for Developers
MySQL Cookbook: Recipes for DevelopersMySQL Cookbook: Recipes for Developers
MySQL Cookbook: Recipes for Developers
 
MySQL Performance for DevOps
MySQL Performance for DevOpsMySQL Performance for DevOps
MySQL Performance for DevOps
 
MySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации баговMySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации багов
 
MySQL Cookbook: Recipes for Your Business
MySQL Cookbook: Recipes for Your BusinessMySQL Cookbook: Recipes for Your Business
MySQL Cookbook: Recipes for Your Business
 
Introduction into MySQL Query Tuning for Dev[Op]s
Introduction into MySQL Query Tuning for Dev[Op]sIntroduction into MySQL Query Tuning for Dev[Op]s
Introduction into MySQL Query Tuning for Dev[Op]s
 
MySQL Performance for DevOps
MySQL Performance for DevOpsMySQL Performance for DevOps
MySQL Performance for DevOps
 
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB ClusterHow to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
 
How to migrate from MySQL to MariaDB without tears
How to migrate from MySQL to MariaDB without tearsHow to migrate from MySQL to MariaDB without tears
How to migrate from MySQL to MariaDB without tears
 
Modern solutions for modern database load: improvements in the latest MariaDB...
Modern solutions for modern database load: improvements in the latest MariaDB...Modern solutions for modern database load: improvements in the latest MariaDB...
Modern solutions for modern database load: improvements in the latest MariaDB...
 
How Safe is Asynchronous Master-Master Setup?
How Safe is Asynchronous Master-Master Setup?How Safe is Asynchronous Master-Master Setup?
How Safe is Asynchronous Master-Master Setup?
 
How to Avoid Pitfalls in Schema Upgrade with Galera
How to Avoid Pitfalls in Schema Upgrade with GaleraHow to Avoid Pitfalls in Schema Upgrade with Galera
How to Avoid Pitfalls in Schema Upgrade with Galera
 
How Safe is Asynchronous Master-Master Setup?
 How Safe is Asynchronous Master-Master Setup? How Safe is Asynchronous Master-Master Setup?
How Safe is Asynchronous Master-Master Setup?
 
Introduction to MySQL Query Tuning for Dev[Op]s
Introduction to MySQL Query Tuning for Dev[Op]sIntroduction to MySQL Query Tuning for Dev[Op]s
Introduction to MySQL Query Tuning for Dev[Op]s
 
Billion Goods in Few Categories: How Histograms Save a Life?
Billion Goods in Few Categories: How Histograms Save a Life?Billion Goods in Few Categories: How Histograms Save a Life?
Billion Goods in Few Categories: How Histograms Save a Life?
 
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...
 
Billion Goods in Few Categories: How Histograms Save a Life?
Billion Goods in Few Categories: How Histograms Save a Life?Billion Goods in Few Categories: How Histograms Save a Life?
Billion Goods in Few Categories: How Histograms Save a Life?
 
MySQL Performance Schema in Action
MySQL Performance Schema in ActionMySQL Performance Schema in Action
MySQL Performance Schema in Action
 

Эффективная отладка репликации MySQL

  • 1. Эффективная отладка репликации MySQL June, 6, 2017 Света Смирнова
  • 2. ∙ Инженер тех. поддержки MySQL ∙ Автор ∙ MySQL Troubleshooting ∙ JSON UDF функции ∙ FILTER clause для MySQL ∙ Докладчик ∙ Percona Live, OOW, Fosdem, DevConf, ... Света Смирнова 2
  • 3. ∙ Существует с первых версий Репликация в MySQL 3
  • 4. ∙ Существует с первых версий ∙ Простая в использовании Репликация в MySQL 3
  • 5. ∙ Существует с первых версий ∙ Простая в использовании ∙ Требует минимальной настройки Репликация в MySQL 3
  • 6. ∙ Мастер ∙ ––log-bin ∙ ––server-id ∙ GRANT REPLICATION SLAVE ON *.* ... ∙ Слейв ∙ ––server-id ∙ CHANGE MASTER ... ∙ START SLAVE Запустить репликацию 4
  • 11. Это не Полный Список! 9
  • 14. Мастер Слейв <- Инициирует <- Запрашивает пакет Асинхронная 11
  • 15. Мастер Отправляет пакет -> Слейв <- Инициирует <- Запрашивает пакет Асинхронная 11
  • 16. Мастер Отправляет пакет -> Слейв <- Инициирует <- Запрашивает пакет ... ? Асинхронная 11
  • 17. ∙ Ошибка сети ∙ Авторизация Пришли ли Данные? 12
  • 18. Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: root Master_Port: 13000 Connect_Retry: 60 Master_Log_File: master-bin.000002 Read_Master_Log_Pos: 63810611 Relay_Log_File: slave-relay-bin-master@002d1.000004 Relay_Log_Pos: 1156 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1032 Last_Error: Could not execute Update_rows event on... Skip_Counter: 0 Exec_Master_Log_Pos: 989 Relay_Log_Space: 63814652 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No | Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 1032 Last_SQL_Error: Could not execute Update_rows event on... Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: d08c509e-6857-11e6-8872-30b5c2208a0f Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Master_Retry_Count: 10 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: 160823 15:11:21 Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: master-1 | Master_TLS_Version: ∙ Конфигурация IO thread ∙ Конфигурация SQL thread ∙ Состояние IO thread ∙ Состояние SQL thread ∙ Ошибки ∙ Только последняя ∙ Все есть в журнале ошибок Инструмент №1: SHOW SLAVE STATUS 13
  • 19. Slave_IO_Running: Connecting Slave_SQL_Running: Yes ... Last_IO_Errno: 1045 Last_IO_Error: error connecting to master ’root@127.0.0.1:13000’ - Last_SQL_Errno: 0 Last_SQL_Error: ... Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: 160824 03:18:36 Last_SQL_Error_Timestamp: Ошибки Сети 14
  • 20. mysql> select * from performance_schema.replication_connection_statusG *************************** 1. row *************************** CHANNEL_NAME: GROUP_NAME: SOURCE_UUID: THREAD_ID: NULL SERVICE_STATE: CONNECTING COUNT_RECEIVED_HEARTBEATS: 0 LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00 RECEIVED_TRANSACTION_SET: LAST_ERROR_NUMBER: 1045 LAST_ERROR_MESSAGE: error connecting to master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 4 LAST_ERROR_TIMESTAMP: 2016-08-24 03:21:36 1 row in set (0,01 sec) №2: connection_status в Performance Schema 15
  • 21. 2016-08-24T00:18:36.077384Z 3 [ERROR] Slave I/O for channel ”: error connecting to master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 1, Error_code: 1045 2016-08-24T00:19:36.299011Z 3 [ERROR] Slave I/O for channel ”: error connecting to master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 2, Error_code: 1045 2016-08-24T00:20:36.485315Z 3 [ERROR] Slave I/O for channel ”: error connecting to master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 3, Error_code: 1045 2016-08-24T00:21:36.677915Z 3 [ERROR] Slave I/O for channel ”: error connecting to master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 4, Error_code: 1045 2016-08-24T00:22:36.872066Z 3 [ERROR] Slave I/O for channel ”: error connecting to master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 5, Error_code: 1045 № 3: Лог Ошибок 16
  • 22. $ perror 1045 MySQL error code 1045 (ER_ACCESS_DENIED_ERROR): Access denied for user ’%-.48s’@’%-.64s’ (using password: %s) №4: perror 17
  • 23. ∙ На слейве $ mysql -h127.0.0.1 -P13000 -uslave_user -pslave_password Warning: Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user ’slave_user’@’localhost’ (using password: YES №5: MySQL Command Line Client 18
  • 24. ∙ На слейве ∙ На мастере mysql> SHOW GRANTS; +-----------------------------------------+ | Grants for slave_user@% | +-----------------------------------------+ | GRANT SELECT ON *.* TO ’slave_user’@’%’ | +-----------------------------------------+ 1 row in set (0.00 sec) №5: MySQL Command Line Client 18
  • 25. ∙ На слейве ∙ На мастере ∙ Исправьте привилегии на мастере GRANT REPLICATION SLAVE ON *.* TO ’slave_user’@’%’ №5: MySQL Command Line Client 18
  • 26. ∙ На слейве ∙ На мастере ∙ Исправьте привилегии на мастере ∙ Перезапустите репликацию №5: MySQL Command Line Client 18
  • 28. Мастер Слейв <- Инициирует <- Запрашивает пакет Полусинхронная (Semisynchrous plugin) 19
  • 29. Мастер Отправляет пакет -> Слейв <- Инициирует <- Запрашивает пакет Полусинхронная (Semisynchrous plugin) 19
  • 30. Мастер Отправляет пакет -> Ждёт "Ack" Слейв <- Инициирует <- Запрашивает пакет Полусинхронная (Semisynchrous plugin) 19
  • 31. Мастер Отправляет пакет -> Ждёт "Ack" Слейв <- Инициирует <- Запрашивает пакет <- Отправляет "Ack" Полусинхронная (Semisynchrous plugin) 19
  • 32. ∙ Запись на мастере медленнее асинхронной Полусинхронная: с точки зрения отладки 20
  • 33. ∙ Запись на мастере медленнее асинхронной ∙ Сколько "Ack"-ов ждёт мастер? Полусинхронная: с точки зрения отладки 20
  • 34. ∙ Запись на мастере медленнее асинхронной ∙ Сколько "Ack"-ов ждёт мастер? ∙ До версии 5.7: от одного слейва Полусинхронная: с точки зрения отладки 20
  • 35. ∙ Запись на мастере медленнее асинхронной ∙ Сколько "Ack"-ов ждёт мастер? ∙ До версии 5.7: от одного слейва ∙ Сейчас в MySQL: rpl_semi_sync_master_wait_for_slave_count Полусинхронная: с точки зрения отладки 20
  • 36. ∙ Запись на мастере медленнее асинхронной ∙ Сколько "Ack"-ов ждёт мастер? ∙ До версии 5.7: от одного слейва ∙ Сейчас в MySQL: rpl_semi_sync_master_wait_for_slave_count ∙ Остальных ждать не будет Полусинхронная: с точки зрения отладки 20
  • 37. ∙ Запись на мастере медленнее асинхронной ∙ Сколько "Ack"-ов ждёт мастер? ∙ Что происходит при timeout-е? Полусинхронная: с точки зрения отладки 20
  • 38. ∙ Запись на мастере медленнее асинхронной ∙ Сколько "Ack"-ов ждёт мастер? ∙ Что происходит при timeout-е? ∙ Репликация становится асинхронной Полусинхронная: с точки зрения отладки 20
  • 39. ∙ Запись на мастере медленнее асинхронной ∙ Сколько "Ack"-ов ждёт мастер? ∙ Что происходит при timeout-е? ∙ Что значит "Ack"? Полусинхронная: с точки зрения отладки 20
  • 40. ∙ Запись на мастере медленнее асинхронной ∙ Сколько "Ack"-ов ждёт мастер? ∙ Что происходит при timeout-е? ∙ Что значит "Ack"? ∙ Событие записано в relay log Полусинхронная: с точки зрения отладки 20
  • 41. ∙ Запись на мастере медленнее асинхронной ∙ Сколько "Ack"-ов ждёт мастер? ∙ Что происходит при timeout-е? ∙ Что значит "Ack"? ∙ Событие записано в relay log ∙ Неизвестно, выполнено ли оно Полусинхронная: с точки зрения отладки 20
  • 42. IO thread Читает с мастера SQL thread Два типа потоков 21
  • 43. IO thread Читает с мастера Сохраняет в relay log SQL thread Два типа потоков 21
  • 44. IO thread Читает с мастера Сохраняет в relay log SQL thread <- Читает из relay log Два типа потоков 21
  • 45. IO thread Читает с мастера Сохраняет в relay log SQL thread <- Читает из relay log Исполняет Два типа потоков 21
  • 46. ∙ Проще в отладке ∙ Медленнее мастера ∙ При больших нагрузках Один SQL Поток 22
  • 48. Запись на Слейве: Один Поток 24
  • 50. ∙ MySQL: ––slave_parallel_workers ∙ MySQL: ––slave_parallel_type=DATABASE | LOGICAL_CLOCK ∙ MySQL 8.0.1+: SET @@GLOBAL.binlog_transaction_dependency_tracking = WRITESET | WRITESET_SESSION | COMMIT_ORDER; Настройка Производительности 26
  • 51. ∙ MariaDB: ––slave_parallel_threads ∙ MariaDB: ––slave_parallel_max_queued ∙ MariaDB: ––slave_domain_parallel_threads ∙ MariaDB: ––slave_parallel_mode=optimistic | conservative | aggressive | minimal | none Настройка Производительности 26
  • 52. mysql> select WORKER_ID, SERVICE_STATE, LAST_SEEN_TRANSACTION, LAST_ERROR_NUMBER, -> LAST_ERROR_MESSAGE from performance_schema.replication_applier_status_by_workerG *************************** 1. row *************************** WORKER_ID: 1 SERVICE_STATE: OFF LAST_SEEN_TRANSACTION: d318bc17-66dc-11e6-a471-30b5c2208a0f:4988 LAST_ERROR_NUMBER: 0 LAST_ERROR_MESSAGE: *************************** 2. row *************************** WORKER_ID: 3 SERVICE_STATE: OFF LAST_SEEN_TRANSACTION: d318bc17-66dc-11e6-a471-30b5c2208a0f:4986 LAST_ERROR_NUMBER: 1032 LAST_ERROR_MESSAGE: Worker 2 failed executing transaction... №6: Ошибки Одного Останавливают Все 27
  • 53. MariaDB [test]> select id, command, time, state from information_schema.processlist -> where user=’system user’; +----+---------+------+------------------------------------------------------------------+ | id | command | time | state | +----+---------+------+------------------------------------------------------------------+ | 25 | Connect | 4738 | Waiting for master to send event | | 24 | Connect | 5096 | Slave has read all relay log; waiting for the slave I/O thread t | | 23 | Connect | 0 | Waiting for work from SQL thread | | 22 | Connect | 0 | Unlocking tables | | 21 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) | | 20 | Connect | 0 | Waiting for prior transaction to start commit before starting ne | | 19 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) | | 18 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) | | 17 | Connect | 0 | Update_rows_log_event::find_row(-1) ... №6: Ошибки Одного Останавливают Все 27
  • 54. ∙ Разные данные ∙ Слейв не может выполнить event из relay log Какие Бывают Ошибки? 28
  • 55. ∙ Разные данные ∙ Слейв не может выполнить event из relay log ∙ Разные ошибки на мастере и слейве ∙ Триггеры ∙ Транзакционные и нетранзакционные таблицы одновременно Какие Бывают Ошибки? 28
  • 56. ∙ Таблица менялась вне репликации? ∙ Как? ∙ Конфликт с обновлениями на мастере? Разные Данные на Мастере и Слейве 29
  • 57. ∙ Таблица менялась вне репликации? ∙ Идентична ли структура таблиц? ∙ Percona Toolkit pt-table-checksum, pt-table-sync ∙ MySQL Utilities mysqlrplsync, mysqldbcompare, mysqldiff Разные Данные на Мастере и Слейве 29
  • 58. ∙ Таблица менялась вне репликации? ∙ Идентична ли структура таблиц? ∙ Обновления в неправильном порядке? ∙ mysqlbinlog ∙ Логика приложения на мастере Разные Данные на Мастере и Слейве 29
  • 60. Мастер Получает изменение Передаёт движку -> Табличный движок Логическая 30
  • 61. Мастер Получает изменение Передаёт движку -> Табличный движок Пишет в таблицу Логическая 30
  • 62. Мастер Получает изменение Передаёт движку -> Табличный движок Пишет в таблицу <- Передаёт управление Логическая 30
  • 63. Мастер Получает изменение Передаёт движку -> Пишет в binary log Табличный движок Пишет в таблицу <- Передаёт управление Логическая 30
  • 64. Мастер Получает изменение Передаёт движку -> Пишет в binary log Синхронизируется -> Табличный движок Пишет в таблицу <- Передаёт управление <- Синхронизируется Логическая 30
  • 65. ∙ Более активная запись ∙ RBR: ––binlog_row_image Производительность Мастера 31
  • 66. ∙ Более активная запись ∙ RBR: ––binlog_row_image ∙ ––binlog_cache_size Наблюдайте Binlog_cache_disk_use Производительность Мастера 31
  • 67. ∙ Более активная запись ∙ RBR: ––binlog_row_image ∙ ––binlog_cache_size Наблюдайте Binlog_cache_disk_use ∙ ––binlog_stmt_cache_size Наблюдайте Binlog_stmt_cache_disk_use Производительность Мастера 31
  • 68. ∙ Более активная запись ∙ Синхронизация ∙ ––binlog_sync ∙ Не отключайте! ∙ Может быть больше 1 Производительность Мастера 31
  • 69. ∙ Время жизни binary log ∙ ––expire_log_days Поведение Мастера 32
  • 70. ∙ Время жизни binary log ∙ Синхронизация ∙ SBR несовместима с READ COMMITTED и READ UNCOMMITTED Поведение Мастера 32
  • 71. ∙ Время жизни binary log ∙ Синхронизация ∙ Порядок записи в binary log ∙ Non-deterministic события и SBR Поведение Мастера 32
  • 73. Клиент INSERT INTO ... -> Binary log Statement-Based Binary Log Format 33
  • 74. Клиент INSERT INTO ... -> Binary log SET TIMESTAMP... Statement-Based Binary Log Format 33
  • 75. Клиент INSERT INTO ... -> Binary log SET TIMESTAMP... SET sql_mode... Statement-Based Binary Log Format 33
  • 76. Клиент INSERT INTO ... -> Binary log SET TIMESTAMP... SET sql_mode... INSERT INTO ... Statement-Based Binary Log Format 33
  • 77. ∙ Существует с первых версий SBR: Сильные Стороны 34
  • 78. ∙ Существует с первых версий ∙ Мало чувствительна к структуре таблиц на слейве SBR: Сильные Стороны 34
  • 79. ∙ Существует с первых версий ∙ Мало чувствительна к структуре таблиц на слейве ∙ Экономна SBR: Сильные Стороны 34
  • 80. ∙ Существует с первых версий ∙ Мало чувствительна к структуре таблиц на слейве ∙ Экономна ∙ Понятна человеку SBR: Сильные Стороны 34
  • 81. ∙ Существует с первых версий ∙ Мало чувствительна к структуре таблиц на слейве ∙ Экономна ∙ Понятна человеку ∙ Легко отлаживать SBR: Сильные Стороны 34
  • 82. mysql> SHOW BINLOG EVENTS IN ’mysql-bin.000316’ FROM 422; +------------------+-----+------------+------------+-------------+---------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+------------+------------+-------------+---------------------------------+ | mysql-bin.000316 | 422 | Query | 1456667904 | 509 | BEGIN | | mysql-bin.000316 | 509 | Query | 1456667904 | 609 | use ‘PgDay‘; update ai set f1=1 | | mysql-bin.000316 | 609 | Xid | 1456667904 | 640 | COMMIT /* xid=60328 */ | +------------------+-----+------------+------------+-------------+---------------------------------+ 3 rows in set (0,12 sec) №7: SHOW BINLOG EVENTS 35
  • 83. ∙ Не все запросы одинаково безопасны ∙ Non-deterministic функции ∙ Расширения MySQL ∙ Триггеры ∙ Таблицы транзакционные и нет ∙ Временные таблицы SBR: Слабые Стороны 36
  • 84. ∙ Не все запросы одинаково безопасны ∙ Порядок имеет значение! ∙ Построчные блокировки SBR: Слабые Стороны 36
  • 85. ∙ Только при использовании SBR Обновления в неправильном порядке 37
  • 86. ∙ Только при использовании SBR ∙ Блокировки на уровне строк Обновления в неправильном порядке 37
  • 87. ∙ Только при использовании SBR ∙ Блокировки на уровне строк ∙ Триггеры ∙ SET GLOBAL slave_skip_counter– No GTIDs! ∙ Пропустите транзакцию – GTIDs ∙ Синхронизируйте таблицы! Обновления в неправильном порядке 37
  • 88. ∙ Только при использовании SBR ∙ Блокировки на уровне строк ∙ Триггеры ∙ Разные опции: для олдфагов ∙ Запустите слейв с опциями мастера ∙ Перезапустите SQL thread ∙ Исправлено в последних версиях Обновления в неправильном порядке 37
  • 89. Клиент Binary log Row-Based Binary Log Format 38
  • 90. Клиент UPDATE ... -> Binary log Row-Based Binary Log Format 38
  • 91. Клиент UPDATE ... -> Binary log SET TIMESTAMP... Row-Based Binary Log Format 38
  • 92. Клиент UPDATE ... -> Binary log SET TIMESTAMP... SET sql_mode... Row-Based Binary Log Format 38
  • 93. Клиент UPDATE ... -> Binary log SET TIMESTAMP... SET sql_mode... Строка до изменений Row-Based Binary Log Format 38
  • 94. Клиент UPDATE ... -> Binary log SET TIMESTAMP... SET sql_mode... Строка до изменений Строка с изменениями Row-Based Binary Log Format 38
  • 95. ∙ Безопасность ∙ Вам больше не нужно заботиться о Порядке Триггерах Функциях Какие запросы вы посылаете мастеру RBR: Сильные Стороны 39
  • 96. ∙ Более чувствительна к структуре таблиц ∙ Как правило больше данных ∙ ––binlog_row_image=FULL | MINIMAL | NOBLOB ∙ Сложнее отлаживать RBR: Слабые Стороны 40
  • 97. $ mysqlbinlog var/mysqld.1/data/master-bin.000001 –start-position=989 –stop-position=1213 ... # at 1167 #160822 14:15:11 server id 1 end_log_pos 1213 CRC32 0x1f346c6b Update_rows: table id 109 flags: STMT_END_F BINLOG ’ v966VxMBAAAAKwAAAI8EAAAAAG0AAAAAAAEAAm0yAAJ0MQABAwABY2HOoQ== v966Vx8BAAAALgAAAL0EAAAAAG0AAAAAAAEAAgAB///+BQAAAP4GAAAAa2w0Hw== ’/*!*/; ROLLBACK /* added by mysqlbinlog */ /*!*/; SET @@SESSION.GTID_NEXT= ’AUTOMATIC’ /* added by mysqlbinlog */ /*!*/; ... №8: mysqlbinlog 41
  • 98. $ mysqlbinlog -v var/mysqld.1/data/master-bin.000001 –start-position=989 –stop-position=1213 ... # at 1167 #160822 14:15:11 server id 1 end_log_pos 1213 CRC32 0x1f346c6b Update_rows: table id 109 flags: STMT_END_F BINLOG ’ v966VxMBAAAAKwAAAI8EAAAAAG0AAAAAAAEAAm0yAAJ0MQABAwABY2HOoQ== v966Vx8BAAAALgAAAL0EAAAAAG0AAAAAAAEAAgAB///+BQAAAP4GAAAAa2w0Hw== ’/*!*/; ### UPDATE ‘m2‘.‘t1‘ ### WHERE ### @1=5 ### SET ### @1=6 ROLLBACK /* added by mysqlbinlog */ /*!*/; SET @@SESSION.GTID_NEXT= ’AUTOMATIC’ /* added by mysqlbinlog */ /*!*/; №8: mysqlbinlog 42
  • 99. ∙ Необходимо указать ∙ Название binary log на мастере ∙ Позицию Позиционная 43
  • 100. ∙ Необходимо указать ∙ Название binary log на мастере ∙ Позицию ∙ С точки зрения отладки ∙ Событие выполняется по указателю позиции Позиционная 43
  • 101. ∙ Необходимо указать ∙ Название binary log на мастере ∙ Позицию ∙ С точки зрения отладки ∙ Событие выполняется по указателю позиции ∙ Легко пропустить Позиционная 43
  • 102. ∙ Необходимо указать ∙ Название binary log на мастере ∙ Позицию ∙ С точки зрения отладки ∙ Событие выполняется по указателю позиции ∙ Легко пропустить ∙ Легко переместить указатель в прошлое Позиционная 43
  • 103. ∙ Необходимо указать ∙ Название binary log на мастере ∙ Позицию ∙ С точки зрения отладки ∙ Событие выполняется по указателю позиции ∙ Легко пропустить ∙ Легко переместить указатель в прошлое ∙ Нет проверок Позиционная 43
  • 104. ∙ Каждая транзакция получает номер: GTID Глобальные идентификаторы транзакций (GTID) 44
  • 105. ∙ Каждая транзакция получает номер: GTID ∙ MySQL: AUTO_POSITION=1 Глобальные идентификаторы транзакций (GTID) 44
  • 106. ∙ Каждая транзакция получает номер: GTID ∙ MySQL: AUTO_POSITION=1 ∙ MariaDB: master_use_gtid = { slave_pos | current_pos } Глобальные идентификаторы транзакций (GTID) 44
  • 107. ∙ Каждая транзакция получает номер: GTID ∙ MySQL: AUTO_POSITION=1 ∙ MariaDB: master_use_gtid = { slave_pos | current_pos } ∙ Не нужно указывать binary log и позицию Глобальные идентификаторы транзакций (GTID) 44
  • 108. ∙ Каждая транзакция получает номер: GTID ∙ MySQL: AUTO_POSITION=1 ∙ MariaDB: master_use_gtid = { slave_pos | current_pos } ∙ Не нужно указывать binary log и позицию ∙ Сложно исправить ошибку Глобальные идентификаторы транзакций (GTID) 44
  • 109. sveta@thinkie> mysqlslavetrx –gtid-set=fb776095-8474-11e5-ad41-30b5c2208a0f:3 –slaves=root:@127.0.0.1:13001 WARNING: Using a password on the command line interface can be insecure. # # GTID set to be skipped for each server: # - 127.0.0.1@13001: fb776095-8474-11e5-ad41-30b5c2208a0f:3 # # Injecting empty transactions for ’127.0.0.1:13001’... # #...done. # №9: mysqlslavetrx 45
  • 112. ∙ Несколько наборов relay log Несколько Мастеров: С Точки Зрения Отладки 48
  • 113. ∙ Несколько наборов relay log ∙ Несколько IO thread-ов Несколько Мастеров: С Точки Зрения Отладки 48
  • 114. ∙ Несколько наборов relay log ∙ Несколько IO thread-ов ∙ Несколько SQL thread-ов Несколько Мастеров: С Точки Зрения Отладки 48
  • 115. ∙ Несколько наборов relay log ∙ Несколько IO thread-ов ∙ Несколько SQL thread-ов ∙ MySQL: ––slave_parallel_workers для каждого Несколько Мастеров: С Точки Зрения Отладки 48
  • 116. ∙ Несколько наборов relay log ∙ Несколько IO thread-ов ∙ Несколько SQL thread-ов ∙ MySQL: ––slave_parallel_workers для каждого ∙ Каналы независимые Несколько Мастеров: С Точки Зрения Отладки 48
  • 117. ∙ Несколько наборов relay log ∙ Несколько IO thread-ов ∙ Несколько SQL thread-ов ∙ MySQL: ––slave_parallel_workers для каждого ∙ Каналы независимые ∙ Ошибка на одном остановит только его Несколько Мастеров: С Точки Зрения Отладки 48
  • 118. ∙ Несколько наборов relay log ∙ Несколько IO thread-ов ∙ Несколько SQL thread-ов ∙ MySQL: ––slave_parallel_workers для каждого ∙ Каналы независимые ∙ Ошибка на одном остановит только его ∙ Одноимённые объекты =⇒ конфликты Несколько Мастеров: С Точки Зрения Отладки 48
  • 122. ∙ Все особенности сохраняются Сложные Развёртывания 52
  • 123. ∙ Все особенности сохраняются ∙ Умножайте сложности на количество каналов Сложные Развёртывания 52
  • 124. ∙ Все особенности сохраняются ∙ Умножайте сложности на количество каналов ∙ Контролируйте где и что вы пишете Сложные Развёртывания 52
  • 126. ∙ Лог ошибок Основные Инструменты 54
  • 127. ∙ Лог ошибок ∙ На слэйве ∙ SHOW SLAVE STATUS ∙ MySQL: Таблицы в Performance Schema ∙ Системная база mysql Основные Инструменты 54
  • 128. ∙ Лог ошибок ∙ На слэйве ∙ На мастере ∙ SHOW MASTER STATUS ∙ SHOW BINLOG EVENTS ∙ mysqlbinlog Основные Инструменты 54
  • 129. ∙ Лог ошибок ∙ На слэйве ∙ На мастере ∙ Percona Toolkit Основные Инструменты 54
  • 130. ∙ Лог ошибок ∙ На слэйве ∙ На мастере ∙ Percona Toolkit ∙ MySQL Utilities Основные Инструменты 54
  • 131. ∙ Всегда доступна, требует настройки ∙ Асинхронная ∙ Мастер ∙ Хранит все изменения в binary log Два формата: ROW и STATEMENT ∙ Слейв ∙ IO thread реплицирует с мастера в relay log ∙ SQL thread исполняет обновления Несколько SQL thread-ов в 5.6+ Несколько каналов (мастеров) в 5.7+ ∙ GTID в 5.6+ Особенности Репликации 55
  • 132. ∙ Мастер ∙ Те же, что и для обычного сервера ∙ Больше пишет и проверяет Основные Проблемы 56
  • 133. ∙ Мастер ∙ Slave IO thread ∙ Обычные проблемы с сетью ∙ mysql command line client для тестов Основные Проблемы 56
  • 134. ∙ Мастер ∙ Slave IO thread ∙ Slave SQL thread ∙ Обычные проблемы при выполнении запросов ∙ Обычные проблемы движка ∙ Меньше потоков выполнения, чем на мастере Основные Проблемы 56
  • 135. ∙ Basic Techniques – troubleshooting webinar ∙ Troubleshooting hardware resource usage ∙ Introduction into storage engine troubleshoot... ∙ Percona Toolkit ∙ MySQL Utilities ∙ Книга MySQL High Availability ∙ MySQL Replication Team blog Больше информации 57
  • 137. Percona Live Europe Call for Papers & Registration! 59