Мне нужно настроить новую репликацию 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 утра (временное окно между созданием дампа и импортом) просто отсутствовало. он обрезал старые записи со стола, на рабыне они все еще присутствовали... любая идея, почему?
любая дополнительная информация нужна? комментарий...
выглядит так же, как и мне:
FLUSH TABLES WITH WRITE LOCK;
переключатель основных данных кажется неосуществимым...
Если вы хотите увидеть, что было записано в двоичном журнале в промежутке между этими двумя значениями позиции, вы можете использовать инструмент mysqlbinlog для преобразования соответствующих записей двоичного журнала в SQL. Просто используйте первый pos в качестве начальной позиции, а второй pos + 1 - как стоп-положение. Таким образом вы увидите все события, которые произошли после FLUSH (он также покажет вам последнее событие, которое произошло до флеша, поэтому просто игнорируйте первое событие).
Используя ваш пример:
mysqlbinlog --start-position=49106286 --stop-position=49139992 mysql-bin.000335
Причина, по которой вы видели изменения, - это блокировка, которая выйдет, как только выйдет первый script. Из руководства :
Предупреждение. Оставьте клиент, из которого вы выставляете оператор FLUSH TABLES, чтобы он оставался в силе. Если вы выйдете из клиента, блокировка будет отпущена.