Show slave status error no query specified

mysql> start slave; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> show warnings; +-------+------+--------------------------+ | Level | Code | Message | +-------+---...
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;
+-------+------+--------------------------+
| Level | Code | Message                  |
+-------+------+--------------------------+
| Note  | 1254 | Slave is already running |
+-------+------+--------------------------+
1 row in set (0.00 sec)

mysql> show slave statusG;
Empty set (0.00 sec)

ERROR:
No query specified

Why???? I did a fresh install of MYSQL. I edited My.cnf. And I restarted the damn things.

This is my slave MY.CNF

server-id               = 2
log_bin                 = /var/log/mysql/mysql-bin.log
master-host     = 68.13.41.41
master-user     = replication
master-password = slave
master-port     = 3306

This is my master MY.cnf:

server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog-do-db=fal

I did this on master:

GRANT ALL ON *.* TO 'replication'@'theip' IDENTIFIED BY 'slave';

asked Jan 20, 2010 at 22:41

TIMEX's user avatar

I fixed it by running commands in the MYSQL thing (instead of relying on the config)

answered Jan 20, 2010 at 23:04

TIMEX's user avatar

TIMEXTIMEX

252k347 gold badges766 silver badges1068 bronze badges

1

Try adding this line to your MY.CNF on the SLAVE server:

report-host = 68.13.41.41

Then restart MySQL on the SLAVE server.

Now test on the MASTER server:

SHOW SLAVE STATUS G

answered Mar 5, 2013 at 7:16

Kleber's user avatar

I’m guessing you are adding a semi-colon (;) to the end of the statement.
Its unnecessary with the G.

So change show slave status G; to show slave status G

answered Jun 11, 2016 at 7:14

CK.Nguyen's user avatar

CK.NguyenCK.Nguyen

1,24816 silver badges16 bronze badges

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;
+-------+------+--------------------------+
| Level | Code | Message                  |
+-------+------+--------------------------+
| Note  | 1254 | Slave is already running |
+-------+------+--------------------------+
1 row in set (0.00 sec)

mysql> show slave statusG;
Empty set (0.00 sec)

ERROR:
No query specified

Why???? I did a fresh install of MYSQL. I edited My.cnf. And I restarted the damn things.

This is my slave MY.CNF

server-id               = 2
log_bin                 = /var/log/mysql/mysql-bin.log
master-host     = 68.13.41.41
master-user     = replication
master-password = slave
master-port     = 3306

This is my master MY.cnf:

server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog-do-db=fal

I did this on master:

GRANT ALL ON *.* TO 'replication'@'theip' IDENTIFIED BY 'slave';

asked Jan 20, 2010 at 22:41

TIMEX's user avatar

I fixed it by running commands in the MYSQL thing (instead of relying on the config)

answered Jan 20, 2010 at 23:04

TIMEX's user avatar

TIMEXTIMEX

252k347 gold badges766 silver badges1068 bronze badges

1

Try adding this line to your MY.CNF on the SLAVE server:

report-host = 68.13.41.41

Then restart MySQL on the SLAVE server.

Now test on the MASTER server:

SHOW SLAVE STATUS G

answered Mar 5, 2013 at 7:16

Kleber's user avatar

I’m guessing you are adding a semi-colon (;) to the end of the statement.
Its unnecessary with the G.

So change show slave status G; to show slave status G

answered Jun 11, 2016 at 7:14

CK.Nguyen's user avatar

CK.NguyenCK.Nguyen

1,24816 silver badges16 bronze badges

Error no query specified

Добрый день, друзья.
Прошу по возможности подсказать по следующему вопросу.
Настроены два сервера под CentOS с mysql 5.6. Один мастер, другой соответственно slave. Настроена репликация для одной базы cat3, на сервере боевая база cat. Cat3 — аналог cat, но решили для тестирования начать не с боевой.
Конфиг для репликации с мастера:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 5
max_binlog_size = 500M
binlog_format = mixed
binlog_do_db = cat3
binlog-ignore-db=mysql

на slave сервере: server-id = 2.

