Size: a a a

2020 July 06

NI

Nickolay Ihalainen in ru_mysql
select NOW() - INTERVAL cast(month as char) MONTH from t1;
источник

NI

Nickolay Ihalainen in ru_mysql
MySQL [test]> select month+0 from t1;
+-----------+
| month+0 |
+-----------+
|         3 |
+-----------+
1 row in set (0.001 sec)

MySQL [test]> select * from t1;
+-------+
| month |
+-------+
| 6     |
источник

NI

Nickolay Ihalainen in ru_mysql
enum это числа внутри mysql. 1 = '1', 2 = '3', 3 = '6'
источник

F=

FAST =) in ru_mysql
Как такое обойти ?
источник

F=

FAST =) in ru_mysql
Nickolay Ihalainen
enum это числа внутри mysql. 1 = '1', 2 = '3', 3 = '6'
или лучше другой тип данных использовать ?
источник

NI

Nickolay Ihalainen in ru_mysql
каст работает: '6' enum преобразовывается в '6' строка, '6' строка неявно (хотя можно и cast запилить) преобразовывается в число
источник

NI

Nickolay Ihalainen in ru_mysql
MySQL [test]> select month+0 from t1;
+-----------+
| month+0 |
+-----------+
|         3 |
|         4 |
+-----------+
2 rows in set (0.001 sec)

MySQL [test]> select cast(month as char)+0 from t1;
+-------------------------+
| cast(month as char)+0 |
+-------------------------+
|                       6 |
|                      12 |
источник

F=

FAST =) in ru_mysql
Nickolay Ihalainen
каст работает: '6' enum преобразовывается в '6' строка, '6' строка неявно (хотя можно и cast запилить) преобразовывается в число
Все понял, спасибо большое!!!
источник

В

Вячеслав in ru_mysql
Nickolay Ihalainen
У каждого сервера есть уникальный идентификатор, который задаётся через файл auto.cnf в datadir. Каждая транзакция при коммите получает GTID. GTID это UUID сервера + счётчик на этом сервере (без пропусков). Состояние сервера (слепок какие значения у полей строк) это функция от набора чисел (UUID1,seqno1);..;(UUIDN,seqnoN). Когда сервер выполняет свой запрос у него увеличивается свой seqno, когда исполняется запрос по репликации или востанавливаем весь сервер из бекапа, в наборе gtid появляется UUID мастера и изменяется номер того сервера. После выполнения транзакции сервер обновляет GTID и сохраняет его в gtid_executed. Кроме gtid executed ещё надо поддерживать gtid_purged: набор gtid в котором видно какие транзакции исполнены - это транзакции которые исполнили, но в бинарном логе сервера их уже нет (или бинарный лог был уже удалён, или мы из бекапа получили).

Каждый сервер, который присоединяется как слейв может попросить бинарные логи для своей gtid_executed (которая на старте получается из gtid_purged). Таким образом бинарные логи могут храниться в файлах с любым названием и любыми смещениями по-байтовыми в файле, но слейв всё равно находит свою позицию.
Добрый день. Помогите решить проблему с репликацией. Для того, чтобы был точный порядок действий - я запилил скрипт, с помощью которого можно легко проявить эту проблему.
источник

В

Вячеслав in ru_mysql
Имеется 2 хоста с mysql Ver 8.0.19 (Percona Server) со включенным GTID и Loss-less Semi-Synchronous Replication, далее проделываются шаги:

имена хостов m1 и m2

Сброс обеих хостов в начальное состояние

Настраиваем репликацию m1 --> m2

Создаем базу данных test_database и в ней таблицу test_table

Записываем строки 1-10 в таблицу test_table на хосте m1

Ждем пока Seconds_Behind_Master будет равен 0

Делаем дамп с хоста m2

Записываем строки 11-20 в таблицу test_table на хосте m1

Сверяем таблицу на обеих хостах - все ок

Делаем из m2 ведомый хост репликации

Записываем строки 21-30 в таблицу test_table на хосте m2

Делаем из m1 реплику (m2 --> m1), используя созданый дамп

