mysql 主主结构_MySQL主主架构

136be34314a57ba454d97dfa8ef5d707.png

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

136be34314a57ba454d97dfa8ef5d707.png

原理:

主从复制涉及到三个线程:

第一个是binlog线程,负责写bin-log日志;

第二个是slave的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log;

第三个是slave的sql thread不断的更新slave的数据。

本文是基于MySQL5.6以下版本实现的,5.7版本之后已经支持多源复制和多线程复制了。

一、环境:

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

host1:192.168.2.3

host2:192.168.2.4 (互相能ping通)

2.安装Mysql:

# yum install mysql-*

二、配置:

1、启动mysql:

# service mysqld start

// 设置mysql的root密码(回车后输入要设置的密码即可):

# mysqladmin –u root password

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:

# service mysqld restart

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

# service iptables stop(chkconfig iptables off)。

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 status\G;

> show slave status\G;

Host1:

136be34314a57ba454d97dfa8ef5d707.png

Host2:

136be34314a57ba454d97dfa8ef5d707.png

结果如上图所示,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 status\G;查看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表中插入不同数据来测试。如下图:

136be34314a57ba454d97dfa8ef5d707.png

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

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 要写到配置文件中,防止下次重启后失效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值