В начале было все ок, прошло часов 12 и репликация свалилась с ошибкой странной:
Error ‘Table ‘cat.xml_logs_import_stats’ doesn’t exist’ on query. Default database: ». Query: ‘DELETE FROM `cat`.`xml_logs_import_stats` WHERE `id`=’1388249»

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

Делал на слейве:
set global SQL_SLAVE_SKIP_COUNTER = 1;
но не помогает, слейв больше не стартует.
mysql> show slave statusG;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host:
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 47646
Relay_Log_File: mysqld-relay-bin.000004
Relay_Log_Pos: 16279
Relay_Master_Log_File: mysql-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: 1146
Last_Error: Error ‘Table ‘cat.xml_logs_import_stats’ doesn’t exist’ on query. Default database: ». Query: ‘DELETE FROM `cat`.`xml_logs_import_stats` WHERE `id`=’1388249»
Skip_Counter: 0
Exec_Master_Log_Pos: 19530
Relay_Log_Space: 46060
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: 1146
Last_SQL_Error: Error ‘Table ‘cat.xml_logs_import_stats’ doesn’t exist’ on query. Default database: ». Query: ‘DELETE FROM `cat`.`xml_logs_import_stats` WHERE `id`=’1388249»
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 20f2b3c0-504d-11e4-93d3-e4115bdc4f84
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 150122 16:52:45
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.01 sec)

Главный мой вопрос как репликация свалилась запросом, которые не относится к базе, которая реплицируется.
Спасибо.

Ответить | Правка | Cообщить модератору

  • ошибка репликации mysql, PavelR, 07:34 , 23-Янв-15, ( 1 )
    • ошибка репликации mysql, Aleks305, 09:50 , 23-Янв-15, ( 3 )
  • ошибка репликации mysql, PavelR, 07:37 , 23-Янв-15, ( 2 )
    • ошибка репликации mysql, Aleks305, 14:03 , 23-Янв-15, ( 6 )
      • ошибка репликации mysql, PavelR, 19:12 , 23-Янв-15, ( 8 )
  • ошибка репликации mysql, ALex_hha, 11:41 , 23-Янв-15, ( 4 )
    • ошибка репликации mysql, Aleks305, 11:57 , 23-Янв-15, ( 5 )
      • ошибка репликации mysql, Aleks305, 16:19 , 23-Янв-15, ( 7 )
        • ошибка репликации mysql, PavelR, 19:14 , 23-Янв-15, ( 9 )
Сообщения по теме [Сортировка по времени | RSS]

> Главный мой вопрос как репликация свалилась запросом, которые не относится к
> базе, которая реплицируется.
> Спасибо.

если вы сделаете так:

use cat3;
DELETE FROM `cat`.`xml_logs_import_stats` WHERE `id`=’1388249′

То этот запрос упадет в бинлог, т.к. фильтрация производится по значению текущей БД соединения.

Добро пожаловать в волшебный мир MySQL репликации.

1 . «ошибка репликации mysql» + / –
Сообщение от PavelR (??) on 23-Янв-15, 07:34
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3 . «ошибка репликации mysql» + / –
Сообщение от Aleks305 (ok) on 23-Янв-15, 09:50

>> Главный мой вопрос как репликация свалилась запросом, которые не относится к
>> базе, которая реплицируется.
>> Спасибо.
> если вы сделаете так:
> use cat3;
> DELETE FROM `cat`.`xml_logs_import_stats` WHERE `id`=’1388249′
> То этот запрос упадет в бинлог, т.к. фильтрация производится по значению текущей
> БД соединения.
> Добро пожаловать в волшебный мир MySQL репликации.

Спасибо за ответ. Потестирую.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2 . «ошибка репликации mysql» + / –
Сообщение от PavelR (ok) on 23-Янв-15, 07:37

> Делал на слейве:
> set global SQL_SLAVE_SKIP_COUNTER = 1;
> но не помогает, слейв больше не стартует.

