Mysql master log pos меняется во время глобальной блокировки?

0

Мне нужно настроить новую репликацию mysql, реплицируя две базы данных. Поэтому у меня есть этот script, который блокирует таблицы, создает дамп и разблокирует их.

runme.sh

mysql -uxxx -pxxx < 1.sql >> logpos.txt
mysqldump -uXXX -pXXX db1 > db1.sql
mysqldump -uXXX -pXXX db2 > db2.sql
mysql -uxxx -pxxx < 2.sql >> logpos.txt

первый sql файл блокирует таблицы и экспортирует статус мастера:

1.sql

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

второй файл экспортирует статус мастера и разблокирует таблицы

2.sql

SHOW MASTER STATUS;
UNLOCK TABLES;

результат выглядит следующим образом:

logpos.txt

File    Position        Binlog_Do_DB    Binlog_Ignore_DB
mysql-bin.000335        49106285        fli_search,flimmit
File    Position        Binlog_Do_DB    Binlog_Ignore_DB
mysql-bin.000335        49139991        fli_search,flimmit

Вопрос: Как изменить положение журнала, когда таблицы заблокированы?

Server version:  5.0.51a-24+lenny4-log (Debian)

Я мог бы делать mysqldump для нескольких баз данных и добавлять -master-данные, но я почему-то чувствовал себя небезопасно, потому что есть разные форматы базы данных, и я не мог действительно узнать, как ведут себя данные mysqldump -master с несколькими базами данных. Итак, у меня был этот script и у меня разные позиции в журналах.... любая идея почему? Я не могу использовать это для настройки репликации...

UPDATE:

Наконец-то я решил настроить репликацию с помощью mysqldump --master-data --databases db1 db2 свалка была создана сегодня вечером в 1 час ночи. сегодня около 10 часов я установил подчиненный. я полностью очистил базы данных (сбросил все таблицы) и импортировал дамп, который автоматически устанавливает файл главного журнала и лог файл правильно. я проверил, что это то же самое, что и в дампе sql. все выглядело хорошо. конечно, я остановил подчиненное устройство перед импортом (в противном случае я не смог бы импортировать дамп с мастером изменения в оператор в настоящее время). Я начал раб, и эвейр выглядел просто отлично. лог pos увеличился, секунды за мастером уменьшились и пошли на 0, и некоторые тестовые данные были реплицированы правильно.

но основное обновление с сегодняшнего дня ~ 7 утра (временное окно между созданием дампа и импортом) просто отсутствовало. он обрезал старые записи со стола, на рабыне они все еще присутствовали... любая идея, почему?

любая дополнительная информация нужна? комментарий...

Теги:
replication
locking

3 ответа

0
Лучший ответ

выглядит так же, как и мне:

FLUSH TABLES WITH WRITE LOCK;

переключатель основных данных кажется неосуществимым...

1

Если вы хотите увидеть, что было записано в двоичном журнале в промежутке между этими двумя значениями позиции, вы можете использовать инструмент mysqlbinlog для преобразования соответствующих записей двоичного журнала в SQL. Просто используйте первый pos в качестве начальной позиции, а второй pos + 1 - как стоп-положение. Таким образом вы увидите все события, которые произошли после FLUSH (он также покажет вам последнее событие, которое произошло до флеша, поэтому просто игнорируйте первое событие).

Используя ваш пример:

mysqlbinlog --start-position=49106286 --stop-position=49139992 mysql-bin.000335
  • 0
    привет спасибо за подсказку я знаю об этом инструменте, но еще не получил идею взглянуть на эту конкретную часть. хорошо там много! вставить, обновить заявления ... но во время блокировки веб-сайт был недоступен, что странно!
0

Причина, по которой вы видели изменения, - это блокировка, которая выйдет, как только выйдет первый script. Из руководства :

Предупреждение. Оставьте клиент, из которого вы выставляете оператор FLUSH TABLES, чтобы он оставался в силе. Если вы выйдете из клиента, блокировка будет отпущена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню