mysql(二)高可用集群搭建之主从复制

前言

Mysql作为世界上使用最为广泛的数据库之一,免费是其原因之一,不可忽略的是它本身的功能的确很强大;随着技术的发展,在实际的生产环境中,由单台mysql服务器不能满足实际的需求,此时数据库集群就很好的解决了这个问题;采用mysql分布式集群,能够搭建一个高并发、负载均衡的集群服务器。在此之前我们必须保证每台mysql服务器里的数据同步。

数据同步我们可以通过mysql内部配置就可以轻松完成,主要有主从复制和主主复制。

 

 

 

主从复制

在mysql集群环境中,可以分为主节点和从节点,通过主从复制可以实现数据备份、故障转移、mysql集群、高可用、读写分离等。

mysql的主从复制是mysql本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的sql命令实现的主从复制,可以理解为我在master端执行了一条sql命令,那么在salve端同样会执行一遍,从而达到主从复制的效果。

 

 

 

主从复制原理

从库生成两条线程,一个I/O线程,一个SQL线程。

i/o线程去请求主库的binlog,并将得到的binlog日志写到relay log(中继日志)文件中。

需要注意的是主库会生成一个log dump线程,用来给从库i/o线程传binlog。

sql线程会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致。

 

 

 

 

 

 

环境搭建

准备两台服务器,也可以用虚拟机,这里我用的是虚拟机,通过克隆的方式搞出两台。

主节点:192.168.0.108

父节点:192.168.0.107

 

配置主节点

1.vi /etc/my.cnf  新增以下内容

   server_id=108  ###服务器id

   log-bin=mysql-bin   ###开启日志文件

2.重启mysql服务 service mysqld restart

3.验证是否已经配置成功

   show variables like '%server_id%';

   能够查询对应配置文件中的server_id 说明已经配置成功

 

   show master status;

   能够看到同步的文件,和行数 说明已经配置成功。

 

 

配置从节点

1.vi /etc/my.cnf

   server_id=107  ###从服务器server_id

   log-bin=mysql-bin  ###日志文件同步方式

   binlog_do_db=test   ###同步数据库,多个用逗号隔开

2.重启mysql服务 service mysqld restart

3.验证是否已经配置成功

   show variables like '%server_id%'; 

   能够查询对应配置文件中的server_id 说明已经配置成功

 

4.从服务器同步主服务器配置

1.输入sql命令设置主节点

   change master to master_host='192.168.0.108',master_user='root',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=106;

  需要注意的是,其中的master_log_file和master_log_pos的值是在主节点用show master status;这个命令查出来的,上文讲主节点配置有提到过。

2.开始同步

   start slave

3.检查从服务器复制功能状态

    SHOW SLAVE STATUS

 

 

 

若是io线程启动失败,Slave_IO_Running字段显示no,Last_IO_Error字段显示Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

那么可能是由于虚拟机克隆的时候导致UUID产生了重复,解决办法如下:

在从节点服务器上删除auto.cnf文件

cd /var/lib/mysql

rm -rf auto.cnf

重启服务器即可

service mysqld restart

 

 

 

查看效果

在主节点创建test数据库,然后可以看到从节点也会自动创建了test数据库。

在主节点的test数据库创建一张表,在从节点的test数据库也会自动创建了一张表。

在主节点的test数据库的表里插入一条数据,在从节点的test数据库的表里也能看到数据。

 

当我们在从节点修改数据时,可以发现主节点是不会同步从节点的数据的。

一般都会采用读写分离,从节点只能读。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值