Настройка очень проста и понятна. Это пара серверов Debian с гигабитным соединением между ними. MySQL - это стабильная версия Debian Lenny, а ОС - Debian Lenny.
Дамп был вставлен на оба узла, и была активирована репликация.
Команды "SHOW MASTER STATUS" на главном устройстве предоставляют следующую информацию:
+------------------+----------+--------------------------------------------------------------------------------------------------------------------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------------------------------------------------------------------------------------------------------------------------+------------------+
| mysql-bin.000025 | 98 | smc, smc_allais, smc_montgenevre, smc_preprod, smc_resto, smc_resto, smc_richermoz, smc_sct, smc_skd, smc_skishop, smc_skiteam | |
+------------------+----------+--------------------------------------------------------------------------------------------------------------------------------+------------------+
Команда "SHOW SLAVE STATUS" на ведомом дает следующую информацию:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 188.165.xxx.xxx
Master_User: bdd1
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000025
Read_Master_Log_Pos: 98
Relay_Log_File: mysqld-relay-bin.000003
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000025
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: smc, smc_allais, smc_montgenevre, smc_preprod, smc_resto, smc_resto, smc_richermoz, smc_sct, smc_skd, smc_skishop, smc_skiteam
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 235
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: Yes
Master_SSL_CA_File: /etc/mysql/ca-cert.pem
Master_SSL_CA_Path:
Master_SSL_Cert: /etc/mysql/client-cert.pem
Master_SSL_Cipher:
Master_SSL_Key: /etc/mysql/client-key.pem
Seconds_Behind_Master: 0
Команда "SHOW PROCESSLIST" подчиненного устройства дает следующую информацию:
+-----+-------------+-----------+-------------+---------+------+-----------------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+-------------+-----------+-------------+---------+------+-----------------------------------------------------------------------+------------------+
| 366 | root | localhost | smc_preprod | Query | 0 | NULL | show processlist |
| 369 | system user | | NULL | Connect | 1097 | Waiting for master to send event | NULL |
| 370 | system user | | NULL | Connect | 1096 | Has read all relay log; waiting for the slave I/O thread to update it | NULL |
+-----+-------------+-----------+-------------+---------+------+-----------------------------------------------------------------------+------------------+
"SHOW PROCESSLIST" на мастере дает следующую информацию:
+-----+------+----------------------+-------------+-------------+------+----------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+----------------------+-------------+-------------+------+----------------------------------------------------------------+------------------+
| 410 | user | 91.121.xx.xx:45479 | smc_allais | Sleep | 42 | | NULL |
| 415 | user | 91.121.xx.xx:45481 | smc_preprod | Sleep | 1463 | | NULL |
| 420 | user | 91.121.xx.xx:46106 | smc_preprod | Sleep | 1528 | | NULL |
| 432 | user | 91.121.xx.xx:46155 | NULL | Binlog Dump | 1114 | Has sent all binlog to slave; waiting for binlog to be updated | NULL |
| 434 | user | 91.121.xx.xx:60088 | smc_allais | Sleep | 79 | | NULL |
| 453 | user | localhost | smc_preprod | Query | 0 | NULL | show processlist |
+-----+------+----------------------+-------------+-------------+------+----------------------------------------------------------------+------------------
В журналах подчиненных я получаю следующую информацию:
Oct 27 11:48:37 bdd2 mysqld[28477]: 101027 11:48:37 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000027' at position 98, relay log './mysqld-relay-bin.000001' position: 4
Oct 27 11:48:37 bdd2 mysqld[28477]: 101027 11:48:37 [Note] Slave I/O thread: connected to master 'bdd1@188.165.221.122:3306', replication started in log 'mysql-bin.000027' at position 98
Дискового пространства на обоих серверах достаточно. MySQL находится в / data для bdd1 и в / home для bdd2.
bdd1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md1 20G 3.4G 16G 19% /
tmpfs 5.9G 0 5.9G 0% /lib/init/rw
udev 10M 2.8M 7.3M 28% /dev
tmpfs 5.9G 0 5.9G 0% /dev/shm
/dev/md2 51G 2.7G 48G 6% /data
bdd2:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md1 10G 2.6G 6.9G 27% /
tmpfs 5.9G 0 5.9G 0% /lib/init/rw
udev 10M 2.8M 7.3M 28% /dev
tmpfs 5.9G 0 5.9G 0% /dev/shm
/dev/md2 64G 8.0G 53G 14% /home
Учитывая приведенную выше информацию, кажется, что все работает отлично, но на самом деле никакие данные не копируются. Я изменяю основную базу данных, и в подчиненной базе данных никаких изменений не появляется.
Что я делаю не так ?
Если вы никогда не «ИСПОЛЬЗУЕТЕ» базу данных и всегда полностью квалифицируете свою базу данных в своих запросах, ваши запросы не будут записаны в двоичный журнал при использовании «Binlog_Do_DB».
Пример того, что не работает так, как вы могли ожидать: если сервер запущен с --binlog-do-db = sales и вы вводите следующие операторы, оператор UPDATE не регистрируется:
Цены на ЕГЭ; ОБНОВЛЕНИЕ sales.january УСТАНОВИТЬ количество = сумма + 1000;
По этим причинам я никогда не использую do_db/ignore_db
переменные.
У серверов разные идентификаторы серверов? Если они ошибочно установлены одинаковыми, репликация будет работать нормально, но все операторы будут игнорироваться (предполагается, что они исходят от себя, и их не нужно запускать).
mysql> show variables like 'server_id';
-Дэн