Это чушь, вы в чем-то /сильно невнимательны/. Стартовать должен.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6 . «ошибка репликации mysql» + / –
Сообщение от Aleks305 (ok) on 23-Янв-15, 14:03

>> Делал на слейве:
>> set global SQL_SLAVE_SKIP_COUNTER = 1;
>> но не помогает, слейв больше не стартует.
> Это чушь, вы в чем-то /сильно невнимательны/. Стартовать должен.

Павел, скажите, пожалуйста, был ли у вас положительный опыт эксплуатации master-master на mysql? сложилось ли какое мнение об этом процессе?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

8 . «ошибка репликации mysql» + / –
Сообщение от PavelR (??) on 23-Янв-15, 19:12

>>> Делал на слейве:
>>> set global SQL_SLAVE_SKIP_COUNTER = 1;
>>> но не помогает, слейв больше не стартует.
>> Это чушь, вы в чем-то /сильно невнимательны/. Стартовать должен.
> Павел, скажите, пожалуйста, был ли у вас положительный опыт эксплуатации master-master
> на mysql? сложилось ли какое мнение об этом процессе?

Оно работает нормально, если программисты/проектировщики, написавшие приложение для этой схемы, были адекватны.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

4 . «ошибка репликации mysql» + / –
Сообщение от ALex_hha (ok) on 23-Янв-15, 11:41

> Делал на слейве:
> set global SQL_SLAVE_SKIP_COUNTER = 1;
> но не помогает, слейв больше не стартует.
> mysql> show slave statusG;

вообще то надо так

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5 . «ошибка репликации mysql» + / –
Сообщение от Aleks305 (ok) on 23-Янв-15, 11:57

>> Делал на слейве:
>> set global SQL_SLAVE_SKIP_COUNTER = 1;
>> но не помогает, слейв больше не стартует.
>> mysql> show slave statusG;
> вообще то надо так
>

Спасибо. Я в курсе, так и делал.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7 . «ошибка репликации mysql» + / –
Сообщение от Aleks305 (ok) on 23-Янв-15, 16:19

>[оверквотинг удален]
>>> set global SQL_SLAVE_SKIP_COUNTER = 1;
>>> но не помогает, слейв больше не стартует.
>>> mysql> show slave statusG;
>> вообще то надо так
>>
> Спасибо. Я в курсе, так и делал.

опять аналогичная ошибка выскочила, сделал необходимые команды, а эффекта ноль. Как в этом случае от ошибки избавиться?
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement.

mysql> show slave statusG;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host:
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 5047
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-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: 1146
Last_Error: Error ‘Table ‘cat.schedule’ doesn’t exist’ on query. Default database: ». Query: ‘DELETE FROM `cat`.`schedule` WHERE `id`=’184407»
Skip_Counter: 0
Exec_Master_Log_Pos: 120
Relay_Log_Space: 5864
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: 1146
Last_SQL_Error: Error ‘Table ‘cat.schedule’ doesn’t exist’ on query. Default database: ». Query: ‘DELETE FROM `cat`.`schedule` WHERE `id`=’184407»
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 20f2b3c0-504d-11e4-93d3-e4115bdc4f84
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 150123 15:59:15
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)

ERROR:
No query specified

mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)

mysql> set global SQL_SLAVE_SKIP_COUNTER = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave statusG;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host:
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 5047
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 553
Relay_Master_Log_File: mysql-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: 1146
Last_Error: Error ‘Table ‘cat.schedule’ doesn’t exist’ on query. Default database: ». Query: ‘DELETE FROM `cat`.`schedule` WHERE `id`=’184408»
Skip_Counter: 0
Exec_Master_Log_Pos: 390
Relay_Log_Space: 6201
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: 1146
Last_SQL_Error: Error ‘Table ‘cat.schedule’ doesn’t exist’ on query. Default database: ». Query: ‘DELETE FROM `cat`.`schedule` WHERE `id`=’184408»
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 20f2b3c0-504d-11e4-93d3-e4115bdc4f84
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 150123 16:07:50
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

9 . «ошибка репликации mysql» + / –
Сообщение от PavelR (??) on 23-Янв-15, 19:14

