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数据库的表里也能看到数据。
当我们在从节点修改数据时,可以发现主节点是不会同步从节点的数据的。
一般都会采用读写分离,从节点只能读。