MySql主从复制
Posted csl0627
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql主从复制相关的知识,希望对你有一定的参考价值。
主(Master)从(Slave)复制:主数据库实时同步到从数据库。
mysql数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。
下图就描述了一个多个数据库间主从复制与读写分离的模型(来源网络):
在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化,业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行。如果配置了多个从服务器或者多个主服务器又涉及到相应的负载均衡问题,关于负载均衡具体的技术细节还没有研究过,今天就先简单的实现一主一从的主从复制功能。
Mysql主从复制的实现原理图大致如下(来源网络):
MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
准备条件:
1、 两台服务器而且都有MySQL数据库(一主一从的情况,当然还多主多从的情况另外说)。
2、 先配主数据库,再配从数据库。
主服务器节点
vi /etc/my.cnf 新增以下内容 server_id=177 ###服务器id log-bin=mysql-bin ###开启日志文件 |
重启mysql服务 service mysqld restart
验证是否已经配置成功
show variables like ‘%server_id%‘;
能够查询对应配置文件中的server_id 说明已经配置成功
show master status;
能够看到同步的文件,和行数 说明已经配置成功。
从服务器节点
克隆服务器
vi /etc/my.cnf server_id=200###从服务器server_id log-bin=mysql-bin ###日志文件同步方式 #binlog_do_db=test ###同步数据库(也可以不配置,就是所有数据库) |
重启mysql服务 service mysqld restart
验证是否已经配置成功
show variables like ‘%server_id%‘;
能够查询对应配置文件中的server_id 说明已经配置成功
从服务器同步主服务器配置
change master to master_host=‘192.168.212.200‘,master_user=‘root‘,master_password=‘root‘,
master_log_file=‘mysql-bin.000002‘,master_log_pos=216;
开始同步
start slave
检查从服务器复制功能状态
SHOW SLAVE STATUS
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产生了重复 ,解决办法
cat /etc/my.cnf(查看datadir目录)
cd /var/lib/mysql
rm -rf auto.cnf(auto.cnf里面就有一个server-uuid,server-uuid在主从范围之内不能重复,所以如果克隆过来Linux就有可能出现这种server-uuid重复情况)
重启服务器即可(mysql会重新生成server-uuid)
service mysqld restart
最后一步就是自己校验效果了
以上是关于MySql主从复制的主要内容,如果未能解决你的问题,请参考以下文章