> опять аналогичная ошибка выскочила, сделал необходимые команды, а эффекта ноль. Как в
> этом случае от ошибки избавиться?

Всё также. Пропускать «неправильные» запросы по одному.
Надеюсь вы достаточно внимательны, чтобы увидеть, что падает на разных запросах?

Источник

Читайте также:  Ps3 cech 4308a прошивка super slim

Adblock
detector

В MySQL существуют два типа репликации данных:

  • Master-Master
  • Master-Slave

В данной статье мы рассмотрим репликацию Master-Master. При данной репликации данные, попавшие на тот или иной сервер в кластере будут реплицированы между собой.

Тестовый стенд:

  • Master_1 — сервер на Centos 7 c адресом 192.168.15.2
  • Master_2 — сервер на Centos 7 с адресом 192.168.15.3

Разделим процесс настройки репликации Master-Master на 2 этапа:

  1. Организация Master-Slave репликации. Главным сервером будет выступать Master_1, а вспомогательным будет Master_2.
  2. Организация обратной Master-Slave репликации — серверы будут синхронизировать информацию из логов соседа.

Установку MySQL мы рассматривали в данной статье, поэтому этот этап мы не будем рассматривать.

Настройка репликации типа Master-Master на MySQL

На двух серверах поднят MySQL. Первым делом нам необходимо провести редактирование файла my.cnf на каждом сервере.

Сервер Master_1 (192.168.15.2)

# mcedit /etc/mysql/my.cnf

В открывшимся файле приводим всё к данному виду:

[mysqld]
#Уникальный идентификатор сервера
server-id = 1
 
#Логи ошибок
log_error = /var/log/mysql/mysql.err
 
#Путь к bin-логам сервера(бин-лог, который заполняет мастер)
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
 
#Путь к relay-логам слейва (бин-лог, скачанный с мастера)
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
 
#БД, которые нужно/не нужно реплицировать
#replicate-do-db = testdb
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
 
#Не вести журнал бин-лога для БД
binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
 
#Чтобы не было конфликтов автоматического инкремента, сообщаем серверу,
#чтобы id генерировались начиная с 1-го прибавляя по 2,
# например 13, 23, 33, 43...
auto_increment_increment = 2
auto_increment_offset = 1
 
#Сохранять логи с мастера в свой бин-лог, чтобы передать слейв-серверу
log-slave-updates
#log_slave_updates = 1

# Сколько дней хранить бин-логи
expire_logs_days = 7

# Максимальный размер бин-лога
max_binlog_size = 500M

# Адрес 1-го мастера
bind-address = 192.168.15.2

Далее создаем пользователя для репликации:

mysql> create user 'replica'@'%' identified by '%repl2021'; 
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to 'replica'@'%'; 
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit

Указываем IP адрес для пользователя репликации:

# create user 'replica'@'192.168.15.2' identified by '%repl2021'; 
# GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.15.2' IDENTIFIED BY '%repl2021';

Производим перезапуск MySQL сервера:

Первый Master-сервер развернут.

Проверяем статус созданного нами мастер сервера:

mysql> show master status; 
+------------------+----------+--------------+---------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                            |
+------------------+----------+--------------+---------------------------------------------+
| mysql-bin.000002 |      107 |              | information_schema,mysql,performance_schema |
+------------------+----------+--------------+---------------------------------------------+
1 row in set (0.00 sec)

mysql>

Далее переходим ко второму серверу Master_2 (192.168.15.3):

Редактируем файл аналогичным образом, как в конфиге ниже:

#Уникальный идентификатор сервера
server-id = 2
 
#Логи ошибок
log_error = /var/log/mysql/mysql.err
 
#Путь к bin-логам сервера(бин-лог, который заполняеи мастер)
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
 
#Путь к relay-логам слейва (бин-лог, скачанный с мастера)
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
 
#БД, которые нужно/не нужно реплицировать
#replicate-do-db = testdb
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
 
#Не вести журнал бин-лога для БД
binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
 
