Назад | Перейти на главную страницу

Можно ли сделать сервер mysql одновременно ведущим и ведомым?

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

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

Это вообще возможно? Если да, то как мне настроить сервер, с которого я переезжаю, и тот, на который я переезжаю?

да - сервер mysql может одновременно быть и главным, и подчиненным.

если вы используете innodb в качестве механизма хранения этих данных и перемещаете целые базы данных, должно быть возможно:

  • включить ведение журнала на старом сервере
  • получить полный согласованный дамп со старого сервера, не блокируя текущий трафик
  • перенесите этот дамп на новый сервер, восстановите там
  • включить репликацию для выбранных баз данных и позволить новому серверу «догнать» производственную машину
  • как только серверам потребуются синхронизированные базы данных - переключите трафик

это может оказаться полезным:

пс. Я предполагаю, что имена баз данных между старым и новым сервером не совпадают.

Ну конечно; естественно.

Идея, которую вы должны реализовать, известна как MySQL Circular Replication.

Например, допустим, у вас есть следующее:

  • DBServer1 имел базы данных db1, db2, db3, db4
  • Вы хотите переместить db3 и db4 на DBServer2
  • Вы хотите ограничить чтение и запись в db1 и db2 на DBServer1
  • Вы хотите ограничить чтение и запись в db3 и db4 на DBServer2

Вот что вы можете попробовать

ШАГ01) Запуск GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO replicator@'%' IDENTIFIED BY 'replpass'; на DBServer1

ШАГ02) Установите ту же версию MySQL на DBServer2 (у вас будут данные по умолчанию в / var / lib / mysql)

ШАГ03) rsync DBServer1: / var / lib / mysql DBServer2: / var / lib / mysql

ШАГ04) Повторите ШАГ02 до тех пор, пока два последовательных rsync не будут равны по времени, предпочтительно <2 мин.

ШАГ05) Отключите ваше приложение от записи чего-либо в базы данных

ШАГ06) service mysql stop на DBServer1

ШАГ07) Настройте двоичное ведение журнала на DBServer1

Добавьте это в /etc/my.cnf на DBServer1

[mysqld]
server-id=1
log-bin=mysql-bin

Добавьте это в /etc/my.cnf на DBServer2

[mysqld]
server-id=2
log-bin=mysql-bin

ШАГ08) rsync DBServer1: / var / lib / mysql DBServer2: / var / lib / mysql (ОКОНЧАТЕЛЬНЫЙ RSYNC)

ШАГ09) service mysql start на DBServer1 (начнут заполняться двоичные журналы)

ШАГ 10) service mysql start на DBServer2 (начнут заполняться двоичные журналы)

ШАГ11) Направьте свои приложения для db1 и db2 на DBServer1

ШАГ 12) Направьте свои приложения для db3 и db4 на DBServer2

ШАГ 13) Запустите это на DBServer1

CHANGE MASTER TO
MASTER_HOST='xxx.xx.xx.xxx',
MASTER_PORT=3306,
MASTER_USER='replicator',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=PPPP;

ШАГ 14) Запустите это на DBServer2

CHANGE MASTER TO
MASTER_HOST='yyy.yy.yy.yyy',
MASTER_PORT=3306,
MASTER_USER='replicator',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=PPPP;

Для шагов 13 и 14

  • xxx.xx.xx.xxx - это частный IP-адрес DBServer2
  • yyy.yy.yy.yyy - это частный IP-адрес DBServer1
  • PPPP - это начальная позиция любого двоичного журнала
    • Для MySQL 5.5 PPPP составляет 107
    • Для MySQL 5.1 PPPP - 106
    • До MySQL 5.1 PPPP - 98

ШАГ 15) Запускаем START SLAVE; на DBServer1

ШАГ 16) Запускаем START SLAVE; на DBServer2

ШАГ 17) Запускаем SHOW SLAVE STATUS\G на DBServer1, пока Seconds_Behind_Master не станет 0

ШАГ 18) Запускаем SHOW SLAVE STATUS\G на DBServer2, пока Seconds_Behind_Master не станет 0

Эта реализация не позволит разделить базы данных, но также разрешит резервные серверы для базы данных.

DBServer1 будет местом для чтения и записи для db1 и db2. Он также обеспечивает резервную копию db3 и db4.

DBServer2 будет местом для чтения и записи для db3 и db4. Он также обеспечивает резервную копию db1 и db2.

Попробуйте !!!