干货操作:MySQL主从复制与读写分离数据库---------------------------------又是含泪学MySQL的一天

前言

在实际的生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是不能满足实际需求的。因此,一般通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。

在这里插入图片描述

一、什么是主从复制

将主数据库中的DDL和DML操作通过二进制日志(BINLOG)传输到从数据库上,然后将这些日志重新执行(重做);从而使得从数据库的数据与主数据库保持一致。

1.1:MySQL主从复制原理

1.11:MySQL的复制类型

  • 基于语句的复制

  • 基于行的复制

  • 混合类型的复制

1.12:主从复制的作用

  • 主数据库出现的问题,可以切换到从数据库

  • 可以进行数据层层面的读写分离

  • 可以在从数据库上进行日程备份

1.2:MySQL主从复制的工作过程

在这里插入图片描述
Binary log:主数据库的二进制日志
Relay log:从服务器的中继日志

  • 第一步:master在每个事务更新数据完成之前,将该操作记录串行地写入到binlog文件中。
  • 第二步:salve开启一个I/O
    Thread,该线程在master打开一个普通连接,主要工作是binlog dump
    process。如果读取的进度已经跟上了master,就进入睡眠状态并等待master产生新的事件。I/O线程最终的目的是将这些事件写入到中继日志中。
  • 第三步:SQL Thread会读取中继日志,并顺序执行该日志中的SQL事件,从而与主数据库中的数据保持一致。

二:案列实施:MySQL主从复制搭建

  • 配置环境
    在这里插入图片描述
操作系统:五台Centos 7.6的Linux系统

数据库版本:MySQL 5.7

一台做主服务器(master)IP:20.0.0.41)

两台做从服务器(shuai01 IP:20.0.0.42)(shuai02 IP: 20.0.0.43)

一台客户端client(20.0.0.45)

2.1:配置前提

  • 1.需要保证3306端口开启或关闭防火墙

  • 2.三台服务器之间可以互相pingtong

#在主服务器ping从服务器shuai01 shuai02

[root@master ~]# ping 20.0.0.42

[root@master ~]# ping 20.0.0.43

#在shuai01ping主服务器跟另一个从服务器

[root@shuai01 ~]# ping 20.0.0.41

[root@shuai01 ~]# ping 20.0.0.43

#从服务器shuai02一样

2.2:实验目的:

  • 通过配置,实现主从配置

  • 首先配置主服务器(master)

[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
  • 配置时间同步环境

  • 在主服务器上安装NTP时间同步服务器

#安装NTP服务
[root@localhost ~]# yum install ntp -y
  • 修改ntp.conf 设置主服务器为时间同步
[root@master ~]# vim /etc/ntp.conf
...省略内容
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
'//添加一下两段'
server 127.127.195.0 //本地是时钟源// 
fudge 127.127.195.0 stratum 8  //设置时间层级为8//
...省略内容
#重启服务
[root@master ~]# systemctl start ntpd
#进行时间同步
[root@master ~]# /usr/sbin/ntpdate 20.0.0.41
  • 配置主服务器(master)

  • 开启二进制日志选项,增加服务器id

#在[mysqld]选项中添加
server-id = 11            #标识唯一id(必填) 注意不能与从服务器id一样
log-bin=master-bin        #主服务器日志文件
log-slave-updates=true    #从服务器更新二进制日志
#重启服务
[root@master ~]# systemctl restart mysqld

如果你按照上面的正确安装mysql了,这里是可以正常重启的。如果启动不正常出现如下报错:

The server quit without updating PID file…

你需要使用如下命令查看是否还存在mysqld进程

ps -ef|grep mysqld

如果有,可以使用命令:kill -9 mysqld的进程号 结束它,然后重新启动mysqld

  • 登录MySQL数据库允许从库获得主服务器日志
[root@master ~]# mysql -uroot -p
  • 进入后做如下配置
#给从库放权限
replication:复制 slave:从服务器 *.*:所有数据库所有表 'mysql':身份
mysql> grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by'123456';
#刷新权限
mysql> flush privileges;

  • 重启MySQL服务,登录MySQL,查看主库信息
[root@master ~]# systemctl restart mysqld
[root@master ~]# mysql  -uroot -p
mysql> show master status;

  • 显示内容如下
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000004 |      154 |              |                  |                   |
+-------------------+----------+--------------+------------------+----------------
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值