#Чтобы не было конфликтов автоинкремента, говорим серверу,
#чтобы id генерировались начиная с 2-го прибавляя по 2,
# например 13, 23, 33, 43...
auto_increment_increment = 2
auto_increment_offset = 2
 
#Сохранять логи с мастера в своий бин-лог, чтобы передать слейву
log-slave-updates
#log_slave_updates = 1

# Сколько дней хранить бин-логи
expire_logs_days = 7

# Максимальный размер бин-лога
max_binlog_size = 500M

# Адрес 2-го мастера
bind-address = 192.168.15.3

На данном этапе создаем папку и файлы, куда будут записываться логи):

# mkdir /var/log/mysql
# chown -R mysql. /var/log/mysql

Создаем пользователя для репликации

mysql> create user 'replica'@'%' identified by '%repl2021'; 
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to 'replica'@'%'; 
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit

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

Настройка репликации

На данном этапе мы настраиваем непосредственно репликацию. Запускаем репликацию на втором сервере (Master_2). Для того, чтобы это сделать нам необходимо узнать MASTER_LOG_FILE и MASTER_LOG_POS на первом сервере (Master_1).

Статус мастера на сервере Master_1

# mysql -u root -p -e 'show master status;'

Вывод команды:

+------------------+----------+--------------+---------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                            |
+------------------+----------+--------------+---------------------------------------------+
| mysql-bin.000002 |      107 |              | information_schema,mysql,performance_schema |
+------------------+----------+--------------+---------------------------------------------+
1 row in set (0.00 sec)

Обратим внимание, что MASTER_LOG_FILE это mysql-bin.000002, а MASTER_LOG_POS равен 107.

На втором сервере (Master_2) выполняем:

mysql> slave stop; 
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO MASTER_HOST = '192.168.15.2', MASTER_USER = 'replica', MASTER_PASSWORD = '%repl2021', MASTER_LOG_FILE = 'mysql-bin.000002', MASTER_LOG_POS = 107; 
Query OK, 0 rows affected (0.02 sec)

mysql> slave start;
Query OK, 0 rows affected (0.00 sec)

mysql>

Далее производим репликацию на 1-ом сервере. Для этого нужно посмотреть статус мастера на Master_2 сервере:

mysql> SHOW MASTER STATUS; 
+------------------+----------+--------------+---------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                            |
+------------------+----------+--------------+---------------------------------------------+
| mysql-bin.000002 |      106 |              | information_schema,mysql,performance_schema |
+------------------+----------+--------------+---------------------------------------------+
1 row in set (0.00 sec)

mysql>

Обратим внимание, что MASTER_LOG_FILE это mysql-bin.000002, а MASTER_LOG_POS равен 106.

На сервере Master_1 выполняем команду:

mysql> slave stop; 
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO MASTER_HOST = '192.168.15.3', MASTER_USER = 'replica', MASTER_PASSWORD = '%repl2021', MASTER_LOG_FILE = 'mysql-bin.000002', MASTER_LOG_POS = 106; 
Query OK, 0 rows affected (0.03 sec)

mysql> slave start;
Query OK, 0 rows affected (0.00 sec)

mysql>

После всех действий просматриваем статус слейва на всех мастер-серверах:

Master_1

mysql> show slave status G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.15.3
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 252
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: information_schema,mysql,performance_schema
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 408
              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: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 2
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql>

Master_2

mysql> show slave status G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.15.2
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 107
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 252
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: information_schema,mysql,performance_schema
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 107
              Relay_Log_Space: 407
              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: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql>

Кластер из двух мастер-серверов готов.

We have a mysql replication client running on our backup server. Since a power failure last week it’s stopped replicating. Before this it was running uninterrupted for several months.

I’ve tried restarting both the master and the slave but this hasn’t helped. I can access the master server from the slave, so the network isn’t the issue.

Is there anything else I can do to try diagnose what the problem is?

