mysql主从复制

内心独白:
之前听说过mysql的主从复制,自己又不会,感觉挺好奇的,再加上可能在运维过程中会使用到,所以自己就学习了一下呗,并且总结一下。

那什么是mysql的主从复制呢?
我的理解是:主结点上的mysql数据库里的数据会实时的更新到从结点的mysql数据库里面,这样做的一个最明显的好处就是可以保证你的数据有备份,当你主结点的mysql服务器宕掉了,那么就启用从结点上的mysql数据库,保证服务的正常运行。

我下面主要介绍的是基于日志点的mysql主从复制,而且是单向的(也就是说主结点mysql数据变了之后,从节点才会改变,如果从结点的mysql数据变了,主结点的mysql数据是不会变的)。
实验环境
一台虚拟机 和一台阿里云服务器
操作系统:cento7
mysql 版本:虚拟机mysql版本:8.0.13; 阿里云服务器的mysql版本:8.0.15
说明:主结点应该设置在阿里云的Mysql服务器上,因为在设置从结点的时候需要填写主结点的ip地址,由于我阿里云的ip地址是可以访问公网的,所以当我从结点的mysql的 iO线程访问我的主结点的时候,是可以访问的。你要是把主结点设置为虚拟机的mysql,那么当从节点访问主节点的ip时,因为是虚拟机,它的ip地址是私有ip地址,你将连接不了,会导致连接失败问题,当然啦,如果你是用两台虚拟机做实验,那么那个作为主节点,那个作为从节点都不是问题。
先来讲讲mysql基于日志点的主从复制原理:
MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
流程图:
在这里插入图片描述
主节点 binary log dump 线程
当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。

从节点I/O线程
当从节点上执行start slave命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 线程发来的更新之后,保存在本地relay-log中。

从节点SQL线程
SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。

原理讲完了,就来一波实战呗;
1、主节(Master)点配置

修改 Master 的配置文件/etc/my.cnf
vi /etc/my.cnf
在my.cnf文件中加入如下配置内容

[mysqld]
log-bin=mysql-bin
server-id=1
2、从节点(Slave)配置

修改 Slave 的配置文件/etc/my.cnf
vi /etc/my.cnf
在my.cnf文件中加入如下配置内容
[mysqld]
server-id=2
3、创建用于复制操作的用户
mysql> CREATE USER ‘dba’@‘192.168.238.%’ IDENTIFIED WITH mysql_native_password BY ‘Ron_master_1’;
mysql> GRANT REPLICATION SLAVE ON . TO ‘dba’@‘192.168.238.%’;
刷新授权表信息
flush privileges;
4获取主节点当前binary log文件名和位置(position)
使用mysqldump命令备份主节点的mysql数据,然后再备份的数据中找到binary log文件名和位置(position)
把备份的数据导入到从服务器上的mysql数据库中
5 在从节点上配置主节点参数
mysql> CHANGE MASTER TO
MASTER_HOST=‘你的ip地址’,
MASTER_USER=‘dba’,
MASTER_PASSWORD=‘Ron_master_1’,
MASTER_LOG_FILE=binary log文件名’,
MASTER_LOG_POS=位置;
6 从节点上开启主从同步:
start slave;
7 查看主从同步状态:
show slave status\G;
在这里插入图片描述
当出现
slave_io_running:yes和slave_sql_running:yes 就说明主从复制成功了;
举个例子:
我在主服务器上添加和修改数据:
在这里插入图片描述
然后我到从服务器上查看:
在这里插入图片描述
主从同步成功啦

注意:当我们想删除这个主从复制的时候呢就需要在从服务器上输入两行命令:stop slave; reset slave all;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值