2008-10-22 5 views
9

В настоящее время я работаю в компании, на которой работает сайт mysql/php (все таблицы также используют тип таблицы MYISAM).mysql replication - блокировка таблицы?

Мы хотели бы реализовать репликацию, но я прочитал в документах mysql и в других местах в Интернете, что это заблокирует таблицы при выполнении записи в двоичный журнал (который в конечном счете будет читать ведомый dbs).

Будут ли эти блокировки вызывать проблемы на живом сайте, который достаточно тяжелый для записи? Кроме того, есть ли способ включить репликацию без необходимости блокировки таблиц?

ответ

6

Если вы меняете типы таблиц на innodb, используется блокировка уровня строки. Кроме того, ваша репликация будет более стабильной, так как обновления будут транзакционными. Репликация MyISAM - это долговременная боль.

Убедитесь, что ваши серверы соответствуют версиям, и ВСЕГДА обязательно выключите мастер, прежде чем отключать ведомые устройства. Вы можете снова запустить мастера сразу после закрытия рабов, но вам придется снять его.

Кроме того, убедитесь, что вы используете соответствующие опции авторасширения для InnoDB. И, пока вы на нем, вы, вероятно, захотите перейти от float и double к «decimal» (что означает mysql 5.1). Это избавит вас от некоторых головных болей репликации.

Это, вероятно, немного больше, чем вы просили. Наслаждаться.

P.s., да, замки myisam могут вызвать проблемы. Кроме того, innodb медленнее, чем myisam, если myisam не блокирует огромный выбор.

+0

О, может быть какой-то SQL, который вы можете выполнить, чтобы отключить репликацию на ведущем устройстве, а затем опросить состояние на ведомых устройствах до тех пор, пока они не догонят, а затем выключите их. – Chris 2008-10-23 06:47:45

0

Решение с типом таблицы myisam не является «лучшим». Однако вы можете справиться с этим.

Лучшее, что вы можете сделать, это убедиться, что ваш ведомый и ведущий работают на одном оборудовании (различия в FPU могут создавать ошибки репликации), а также убедитесь, что вы используете те же номера версий на ваших серверах MySQL.

Следующая информация отвечает на ваши вопросы. В частности, блокировки в таблицах MyISAM имеют меньше шансов блокировать записи, если никаких удалений не происходит. Таким образом, таблица, в которой нет дыр для удаления, будет работать быстрее в реплицированной установке.

http://dev.mysql.com/doc/refman/5.1/en/internal-locking.html

Вы можете уменьшить эффект «дырок» по имеют DBA экспорт/импорт периодически во время плановых простоев (особенно после массового удаления.) Кроме того, убедитесь, что ваши подчиненные базы данных не идут вниз с мастер все еще работает. Это избавит вас от многих, многих проблем.

+0

На самом деле, ошибки репликации разностей FPU могут возникать и с innodb, любой столбец таблицы, который использует float или double. Точная ошибка, которую вы увидите (один раз в тысячи раз), является ошибкой разности ширины столбца. – Chris 2008-10-24 02:47:56

4

По моему опыту DBAing на тяжелом для записи месте, запись двоичного журнала добавляет никаких заметных проблем с блокировкой или производительностью на хозяине. Если вы хотите сравнить его, просто включите двоичный журнал. Я действительно не думаю, что таблицы заблокированы для записи запросов в двоичный журнал.

Стол блокировки на раб это совсем другое. Репликация является последовательной: каждый запрос заканчивается до того, как подчиненный запускает следующий. Длительные обновления заставят репликацию временно отстать. Если ваше приложение намерено использовать репликацию для масштабирования, оно должно знать, как это соотнести.

Смежные вопросы