mysql主主复制循环同步,MYSQL 的 MASTER到MASTER的主主循環同步

本文详细介绍了MySQL主主同步的实现过程,包括环境配置、授权用户、配置文件调整及服务重启等步骤,并通过实例展示了数据同步的效果。

以前抽空做的MYSQL 的主主同步。

不過心理做好准備,對性能會有一定的影響!

把步驟寫下來,至於會出現的什么問題,以后隨時更新。這里我同步的數據庫是TEST

1、環境描述。

主機:192.168.0.231(A)

主機:192.168.0.232(B)

MYSQL 版本為5.1.21

2、授權用戶。

A:

mysql> grant replication slave,file on *.* to 'repl1'@'192.168.0.232' identified

by '123456';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

B:

mysql> grant replication slave,file on *.* to 'repl2'@'192.168.0.231' identified

by '123456';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

然后都停止MYSQL 服務器。

3、配置文件。

在兩個機器上的my.cnf里面都開啟二進制日志 。

A:

user = mysql

log-bin=mysql-bin

server-id       = 1

binlog-do-db=test

binlog-ignore-db=mysql

replicate-do-db=test

replicate-ignore-db=mysql

log-slave-updates

slave-skip-errors=all

sync_binlog=1

auto_increment_increment=2

auto_increment_offset=1

B:

user = mysql

log-bin=mysql-bin

server-id       = 2

binlog-do-db=test

binlog-ignore-db=mysql

replicate-do-db=test

replicate-ignore-db=mysql

log-slave-updates

slave-skip-errors=all

sync_binlog=1auto_increment_increment=2

auto_increment_offset=2

至於這些參數的說明具體看手冊。

紅色的部分非常重要,如果一個MASTER 掛掉的話,另外一個馬上接管。

紫紅色的部分指的是服務器頻繁的刷新日志。這個保證了在其中一台掛掉的話,日志刷新到另外一台。從而保證了數據的同步 。

4、重新啟動MYSQL服務器。

在A和B上執行相同的步驟

[root@localhost ~]# /usr/local/mysql/bin/mysqld_safe &

[1] 4264

[root@localhost ~]# 071213 14:53:20 mysqld_safe Logging to '/usr/local/mysql/data/localhost.localdomain.err'.

/usr/local/mysql/bin/mysqld_safe: line 366: [: -eq: unary operator expected

071213 14:53:20 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data

5、進入MYSQL的SHELL。

A:

mysql> flush tables with read lock/G

Query OK, 0 rows affected (0.00 sec)

mysql> show master status/G

*************************** 1. row ***************************

File: mysql-bin.000007

Position: 528

Binlog_Do_DB: test

Binlog_Ignore_DB: mysql

1 row in set (0.00 sec)

B:

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

mysql> show master status/G

*************************** 1. row ***************************

File: mysql-bin.000004

Position: 595

Binlog_Do_DB: test

Binlog_Ignore_DB: mysql

1 row in set (0.00 sec)

然后備份自己的數據,保持兩個機器的數據一致。

方法很多。完了后看下一步。

6、在各自機器上執行CHANGE MASTER TO命令。

A:

mysql> change master to

-> master_host='192.168.0.232',

-> master_user='repl2',

-> master_password='123456',

-> master_log_file='mysql-bin.000004',

-> master_log_pos=595;

Query OK, 0 rows affected (0.01 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

B:

mysql> change master to

-> master_host='192.168.0.231',

-> master_user='repl1',

-> master_password='123456',

-> master_log_file='mysql-bin.000007',

-> master_log_pos=528;

Query OK, 0 rows affected (0.01 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

7、查看各自機器上的IO進程和 SLAVE進程是否都開啟。

A:

mysql> show processlist/G

*************************** 1. row ***************************

Id: 2

User: repl

Host: 192.168.0.232:54475

db: NULL

Command: Binlog Dump

Time: 1590

State: Has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

*************************** 2. row ***************************

Id: 3

User: system user

Host:

db: NULL

Command: Connect

Time: 1350

State: Waiting for master to send event

Info: NULL

*************************** 3. row ***************************

Id: 4

User: system user

Host:

db: NULL

Command: Connect

Time: 1149

State: Has read all relay log; waiting for the slave I/O thread to update it

Info: NULL

*************************** 4. row ***************************

Id: 5

User: root

Host: localhost

db: test

Command: Query

Time: 0

State: NULL

Info: show processlist

4 rows in set (0.00 sec)

B:

mysql> show processlist/G

*************************** 1. row ***************************

Id: 1

User: system user

Host:

db: NULL

Command: Connect

Time: 2130

State: Waiting for master to send event

Info: NULL

*************************** 2. row ***************************

Id: 2

User: system user

Host:

db: NULL

Command: Connect

Time: 1223

State: Has read all relay log; waiting for the slave I/O thread to update it

Info: NULL

*************************** 3. row ***************************

Id: 4

User: root

Host: localhost

db: test

Command: Query

Time: 0

State: NULL

Info: show processlist

*************************** 4. row ***************************

Id: 5

User: repl2

Host: 192.168.0.231:50718

db: NULL

Command: Binlog Dump

Time: 1398

State: Has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

4 rows in set (0.00 sec)

如果紅色部分沒有出現,檢查DATA目錄下的錯誤文件。

8、釋放掉各自的鎖,然后進行插數據測試。

mysql> unlock tables;Query OK, 0 rows affected (0.00 sec)

插入之前兩個機器表的對比:

A:

mysql> show tables;

+----------------+

| Tables_in_test |

+----------------+

| t11_innodb     |

| t22            |

+----------------+

B:

mysql> show tables;

+----------------+

| Tables_in_test |

+----------------+

| t11_innodb     |

| t22            |

+----------------+

從A機器上進行插入

A:

mysql> create table t11_replicas

-> (id int not null auto_increment primary key,

-> str varchar(255) not null) engine myisam;

Query OK, 0 rows affected (0.01 sec)

mysql> insert into t11_replicas(str) values

-> ('This is a master to master test table');

Query OK, 1 row affected (0.01 sec)

mysql> show tables;

+----------------+

| Tables_in_test |

+----------------+

| t11_innodb     |

| t11_replicas   |

| t22            |

+----------------+

3 rows in set (0.00 sec)

mysql> select * from t11_replicas;

+----+---------------------------------------+

| id | str                                   |

+----+---------------------------------------+

|  1 | This is a master to master test table |

+----+---------------------------------------+

1 row in set (0.00 sec)

現在來看B機器:

mysql> show tables;

+----------------+

| Tables_in_test |

+----------------+

| t11_innodb     |

| t11_replicas   |

| t22            |

+----------------+

3 rows in set (0.00 sec)

mysql> select * from t11_replicas;

+----+---------------------------------------+

| id | str                                   |

+----+---------------------------------------+

|  1 | This is a master to master test table |

+----+---------------------------------------+

1 row in set (0.00 sec)

現在反過來從B機器上插入數據:

B:

mysql> insert into t11_replicas(str) values('This is a test 2');

Query OK, 1 row affected (0.00 sec)

mysql> select * from t11_replicas;

+----+---------------------------------------+

| id | str                                   |

+----+---------------------------------------+

|  1 | This is a master to master test table |

|  2 | This is a test 2                      |

+----+---------------------------------------+

2 rows in set (0.00 sec)

我們來看A

A:

mysql> select * from t11_replicas;

+----+---------------------------------------+

| id | str                                   |

+----+---------------------------------------+

|  1 | This is a master to master test table |

|  2 | This is a test 2                      |

+----+---------------------------------------+

2 rows in set (0.00 sec)

好了。現在兩個表互相為MASTER。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值