mysql> show slave statusG;
*************************** 1. row ***************************
             Slave_IO_State:
                Master_Host: master
                Master_User: username
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000060
        Read_Master_Log_Pos: 46277494
             Relay_Log_File: mysqld-relay-bin.000348
              Relay_Log_Pos: 98
      Relay_Master_Log_File: mysql-bin.000060
           Slave_IO_Running: No
          Slave_SQL_Running: Yes
            Replicate_Do_DB:
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 46277494
            Relay_Log_Space: 98
            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
1 row in set (0.00 sec)

ERROR:
No query specified


mysql> show master statusG;
*************************** 1. row ***************************
            File: mysql-bin.000069
        Position: 851796
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

ERROR:
No query specified

Update: The errors were going into daemon.log, not mysql.err, which would explain why I couldn’t find them. The problem seems to be that the master is saying the log is unavailable, which doesn’t make much sense, because that log (and the previous one) are still available on the master.

090710  9:17:35 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000060' at position 46277494, relay log './mysqld-relay-bin.000350' position: 98
090710  9:17:35 [Note] Slave I/O thread: connected to master 'username@master:3306',  replication started in log 'mysql-bin.000060' at position 46277494
090710  9:17:35 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236)
090710  9:17:35 [ERROR] Got fatal error 1236: 'Client requested master to start replication from impossible position' from master when reading data from binary log
090710  9:17:35 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.000060', position 46277494

Репликация в виде Master-Master  в MySQL используется распределения нагрузки на БД между нодами. С помощью репликации, 2 (и больше) отдельных MySQL серверов выступают в качестве кластера. Кластеризация базы данных особенно полезна для обеспечения высокой производительности. Используйте два и более выделенных серверов (нод) для настройки репликации базы данных ( но для этого нужно выделенные IPv4 адреса).

В mysql существует два типа репликации данных:

  1. Master-Slave
  2. Master-Master

