Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Настройка репликации MySQL с мастер-хоста на слейв-хост

Ответить
Настройки темы
MySQL - Настройка репликации MySQL с мастер-хоста на слейв-хост

Аватара для Negativ

Ветеран


Сообщения: 1051
Благодарности: 42

Профиль | Отправить PM | Цитировать


В интернете есть множество статей, как это сделать. Так же есть официальный мануал по настройке репликации.
Сделал все как там написано.
В итоге имею мастер хост с такими настройками:
Код: Выделить весь код
[mysqld]
log-bin
server-id=1
character_set_server=cp1251
default-character-set=cp1251
init-connect="SET NAMES cp1251"
И слейв хост:
Код: Выделить весь код
[mysqld]
master-host=192.168.4.1
master-user=replicator
master-password=пароль
master-port=3306
server-id=2
#log-bin = /var/log/mysql/bin.log
#log-bin-index = /var/log/mysql/log-bin.index
log-error = /var/log/mysql/error.log

#relay-log = /var/log/mysql/relay.log
#relay-log-info-file = /var/log/mysql/relay-log.info
#relay-log-index = /var/log/mysql/relay-log.index

character_set_server=cp1251
default-character-set=cp1251
init-connect="SET NAMES cp1251"
На Мастере:
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 не выполняет своих действий так, как должна?

-------
В некоторые головы мысли приходят умирать


Отправлено: 11:11, 14-08-2007

 

Аватара для dmitryst

Ветеран


Сообщения: 7237
Благодарности: 899

Профиль | Отправить PM | Цитировать


Цитата Negativ:
1. Вижу по размерам БД то, что они не соответствуют друг другу. Значит репликация не работает.
не работает

Цитата:
Query OK, 0 rows affected, 1 warning
- т.е. ничего не изменено.
А вообще пакеты идут к мастеру? Точнее, от мастера к слейву? У меня есть подозрения, что файерволл блокирует-с...

Цитата Negativ:
2. Где взять более подробное описание настройки репликации?
-вроде, только в мане по mySQL. Кое-что есть на
opennet

-------
Осваиваю FreeBSD


Отправлено: 11:53, 14-08-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Negativ

Ветеран


Сообщения: 1051
Благодарности: 42

Профиль | Отправить PM | Цитировать


dmitryst
Собственно в логах слейва вижу это:
file host.local.err:
Код: Выделить весь код
070814 11:21:45  mysqld started
070814 11:21:45  InnoDB: Started; log sequence number 0 43655
070814 11:21:45 [Warning] Neither --relay-log nor --relay-log-index were used; s
o replication may break when this MySQL server acts as a slave and has his hostn
ame changed!! Please use '--relay-log=host-relay-bin' to avoid this problem.
070814 11:21:45 [Note] /usr/local/libexec/mysqld: ready for connections.
Version: '5.0.27'  socket: '/tmp/mysql.sock'  port: 3306  FreeBSD port: mysql-se
rver-5.0.27
070814 11:21:45 [Note] Slave SQL thread initialized, starting replication in log
 'host-bin.000001' at position 441269501, relay log './host-relay-bin.0000
02' position: 4363820
070814 11:21:50 [Note] Slave I/O thread: connected to master 'replicator@192.168.4.1
1:3306',  replication started in log 'host-bin.000001' at position 441269501
070814 11:24:27 [Note] Slave I/O thread killed while reading event
070814 11:24:27 [Note] Slave I/O thread exiting, read up to log 'host-bin.000
001', position 441295868
070814 11:24:27 [Note] Error reading relay log event: slave SQL thread was kille
d
070814 11:24:32 [Note] Slave SQL thread initialized, starting replication in log
 'host-bin.000001' at position 441295868, relay log './host-relay-bin.0000
01' position: 4
070814 11:24:37 [Note] Slave I/O thread: connected to master 'replicator@192.168.4.1
1:3306',  replication started in log 'host-bin.000001' at position 441295868
Но! Вижу в каталоге БД на слейве (пример):
Код: Выделить весь код
...
-rw-rw----  1 mysql    mysql       3040 Aug 13 02:09 property_definitions.MYD 
-rw-rw----  1 mysql    mysql      10240 Aug 13 02:09 property_definitions.MYI 
-rw-rw----  1 mysql    mysql       8764 Aug 13 02:09 property_definitions.frm
-rw-rw----  1 mysql    mysql      22360 Aug 13 02:09 property_values.MYD 
-rw-rw----  1 mysql    mysql      45056 Aug 13 02:09 property_values.MYI 
-rw-rw----  1 mysql    mysql       8634 Aug 13 02:09 property_values.frm
...
А это говорит о том, что файлы переписывались ночью. Приходит в голову мысль, что возможно репликация проходит нормально, а разница в размерах БД связана с ростом таблиц во время дневной активности. Ночью же просиходит оптимизация таблиц скриптами.
Интересен момент: автоматически сервер MySQL может реплицировать данные, без ручной команды load data from master? Возможно эффект
load data from master;
Query OK, 0 rows affected, 1 warning (5.10 sec)
зависит от активности БД?

-------
В некоторые головы мысли приходят умирать


