`
saybody
  • 浏览: 904356 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

MYSQL 的 MASTER到MASTER的主主循环同步

阅读更多
以前抽空做的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=1
auto_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。


多MASTER自增字段冲突的问题。
具体文章见:
http://dev.mysql.com/tech-resources/articles/advanced-mysql-replication.html

在邮件列表中看到有人讨论在线同步与忽略库与表的问题,具体看:
http://dev.mysql.com/doc/refman/5.1/en/replication-rules.html

分享到:
评论

相关推荐

    MySQL 的 MASTER 到MASTER的主主循环同步

    MySQL 的 MASTER 到MASTER的主主循环同步

    Mysql5.5数据库双向同步

    - **双向同步**:当两个MySQL服务器互相作为对方的主服务器时,形成的数据流动循环称为双向同步。 #### 1.2 双向同步的优势与挑战 - **优势**:提高系统的可用性和容错能力,任何一方出现故障时,另一方可以接管...

    MySQL 主主同步配置步骤

    MySQL 主主同步是一种高可用性和高冗余性的数据库复制策略,允许两个MySQL服务器相互复制数据,使得任何一个服务器上的更改都能被另一个服务器实时捕获并应用。这种配置在分布式系统、负载均衡和数据备份中非常常见...

    mysql主从同步解决方案及优化

    在多主同步应用中,还应注意管理好不同主库和从库之间的复制链路,避免循环复制等复杂情况的发生。 最后,对于在业务中无法解决的问题,例如更新延迟和光速问题,需要通过业务逻辑或者架构设计上的调整来规避。丁奇...

    MYSQL主从同步实战

    2. **日志文件索引**:主服务器维护着一个索引文件来追踪二进制日志文件的循环。 3. **从服务器请求**:从服务器连接到主服务器后,会告知主服务器上次成功读取的二进制日志位置。 4. **日志传输与应用**:主服务器...

    mysql主从主主配置.docx

    - 在主主配置中,需要特别注意避免循环复制的情况发生,可以通过合理的配置来规避。 - 确保主服务器之间的时间同步,这可以使用 NTP (Network Time Protocol) 来实现。 - 考虑使用半同步或全局事务标识符 (GTID) ...

    MySQL数据库同步

    - 如果希望实现双向同步,即A到B和B到A的同步,只需在A和B上同时配置主从关系,但要确保不会形成循环(避免无限循环的复制)。 5. **错误处理**: - 当出现错误时,同步线程可能停止。需要检查错误日志文件(如`*...

    mysql5.6 主主复制配置方法(最简单,最实用)

    MySQL 5.6 主主复制配置是数据库高可用性架构中的常见实践,它允许两个数据库节点互相复制数据,实现数据的双向同步。这种配置在分布式系统、负载均衡和故障恢复等场景下非常有用。以下是对配置步骤的详细解释: 1....

    Mysql主从、主主复制完美试验文档

    主服务器负责将数据更新记录到二进制日志文件中,并维护这些日志文件的索引,以便跟踪日志循环。这些日志可以被发送到从服务器以同步数据。 当从服务器连接到主服务器时,它会告知主服务器它上次成功读取的二进制...

    mysql中mysql-bin.000001是什么文件可以删除吗

    主从同步:在主从复制的设置中,主服务器上的所有变更都会被记录在二进制日志中,从服务器会读取并应用这些日志,以保持与主服务器的数据同步。 然而,随着时间的推移,二进制日志文件会占用大量的磁盘空间。如果...

    ubuntu mysql

    MySQL的双向同步通常使用复制功能来实现,分为主-从复制和主-主复制。这里我们关注主-主复制,使得两个MySQL实例可以同时作为主节点,互相复制数据。 1. 设置复制: 在每个MySQL实例上执行以下步骤: - 获取当前...

    mysql 数据库的同步问题(双机热备).docx

    MySQL 数据库的同步问题主要涉及的是双机热备(High Availability)方案,即在一个主数据库服务器(Master)和一个或多个从属服务器(Slave)之间实现数据的实时复制。这通常是为了确保数据的安全性、提高服务的可用...

    mysql数据库的同步问题(双机热备)文.pdf

    在MySQL中,这种同步被称为复制(Replication),而非同步(Sync),这是因为复制涉及到主服务器(Master)上的所有更改被重新执行在从属服务器(Slave)上,以保持数据一致性。 MySQL复制的核心在于开启二进制日志...

    mysql双主+keepalived高可用方案1

    在这个配置中,两个 MySQL 实例作为主节点相互同步数据,如果一个节点发生故障,Keepalived 会自动将流量切换到另一个节点,保证服务的不间断。 **MySQL 安装** 在 CentOS 7 上安装 MySQL 通常有两种方法:通过 ...

    mysql双主搭建脚本,可用于离线环境

    在这种模式下,每个服务器都可以作为读写操作的主节点,当一个服务器的数据发生变化时,这些变化会被同步到另一个服务器,确保数据的一致性。这个“mysql双主搭建脚本”正是为了实现这一目的而设计的,尤其适用于...

    MySQL主备双活安装说明.doc

    【MySQL主备双活安装说明】 MySQL主备双活是一种高可用性和容灾解决方案,它通过日志复制确保数据在主服务器和备用服务器之间保持一致。这种模式下,主服务器处理写操作,而备用服务器仅处理读操作,一旦主服务器...

    使用Rotate Master实现MySQL 多主复制的实现方法

    在MySQL环境中,多主复制(Multi-Master Replication)是一种高级的复制模式,允许数据在多个主节点之间双向同步。然而,MySQL的标准复制特性仅支持一对一的主从复制,不直接支持多主复制。尽管MySQL 5.6引入了全局...

Global site tag (gtag.js) - Google Analytics