实现MySql的主从复制(非单机)
文章目录
首先了解心跳线实现数据同步
一、mysql主从复制原理是什么?
1、master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog功能)。
2、slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。
3、Mysql复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。(本次演示为Mysql在不同的服务器上)
4、注意:在Mysql8版本,后面的实现主从复制的时候,需要添加一个条件。
5、master和slave两节点间时间需同步
二、使用步骤
1.安装Mysql
2.数据库进行同步
我们需要一个主节点,即主数据库mysql(为次数据库提供更新日志)
主节点配置
#主节点配置
#在 /etc/my.cnf中新增以下代码
#开启二进制日志
log_bin=master_bin
#设置当前节点全局唯一ID 这个随便,只要与保证唯一即可。这里需要小小的记住一下。后面在创建连接的时候,需要这个id
server-id=7
#重启mysql服务
service mysql start
#查看从二进制日志的文件和位置开始进行复制
mysql> show master status;
创建用户账号 第一个(10.70.20.%是允许前边IP是10.70.20的下的IP,)
mysql> create user repluser@'10.70.20.%' identified by '123456';
授权用户
mysql> grant replication slave on *.* to gaoch@'10.70.20.%';
从数据库配置
#从节点配置
#为当前节点设置一个全局惟的ID号
server_id=17
#开启二进制日志
log-bin=slave_log
#设置从数据库只读(对root用户无效)
read_only=ON
#relay log的文件路径
relay_log=relay-log
#默认值hostname-relay-bin.index
relay_log_index=relay-log.index
3、使用有复制权限的用户账号连接至主服务器,并启动复制线程
使用show master status; 查看
4、创建连接
mysql> change master to master_host='10.70.20.25',master_user='repluser',master_password='123456',master_log_file='master_bin.000005',MASTER_LOG_POS=139325,get_master_public_key=7;
需要自己变更的有:
master_host,master_password,master_log_file(这是上面查看状态的file),MASTER_LOG_POS(这个是Position),get_master_public_key(这个是配置主数据库的id)
在Mysql8版本在后面添加这句get_master_public_key=7,解决的是这个问题 ----》Slave_IO_Runnning :一直是Connection的话
5、开启,啥看状态
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;
这样既可
总结
提示:这里对文章进行总结:
如果连接不成功的话,记得开放指定端口的防火墙,或者直接将防火墙关闭(在测试的阶段)