При использовании репликации Master-Slave, на Master ноде данные поступают ( с ними можно выполнять любые операции (добавлять/удалять/изменять) и все изменения Slave нода будет забирать себе, но если на Slave ноде  вы выполните любой из запросов ( удаление, добавление или изменение), то данные не попадут на Master.

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

 Имеется: 

  • (Мастер 1) — Сервер с ОС Debian 8 — 192.168.13.147
  • (Мастер 2) — Сервер с ОС CentOS 7 -192.168.13.151

Взял специально 2 сервера с разными ОС для того чтобы показать что оно может работать корректно ( можно использовать не ограниченное количество нод, хоть 100 шт).

Репликация master-master в MYSQL

Данный процесс настройки master-master репликации поделен на 2 шага:

  • На 1-м шаге, организую master-slave репликацию, где главным будет master_1, а подчиненным будет master_2;
  • На 2-м шаге я организую обратную master-slave репликацию, и сервера начинают собирать информацию из логов друг друга.

Установка MYSQL в Unix/Linux

У меня имеется ряд статей по установке mysql на различные Unix/Linux ОС, по этому если кто-то не знает как установить, может воспользоваться следующими статьями:

Установка MySQL на Debian/Ubuntu/Linux Mint

Установка MySQL 5.5 на RHEL / CentOS и Fedora

Установка MySQL из портов во FreeBSD

Установка MariaDB 10 на CentOS 7

Установка MariaDB на Debian

Установка MariaDB 5.5 на RHEL / CentOS / Fedora Linux

Установка MariaDB в Ubuntu 12.04/12.10/13.04/13.10/14.04

Настройка репликации Master-Master на MySQL

И так, mysql установлен на всех серверах (у меня их 2, но можно подключить и больше) и следующим шагом нужно отредактировать my.cnf файл на каждой из нод.

На 1-м сервере с ОС Debian 8 (192.168.13.147):

# vim /etc/mysql/my.cnf

Вставляем:

[mysqld]
#Уникальный идентификатор сервера
server-id = 1
 
#Логи ошибок
log_error = /var/log/mysql/mysql.err
 
#Путь к bin-логам сервера(бинлог, который ведет мастер)
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
 
#Путь к relay-логам слейва (бинлог, скачанный с мастера)
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
 
#БД, которые нужно/не нужно реплицировать
#replicate-do-db = testdb
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
 
#Не вести журнал бин-лога для БД
binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
 
#Чтобы не было конфликтов автоинкремента, говорим серверу,
#чтобы id генерировались начиная с 1-го прибавляя по 2,
# например 13, 23, 33, 43...
auto_increment_increment = 2
auto_increment_offset = 1
 
#Сохранять логи с мастера в своий бин-лог, чтобы передать слейву
log-slave-updates
#log_slave_updates = 1

# Сколько дней хранить бин-логи
expire_logs_days = 7

# Максимальный размер бин-лога
max_binlog_size = 500M

# Адрес 1-го мастера
bind-address = 192.168.13.147

В моем конфиге будет реплицироваться все БД, но если хотите сделать репликацию только 1 базы данных — стоит раскомментировать «binlog_do_db» поле и указать в нем имя БД.

Создаем пользователя для репликации:

mysql> create user 'replica'@'%' identified by '%repl2017'; 
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to 'replica'@'%'; 
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye
[root@localhost captain]#

PS: Для более крутой безопасности, можно указать конкретно IP:

# create user 'replica'@'192.168.13.147' identified by '%repl2017'; 
# GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.13.147' IDENTIFIED BY '%repl2017';

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

# service mysql restart

Собственно, первый MASTER готов!

Смотрим статус мастера (данная информация понадобится немного позже):

mysql> show master status; 
+------------------+----------+--------------+---------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                            |
+------------------+----------+--------------+---------------------------------------------+
| mysql-bin.000002 |      107 |              | information_schema,mysql,performance_schema |
+------------------+----------+--------------+---------------------------------------------+
1 row in set (0.00 sec)

mysql> 

Вот.

На 2-м сервере с ОС CentOS 7 -192.168.13.151:

# vim /etc/my.cnf

Вставляем:

[mysqld]
#Уникальный идентификатор сервера
server-id = 2
 
#Логи ошибок
log_error = /var/log/mysql/mysql.err
 
#Путь к bin-логам сервера(бинлог, который ведет мастер)
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
 
#Путь к relay-логам слейва (бинлог, скачанный с мастера)
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
 
#БД, которые нужно/не нужно реплицировать
#replicate-do-db = testdb
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
 
#Не вести журнал бин-лога для БД
binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
 
#Чтобы не было конфликтов автоинкремента, говорим серверу,
#чтобы id генерировались начиная с 2-го прибавляя по 2,
# например 13, 23, 33, 43...
auto_increment_increment = 2
auto_increment_offset = 2
 
#Сохранять логи с мастера в своий бин-лог, чтобы передать слейву
log-slave-updates
#log_slave_updates = 1

# Сколько дней хранить бин-логи
expire_logs_days = 7

# Максимальный размер бин-лога
max_binlog_size = 500M

# Адрес 2-го мастера
bind-address = 192.168.13.151

Создаем папку и файлы ( в них будут писаться логи):

# mkdir /var/log/mysql
# chown -R mysql. /var/log/mysql

Создаем пользователя для репликации:

mysql> create user 'replica'@'%' identified by '%repl2017'; grant replication slave on *.* to 'replica'@'%'; flush privileges; exit

PS: Для более крутой безопасности, можно указать конкретно IP:

# create user 'replica'@'192.168.13.147' identified by '%repl2017'; 
# GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.13.147' IDENTIFIED BY '%repl2017';

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

# service mysqld restart

Идем дальше.

Настройка репликации

Сейчас нужно настроить саму репликацию. Для начала, запускаем репликацию на 2-м мастере, но чтобы сделать это, необходимо узнать «MASTER_LOG_FILE» и «MASTER_LOG_POS»  на 1-м мастере.

Смотрим статус мастера ( я выводил его выше) на 1-й ноде:

# mysql -u root -p -e 'show master status;'

Или:

mysql> show master status;

Вывод:

+------------------+----------+--------------+---------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                            |
+------------------+----------+--------------+---------------------------------------------+
| mysql-bin.000002 |      107 |              | information_schema,mysql,performance_schema |
+------------------+----------+--------------+---------------------------------------------+
1 row in set (0.00 sec)

Видим, что «MASTER_LOG_FILE = mysql-bin.000002, а «MASTER_LOG_POS» = 107.

На 2-й ноде выполняем:

mysql> slave stop; 
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO MASTER_HOST = '192.168.13.147', MASTER_USER = 'replica', MASTER_PASSWORD = '%repl2017', MASTER_LOG_FILE = 'mysql-bin.000002', MASTER_LOG_POS = 107; 
Query OK, 0 rows affected (0.02 sec)

mysql> slave start;
Query OK, 0 rows affected (0.00 sec)

mysql> 

Думаю что не стоит объяснять что и где нужно заменить — это интуитивно понятно.

Делаем репликацию на 1-м сервере, но для этого смотрим мастер статус на 2-м:

mysql> SHOW MASTER STATUS; 
+------------------+----------+--------------+---------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                            |
+------------------+----------+--------------+---------------------------------------------+
| mysql-bin.000002 |      106 |              | information_schema,mysql,performance_schema |
+------------------+----------+--------------+---------------------------------------------+
1 row in set (0.00 sec)

mysql> 

Видим, что «MASTER_LOG_FILE = mysql-bin.000002, а «MASTER_LOG_POS» = 106.

И на 1-м выполняем команду:

mysql> slave stop; 
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO MASTER_HOST = '192.168.13.151', MASTER_USER = 'replica', MASTER_PASSWORD = '%repl2017', MASTER_LOG_FILE = 'mysql-bin.000002', MASTER_LOG_POS = 106; 
Query OK, 0 rows affected (0.03 sec)

mysql> slave start;
Query OK, 0 rows affected (0.00 sec)

mysql> 

После чего, можно посмотреть статус слейва на всех мастерах.

МАСТЕР_1:

mysql> show slave status G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.13.151
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 252
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: information_schema,mysql,performance_schema
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 408
              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: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 2
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql>

МАСТЕР_2:

mysql> show slave status G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.13.147
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 107
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 252
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: information_schema,mysql,performance_schema
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 107
              Relay_Log_Space: 407
              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: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql> 

Если необходимо собрать кластер более чем 2 мастера, то необходимо соединять их постепенно и по цепочке. А сейчас, перейдем к тестированию созданного кластера.

Тестирования репликации master-master в mysql

Потестируем репликацию и убедимся что все хорошо работает.

На 1-м мастере я создам базу данных и таблицу:

mysql> create database master_1;
Query OK, 1 row affected (0.00 sec)

mysql> create table master_1.flowers (`id` varchar(10));
Query OK, 0 rows affected (0.01 sec)

mysql>

На мастере 2 смотрю что получилось:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| master_1 |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)

mysql> show tables in master_1
 -> ;
+--------------------+
| Tables_in_master_1 |
+--------------------+
| flowers |
+--------------------+
1 row in set (0.00 sec)

mysql>

Видно что репликация работает и все данные реплицировало на 2-й мастер с 1-го. Переходим тестировать мастер 2, для этого, я создаю на нем же БД и таблицу:

mysql> create database master_2;
Query OK, 1 row affected (0.00 sec)

mysql> create table master_2.flowers (`id` varchar(10));
Query OK, 0 rows affected (0.00 sec)

mysql> 

И на 1-м выполняю команду:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| master_1 |
| master_2 |
| mysql |
| performance_schema |
+--------------------+
5 rows in set (0.01 sec)

mysql> show tables in master_2;
+--------------------+
| Tables_in_master_2 |
+--------------------+
| flowers |
+--------------------+
1 row in set (0.00 sec)

mysql>

Видим что все работает должным образом и настройка репликации Master-Master на MySQL завершена!

Понравилась статья? Поделить с друзьями:
  • Show port error disabled
  • Show mysql connection error
  • Show error ports fragment
  • Show error laravel
  • Shot atomizer как исправить ошибку на вейпе