Настройка репликации MySQL с мастер-хоста на слейв-хост
В интернете есть множество статей, как это сделать. Так же есть официальный мануал по настройке репликации.
Сделал все как там написано. В итоге имею мастер хост с такими настройками: Код:
[mysqld] Код:
[mysqld] mysql> show master status; +--------------------+-----------+-------------------+-----------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+-----------+-------------------+-----------------------+ | host-bin.000001 | 436849134 | | | +--------------------+-----------+--------------+------------------+ 1 row in set (0.00 sec) На слейве: show slave status; Slave_IO_State Waiting for master to send event Master_Host 192.168.4.1 Master_User Replicator Master_Port 3306 Connect_Retry 60 Master_Log_File host-bin.000001 Read_Master_Log_Pos 436871384 Relay_Log_File host-relay-bin.000010 Relay_Log_Pos 1040597 Relay_Master_Log_File host-bin.000001 Slave_IO_Running Yes Slave_SQL_Running Yes Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table 0 Last_Errno Last_Error 0 Skip_Counter 436871384 Exec_Master_Log_Pos 1040597 Relay_Log_Space None Until_Condition Until_Log_File 0 Until_Log_Pos No Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master 0 На слейве: load data from master; Query OK, 0 rows affected, 1 warning (5.10 sec) Собственно вопросы: 1. Вижу по размерам БД то, что они не соответствуют друг другу. Значит репликация не работает. 2. Где взять более подробное описание настройки репликации? Как я понимаю команда SLAVE START, стартует запись в двоичный журнал. А команда load data from master, уже реплицирует данные. Причем при старте самой репликации таблицы мастер хоста блокируются. 3. Почему в моем случае, команда load data from master не выполняет своих действий так, как должна? |
Цитата:
Цитата:
А вообще пакеты идут к мастеру? Точнее, от мастера к слейву? У меня есть подозрения, что файерволл блокирует-с... Цитата:
opennet |
dmitryst
Собственно в логах слейва вижу это: file host.local.err: Код:
070814 11:21:45 mysqld started Код:
... Интересен момент: автоматически сервер MySQL может реплицировать данные, без ручной команды load data from master? Возможно эффект load data from master; Query OK, 0 rows affected, 1 warning (5.10 sec) зависит от активности БД? |
Цитата:
Чтобы включить репликацию достаточно стартонуть мастер, а потом слейв. Самое важное: перед началом репликации базы данных должны быть абсолютно одинаковы! И схема базы и данные должны быть одинаковы. Сделайте копию базы с мастера, запишите данную копию на слейв и только тогда стартуйте репликацию. Ещё из личного опыта: не реплицируйте все базы данных - особенно нельзя реплицировать системную базу данных, а то там начнётся проблемы с созданием юзеров и тд. Для ограничения репликации по базам данных используйте HTML код:
--replicate-do-db=dbwiki Пара ссылок: Команды и настрйка Репликации Команды Репликации Статья Потестируйте сначало на тестовых баз данных, потом переходите на продуктивную |
Negativ, я бы залил на мастер таблицы со слейва, якобы реплицированные ночью. Ну и сравнил бы.
Цитата:
|
Negativ,
Coветую из лчного опыта - сделайте полный Reset и начните заново - только базы данных подготовьте |
dmitryst
приходила такая мысль в голову, но т.к. рабочая БД постоянно меняется проверить идентичность практически нереально. Цитата:
position 441295868 Я вот только догадываться могу, что это за позиция и где она вообще. :dont-know |
Negativ, а если на доп. компе по-быстренькому сделать имитацию? Базы, конечно ,не нужно реальные, можно просто какой-нибудь тестовой чепухой забить, и время от времени менять. Ручками. И контролировать слейв.
|
Цитата:
|
Цитата:
Эта команда затирает все логи и все ошибки. При проблемах я ей всегда пользуюсь. Когда возникают ошибки и репликация падает, я останавливаю репликацию, использую RESET, привожу базы данных на один уровень и запускаю репликацию. Ошибки у меня возникали только в начале - потом когда всё понял и настроил, вообще проблем не возникает. Уже полгода даже не притрагивался к репликации. У меня к тому же двухсторонняя репликация работает: то есть оба сервера обнавляют друг друга |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Впал в очередной ступор:
Код:
mysql> show slave status; Кстати таблица 'v' не существует ни на мастере ни на слейве. |
Цитата:
Цитата:
|
vadimiron,
Еще вопрос. Когда мне надо сделать бекап баз со слейва, мне надо делать SLAVE STOP? |
Negativ,
Желательно. А то вдруг база находится в процесее апдейта и часть данных запищется а бекап, а другая нет. |
Обнаружил оглядываясь на тему http://forum.oszone.net/thread-89466.html , что есть проблемка в разрастании бинарных файлов журналов. На данный момент их уже 5. В индексном файле base-bin.index на мастере содержатся ссылки на активные бинарные файлы журналов, т.е. те которые используются в репликации (по крайней мере так сказано в хелпе).
Вопрос: как узнать, используются ли старые бинарные журналы при репликации? |
Negativ,
Активно пишется, наверно, только текущий файл - все остальные просто в качестве архива лежат. Если вдруг появится вообще нулевой слейв, то ему можно будет всё скопировать, начиная с первой команды первого файла лога - для этого они и нужны. 100% гарантии не даю Хотя "надеятся" на старые файлы лога не стоит - лучше скопировать текущее состояние базы и начать репликацию с момента данного состояния - по такой логике нужен только один, то есть текущий файл |
vadimiron,
Как я понимаю сейчас можно на мастере поправить индексный файл в котором оставить только ссылку на последний бинарник и удалить лишние файлы журналов? |
Negativ,
Я так никогда не делал, но возможно сработает (главное не забыть всё забэкапить :)). В любом случае для такой операции надо сервак остановить, а то индексный файл используется и сервак може с ума сайти, если файл поправлять, когда сервер работает |
Ребят, нужно автоматом получить значение masterlogpos, как сделать ?
|
Время: 00:19. |
Время: 00:19.
© OSzone.net 2001-