Записываем строки 31-40 в таблицу test_table на хосте m2

Ждем пока Seconds_Behind_Master будет равен 0

Сверяем таблицу на обеих хостах


Суть проблемы:
строки 11-20 в таблице test_table на хосте m1 не подтянутся по репликации m2 --> m1 и будут отсутствовать, в отличие от хоста m2
источник

NI

Nickolay Ihalainen in ru_mysql
Вячеслав
Добрый день. Помогите решить проблему с репликацией. Для того, чтобы был точный порядок действий - я запилил скрипт, с помощью которого можно легко проявить эту проблему.
если m2 это слейв, то для смены ролей не надо дампы делать: stop slave, reset slave all, и на старом мастере change master ... master_autoposition=1
источник

В

Вячеслав in ru_mysql
Nickolay Ihalainen
если m2 это слейв, то для смены ролей не надо дампы делать: stop slave, reset slave all, и на старом мастере change master ... master_autoposition=1
Задача состоит не в том, чтобы просто сменить роли, а в создании high availability решения. Смена роли — это следствие падения первого мастера. На слейве будет производиться регулярный бекап. Слейв автоматически будет продвинут в нового мастера. А старый мастер, когда-нибудь потом должен быть восстановлен из бекапа и превращен в слейв к новому мастеру.
источник

В

Вячеслав in ru_mysql
Вячеслав
Имеется 2 хоста с mysql Ver 8.0.19 (Percona Server) со включенным GTID и Loss-less Semi-Synchronous Replication, далее проделываются шаги:

имена хостов m1 и m2

Сброс обеих хостов в начальное состояние

Настраиваем репликацию m1 --> m2

Создаем базу данных test_database и в ней таблицу test_table

Записываем строки 1-10 в таблицу test_table на хосте m1

Ждем пока Seconds_Behind_Master будет равен 0

Делаем дамп с хоста m2

Записываем строки 11-20 в таблицу test_table на хосте m1

Сверяем таблицу на обеих хостах - все ок

Делаем из m2 ведомый хост репликации

Записываем строки 21-30 в таблицу test_table на хосте m2

Делаем из m1 реплику (m2 --> m1), используя созданый дамп

Записываем строки 31-40 в таблицу test_table на хосте m2

Ждем пока Seconds_Behind_Master будет равен 0

Сверяем таблицу на обеих хостах


Суть проблемы:
строки 11-20 в таблице test_table на хосте m1 не подтянутся по репликации m2 --> m1 и будут отсутствовать, в отличие от хоста m2
но эта 👆 проблема все испортила. Помогите ее решить, пожалуйста.
источник

NI

Nickolay Ihalainen in ru_mysql
как делается дамп, что показывал show master status и show slave status перед каждым действием?
источник

В

Вячеслав in ru_mysql
Nickolay Ihalainen
как делается дамп, что показывал show master status и show slave status перед каждым действием?
"как делается дамп"

${MSQL} -h"${m2}" -e "STOP SLAVE;"

${MSQLDMP} -h"${m2}" \
 --all-databases --triggers --routines --events \
 --set-gtid-purged=ON \
 --lock-all-tables \
 | gzip > "/root/backup_file.sql.gz"


в скрипте, который выше, можно прочесть подробнее
источник

NI

Nickolay Ihalainen in ru_mysql
а где reset master перед заливкой?\
источник

В

Вячеслав in ru_mysql
Nickolay Ihalainen
а где reset master перед заливкой?\
есть он там:

${MSQL} -h"${m1}" -e "RESET MASTER;"
zcat "/root/backup_file.sql.gz" | ${MSQL} -h"${m1}"
источник

В

Вячеслав in ru_mysql
Nickolay Ihalainen
как делается дамп, что показывал show master status и show slave status перед каждым действием?
show master status и show slave status перед каждым действием

сейчас отправлю...
источник

MF

Max Fedotov in ru_mysql
а что в дампе в set global gtid_purged?
источник

В

Вячеслав in ru_mysql
Max Fedotov
а что в дампе в set global gtid_purged?
то же что и в gtid_executed у мастера
источник