Шаг 1. Устанавливаем MySQL на два сервера:
Master 1/Slave 2 ip: 192.168.16.4
Master 2/Slave 1 ip : 192.168.16.5Шаг 2. Содержимое my.cnf сервера Master 1, являющегося верущим по умолчанию:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1log-bin
binlog-do-db=<database name> # input the database which should be replicated
binlog-ignore-db=mysql # input the database that should be ignored for replication
binlog-ignore-db=testserver-id=1
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Шаг 3. На сервере Master 1, создаем аккакнт для slave сервера (затем перезапускаем mysql):mysql> grant replication slave on *.* to 'replication'@192.168.10.5 \
identified by 'slave';
Шаг 4. Содержимое my.cnf сервера Master 2, являющегося ведомым по умолчанию (slave):[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1server-id=2
master-host = 192.168.16.4
master-user = replication
master-password = slave
master-port = 3306[mysql.server]
user=mysql
basedir=/var/lib[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Шаг 5. Активируем ведомый сервер:
mysql> start slave;
mysql> show slave status\G;В отображенных параметрах поля Slave_IO_Running и Slave_SQL_Running должны содержать "YES".
Шаг 6. На сервере Master 1 проверяем статус бинарного лога:mysql> show master status;
+------------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------------+----------+--------------+------------------+
|MysqlMYSQL01-bin.000008 | 410 | adam | |
+------------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Сценарий master-slave реализован, переходим к настройке master-master.Шаг 7. На сервере Master2/Slave 1 редактируем my.cnf:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
server-id=2master-host = 192.168.16.4
master-user = replication
master-password = slave
master-port = 3306log-bin #information for becoming master added
binlog-do-db=adam[mysql.server]
user=mysql
basedir=/var/lib[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Шаг 8. Создаем slave аккаунт на Master 2 для Master 1:mysql> grant replication slave on *.* to 'replication'@192.168.16.4 identified by 'slave2';
Шаг 9. Редактируем my.cnf на сервере Master 1, определив, что он является slave для Master 2:[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
log-bin
binlog-do-db=adam
binlog-ignore-db=mysql
binlog-ignore-db=testserver-id=1
#information for becoming slave.
master-host = 192.168.16.5
master-user = replication
master-password = slave2
master-port = 3306[mysql.server]user=mysqlbasedir=/var/lib
Шаг 10. Перезапускаем оба MySQL сервера. Для Master 1 выполняемmysql> start slave;
Для Master 2:
mysql > show master status;
Для Master 1:
mysql> show slave status\G;
В отображенных параметрах поля Slave_IO_Running и Slave_SQL_Running должны содержать "YES".
URL: http://www.howtoforge.com/mysql_master_master_replication
Обсуждается: http://www.opennet.me/tips/info/1205.shtml
>Шаг 2. Содержимое my.cnf сервера Master 1, >являющегося верущим по умолчанию:Каким является? Поправьте плиз....
Ведущим.
И как работает эта схема на загруженных серверах?
Никто не пробовал таким образом держать 3 и больше серверов ? Или не страдать фигней и строить кластер?
Насколько я понял из доки - кластер не рекомендуется строить на разнесенных (не в локалке) серверах.
но как жу тогда быть если все же надо иметь три и более синхронизированных mysql сервера?
или все таки кластер может нормально работать на разнесенных мускулах?
есть у кого то здесь опыт построения похожих задач?
настроил-неплохо работает. для двух серверов подходит отлично, для трёх уже есть смысл строить кластер
про индексы не сказали - сделать их непохожими>три и более синхронизированных
погуглите (нет под рукой) - видел хороший пример
на 5 серверов
Ну и как это чудо поведет себя при наличии таблиц с авто-икрементом ?
На на mysql 5.0 есть такое дело как auto_increment_increment и auto_increment_offset, про которые здесь ни какого упоминания. А вот на 4.x я так и неразобрался как решается эта проблема (есть предположение, что она не решается). Может подскажет кто-нибудь ?
MySQL-кластер же _имхо_ не является подходящем решением для больших проектов до тех пор пока не не реализуют cluster-on-disk
"MySQL-кластер же _имхо_ не является подходящем решением для больших проектов до тех пор пока не не реализуют cluster-on-disk"
Вроде ж в 5.1 уже есть ? Индексы правда in-memory...
Mysql просто такого не умеет по нормальному.
postgres + pgcluster = multi-master and synchronous replication system
Вот большай и серьезная дока на эту тему.
http://www.onlamp.com/pub/a/onlamp/2006/04/20/advanced-mysql...
В журнале PHPInside (номер не помню) есть перевод этой статьи.www.phpinside.ru
>Mysql просто такого не умеет по нормальному.
>postgres + pgcluster = multi-master and synchronous replication system
слушай можешь сбросить конфиги на pgcluster && postgress... а то у нас грабли все время какието вываливаються ... нормально постгресс работает только в сингл моде.
сенкс заранее
Подскажите, в чем может быть проблема, репликация master-slave работает, после 7-10 шагов репликация перестает работать, позиции логов увеличиваются.
SHOW SLAVE STATUS смотрите на слейве. скорее всего - на мастере выполняется кривой запрос.
SLAVE STOP ;SET SKIP COUNTER=1 ; SLAVE START и так пока не починится.
>SHOW SLAVE STATUS смотрите на слейве. скорее всего - на мастере выполняется
>кривой запрос.
>SLAVE STOP ;SET SKIP COUNTER=1 ; SLAVE START и так пока
>не починится.И что, так каждый раз лезть в консоль/гуи и слейв подымать, когда на мастере кривой запрос не выполнился?
А слейв как-то сам не может такие запросы игнорить (или мастер такие запросы не писать в бинлог)? Один фиг такие запросы данные не меняют, просто СУБД ругается.
а чем master-slave хуже ... или это просто для общей информации?
__________________
http://php-prog.net/
он не хуже. он для других целей. master-slave - запись возможна ТОЛЬКО на master. такая схема подходит для проектов, где в основном читают, а insert/update/delete - делается по праздникам.
Большое спасибо!
Мне, правда, пришлось задавать параметры для slave'ов не через конфиг, а через CHANGE MASTER TO, потому что после исправлений конфига демон отказывался стартовать (MariaDB 5.5.30 на обоих серверах).
Спасибо. Пользовался этой инструкцией - http://sysadm.pp.ua/linux/mysql-master-master-replication.html . Целий ряд статтей по mysql, от установки, до настройки репликаций. Может кому-то пригодится