Я собираюсь перенести базу данных с одного сервера на другой. Чтобы сократить время простоя клиента, мне интересно, можно ли мне включить репликацию и дать ей время для полной репликации, а затем просто указать клиенту на новый сервер.
Проблема в том, что на сервере, на который я переезжаю, есть существующие активные базы данных для других клиентов. И на сервере, с которого я переезжаю, есть другие активные клиенты, которые не будут переезжать в это время.
Это вообще возможно? Если да, то как мне настроить сервер, с которого я переезжаю, и тот, на который я переезжаю?
да - сервер mysql может одновременно быть и главным, и подчиненным.
если вы используете innodb в качестве механизма хранения этих данных и перемещаете целые базы данных, должно быть возможно:
это может оказаться полезным:
пс. Я предполагаю, что имена баз данных между старым и новым сервером не совпадают.
Ну конечно; естественно.
Идея, которую вы должны реализовать, известна как MySQL Circular Replication.
Например, допустим, у вас есть следующее:
Вот что вы можете попробовать
ШАГ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
ШАГ 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.
Попробуйте !!!