说明:本文搭建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