天天看點

MySQL Master-Master(雙主)多從

 使用 MySQL 5.5

               Master1          Master2          Slave1           Slave2

IP:         192.168.1.26     192.168.1.27     192.168.1.28     192.168.1.29

hostname:    node-26          node-27          node-28          node-29

server id:    26               27               28               29

端口:         3306

配置自動登入:

# cat .my.cnf

[client]

user=root

password=123

chmod 600 .my.cnf

[ Master 1 ]

将配置選項添加到 my.cnf 以配置 Master

lower_case_table_names=1

skip-name-resolve

# 5.1

#default-character-set=gbk

# 5.5

character-set-server=gbk

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

max_connections=800

default-storage-engine=innodb

log_bin_trust_function_creators=1

log-bin=mysql-bin

binlog_format=row

server-id = 26

max_binlog_size=200M

expire_logs_days = 10

binlog_cache_size = 64M

binlog-ignore-db=mysql

replicate-ignore-db=mysql

innodb_flush_log_at_trx_commit=1

sync_binlog=1

log_slave_updates = 1

relay-log-index = slave-relay-bin.index

relay-log = slave-relay-bin

# master server 1

auto_increment_increment=2

auto_increment_offset=1

# master server 2

#auto_increment_increment=2

#auto_increment_offset=2

建立一個複制使用者

在 Master 伺服器執行如下:

grant replication slave on *.* to replication identified by '123';

flush privileges;

-----------

備份 master

在 master 執行如下:

flush tables with read lock;

show master status\G

mysqldump --all-databases > backup.sql

scp 拷貝備份檔案到 Slave 機器上

unlock tables;

配置 Slave

my.cnf 添加如下:

server-id = 27

接下來,在 Slave 上恢複備份:

mysql < backup.sql

已經在 Slave 伺服器上恢複了 Master 機器的備份,現在可以啟動 Slave 了。利用前面記下的 Master 的 binlog 位置,然後啟動 Slave。

change master to

master_host = '192.168.1.26',

master_port = 3306,

master_user = 'replication',

master_password = '123',

master_log_file = 'mysql-bin.000001',

master_log_pos = 579;

start slave;

----------

克隆 Slave

隻要有一個 Slave 連在 Master 上,就可以使用這個 Slave 建立新的 Slave,而不需要再離線 Master 了。克隆 Slave 與克隆 Master 基本相同,差別在于如何找到 binlog 位置。另外,注意克隆的那個 Slave 同時還在執行從 Master 的複制。

停止 Slave:

slave> stop slave;

slave> flush tables with read lock;

# mysqldump --all-databases > backup-slave.sql

Slave 停止後,就可以像從前一樣重新整理(flush)資料表,然後建立備份。建立了 Slave 的備份後,使用 show slave status 指令來确定從哪裡開始複制。如果要獲得 Master 二進制日志中 Slave 即将執行的下一個事件的位置,請注意 Relay_Master_Log_File 和 Exec_Master_Log_Pos 字段值。

show slave status\G

...

Relay_Master_Log_File: master-bin.000001

Exec_Master_Log_Pos: 833

建立了備份然後在新 Slave 上恢複之後,将複制配置為從這個位置開始,然後啟動新的 Slave:

master_log_pos = 833;

-----------------

配置第二台 Master

現在将 node-27 作為 master,将 node-26 作為 slave。

在 node-27 上面執行如下:

然後登陸 node-26 機器,執行如下:

master_host = '192.168.1.27',

master_log_pos = 1776;