MySQL主主架构

 

说明:本文搭建MySQL的主主架构,使得两个MySQL实例互为主从结构。实现两个实例同时提供读写服务,又互为主备关系的高可用架构。原理就是两个实例互做MySQL主从配置,主从复制原理如下:

图片

原理:

主从复制涉及到三个线程:
第一个是binlog线程,负责写bin-log日志;
第二个是slave的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log;
第三个是slave的sql thread不断的更新slave的数据。

一、环境:

1.安装Centos-6.5-x64位系统的机器两台:

host1:192.168.2.3

host2:192.168.2.4 (互相能ping通)

2.安装Mysql:

二、配置:

1、启动mysql:

2、创建数据库test1和表test1。

> Create database test1;

> Use test1;

> Create table test1(id int(5),name varchar(10));

3.配置mysql配置文件:/etc/my.cnf.配置内容如下:

Host1:

[mysqld]

Server-id=1

Log-bin=bin-log

Binlog-ignore-db=mysql,test,infromation_schema

Binlog-do-db=test1

Master-host=192.168.2.4

Master-port=3306

Master-user=root

Master-password=111

Master-retry-count=999

Master-connect-retry=60

Host2:

[mysqld]

Server-id=2

Log-bin=bin-log

Binlog-ignore-db=mysql,test,infromation_schema

Binlog-do-db=test1

Master-host=192.168.2.3

Master-port=3306

Master-user=root

Master-password=110

Master-retry-count=999

Master-connect-retry=60

4.重启mysql:

1)如果不能启动服务,则仔细检查配置文件是否写错,检查无误后关闭防火墙。命令:

2)Host1使用mysql –h host2.IP –u root –p 登录host2的mysql看是否成功

3)Host2使用mysql –h host1.IP –u root –p 登录host1的mysql看是否成功

成功说明双机上的mysql服务和访问正常。

5.配置授权。

Host1:

mysql>grant replivation slave on *.* to ‘root’@‘192.168.2.4’ identified by ‘host1中mysql的root密码’;

Host2:

mysql>grant replivation slave on *.* to ‘root’@‘192.168.2.3’ identified by ‘host2中mysql的root密码’;

6.查看状态:

查看master和slave状态:

> show master statusG;
> show slave statusG;

Host1:

Host2:

结果如上图所示,slave_IO_Running和slave_SQLRunning都为YES则表示配置成功。

问题:

slave_IO_Running:NO; Last_IO_Error: Got fatal error 1236 from master when reading data from binary log:'Client requested master to start replication from impossible position'

解决:

使用show master statusG;查看master的file和position的值,然后用一下命令设置:

mysql> stop slave;
mysql> change master to master_log_file='file值',master_log_pos=position值;
mysql> start slave;

7.测试:

分别在host1和host2的mysql-jhk-test1表中插入不同数据来测试。如下图:

结果显示双机实现互为热备份。删除数据和表测试(略)

 

8.主主架构需要解决的问题:

主主结构存在一个问题:那就是主键冲突的问题,两个实例在写入数据时需要避免主键冲突。需要做如下配置:

Host1:
> set global auto_increment_increment = 2; // 全局
> set global auto_increment_offset = 1;
> set session auto_increment_increment = 2; //当次连接
> set session auto_increment_offset = 1;

Host2:
> set global auto_increment_increment = 2;
> set global auto_increment_offset = 2;
> set session auto_increment_increment = 2;
> set session auto_increment_offset = 2;

设置my.cnf里面的2个参数auto_increment_increment,auto_increment_offset。让Host1主键以1,3,5,7来增长,让Host2主键以2,4,6,8来增长。合理设置这两个值,可以扩展集群为三个,四个以上的实例,从而实现多主架构。

注:auto-increment-increment 和 auto-increment-offset 要写到配置文件中,防止下次重启后失效。

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/235145.html

联系我们
联系我们
分享本页
返回顶部