Отправлено: 12:09, 14-08-2007 | #3


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата Negativ:
load data from master;
Данная команда выполняется всего один раз при первичной загрузке данных с мастера.
Чтобы включить репликацию достаточно стартонуть мастер, а потом слейв.

Самое важное: перед началом репликации базы данных должны быть абсолютно одинаковы! И схема базы и данные должны быть одинаковы.

Сделайте копию базы с мастера, запишите данную копию на слейв и только тогда стартуйте репликацию.

Ещё из личного опыта: не реплицируйте все базы данных - особенно нельзя реплицировать системную базу данных, а то там начнётся проблемы с созданием юзеров и тд.
Для ограничения репликации по базам данных используйте
HTML код: Выделить весь код
--replicate-do-db=dbwiki --replicate-wild-ignore-table=mysql%


Пара ссылок:
Команды и настрйка Репликации
Команды Репликации
Статья

Потестируйте сначало на тестовых баз данных, потом переходите на продуктивную

-------
Fortes fortuna adiuvat

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:17, 14-08-2007 | #4


Аватара для dmitryst

Ветеран


Сообщения: 7237
Благодарности: 899

Профиль | Отправить PM | Цитировать


Negativ, я бы залил на мастер таблицы со слейва, якобы реплицированные ночью. Ну и сравнил бы.
Цитата Negativ:
070814 11:21:50 [Note] Slave I/O thread: connected to master 'replicator@192.168.4.1 1:3306', replication started in log 'host-bin.000001' at position 441269501 070814 11:24:27 [Note] Slave I/O thread killed while reading event 070814 11:24:27 [Note] Slave I/O thread exiting, read up to log 'host-bin.000 001', position 441295868
а что там на этой позиции?

-------
Осваиваю FreeBSD


Последний раз редактировалось dmitryst, 14-08-2007 в 12:56. Причина: АшЫпка :(


Отправлено: 12:26, 14-08-2007 | #5


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Negativ,
Coветую из лчного опыта - сделайте полный Reset и начните заново - только базы данных подготовьте

-------
Fortes fortuna adiuvat


Отправлено: 12:36, 14-08-2007 | #6


Аватара для Negativ

Ветеран


Сообщения: 1051
Благодарности: 42

Профиль | Отправить PM | Цитировать


dmitryst
приходила такая мысль в голову, но т.к. рабочая БД постоянно меняется проверить идентичность практически нереально.

Цитата vadimiron:
Coветую из лчного опыта - сделайте полный Reset и начните заново - только базы данных подготовьте
Под reset'ом Вы понимаете снос БД со слейва, удаление всех лог файлов как с мастера так и со слейва. Потом снова копирование БД с мастера на слейв. Так?

position 441295868
Я вот только догадываться могу, что это за позиция и где она вообще.

-------
В некоторые головы мысли приходят умирать


Отправлено: 12:53, 14-08-2007 | #7


Аватара для dmitryst

Ветеран


Сообщения: 7237
Благодарности: 899

Профиль | Отправить PM | Цитировать


Negativ, а если на доп. компе по-быстренькому сделать имитацию? Базы, конечно ,не нужно реальные, можно просто какой-нибудь тестовой чепухой забить, и время от времени менять. Ручками. И контролировать слейв.

-------
Осваиваю FreeBSD


Отправлено: 12:58, 14-08-2007 | #8


Аватара для Negativ

Ветеран


Сообщения: 1051
Благодарности: 42

Профиль | Отправить PM | Цитировать


Цитата vadimiron:
Для ограничения репликации по базам данных используйте
HTML код:
--replicate-do-db=dbwiki
--replicate-wild-ignore-table=mysql%
Эти строчки как я понимаю нужно в my.conf на слейве внести?

-------
В некоторые головы мысли приходят умирать


Отправлено: 13:06, 14-08-2007 | #9


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата Negativ:
Под reset'ом Вы понимаете снос БД со слейва, удаление всех лог файлов как с мастера так и со слейва. Потом снова копирование БД с мастера на слейв. Так? >>>
Нет, есть спец команда для этого: RESET SLAVE, RESET MASTER
Эта команда затирает все логи и все ошибки. При проблемах я ей всегда пользуюсь. Когда возникают ошибки и репликация падает, я останавливаю репликацию, использую RESET, привожу базы данных на один уровень и запускаю репликацию.

Ошибки у меня возникали только в начале - потом когда всё понял и настроил, вообще проблем не возникает. Уже полгода даже не притрагивался к репликации.
У меня к тому же двухсторонняя репликация работает: то есть оба сервера обнавляют друг друга

-------
Fortes fortuna adiuvat

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:09, 14-08-2007 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Настройка репликации MySQL с мастер-хоста на слейв-хост

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Apache [Настройка виртуального хоста] fast_info Вебмастеру 3 07-10-2008 14:59
MySQL - [решено] Mysql не может резолвить имя хоста Filariel Программирование и базы данных 4 04-10-2006 13:52
Настройка MySQL с русскими шрифтами? m2001 Вебмастеру 3 07-04-2005 13:19
MySQL настройка, помогите? Guest Вебмастеру 16 19-10-2004 10:31
Закачка на хост MySQL базы Terabyte Вебмастеру 1 31-01-2003 16:10




 
Переход