搭建mysql主从复制

搭建mysql主从复制
##1.主从复制的概念
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
###主要用途
1.1.读写分离
1.2数据实时备份,当系统中某个节点发生故障时,可以方便的故障切换
1.3高可用HA
1.4架构扩展
2.1 mysql主从复制原理
MySQL主从复制涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread, SQL thread)运行在从节点,如下图所示:
在这里插入图片描述

  1. 主节点 binary log dump 线程
    当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。

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

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

对于每一个主从连接,都需要三个进程来完成。当主节点有多个从节点时,主节点会为每一个当前连接的从节点建一个binary log dump 进程,而每个从节点都有自己的I/O进程,SQL进程。从节点用两个线程将从主库拉取更新和执 行分成独立的任务,这样在执行同步数据任务的时候,不会降低读操作的性能。比如,如果从节点没有运行,此时I/O进程可以很快从主节点获取更新,尽管SQL进程还没有执行。如果在SQL进程执行之前从节点服务停止,至少I/O进 程已经从主节点拉取到了最新的变更并且保存在本地relay日志中,当服务再次起来之后,就可以完成数据的同步。

主从复制的步骤
1.主库将所有的写操作记录在binlog日志中,并生成log dump线程,将binlog日志传给从库的I/O线程
2.从库生成两个线程,一个是I/O线程,另一个是SQL线程
3.I/O线程去请求主库的binlog日志,并将binlog日志中的文件写入relay log(中继日志)中
4.SQL线程会读取relay loy中的内容,并解析成具体的操作,来实现主从的操作一致,达到最终数据一致的目的

配置主从的步骤
1.确保从数据库与主数据库里的数据一致
2.在主数据库里创建一个同步账户授权给从数据库使用
3.配置主数据库(修改配置文件)与开启binlog日志
4.配置从数据库(修改配置文件)
5.配置从节点
3.1 Master节点配置

MySOL支持一台主服务器同时向多台从服务器进行复制操作,从服务器同时可以作为其他从服务器的主服务器,如果MySQL主服务器访问量比较大,可以通过 复制数据,然后在从同各器上进行查询操作,从而降低主服务器的访问压力,同时从服务器作为主服务器的备份,可以避免主服务器因为故障数据丢失的问题。

MySQL数据库复制操作大致可以分成三个步骤:
1.主服务器将数据的改变记录到二进制日志(binary log)中。
2.从服务器将主服务器的binary log events 复制到它的中继日志(relay log)中。
3.从服务器重做中继日志中的事件,将数据的改变与从服务器保持同步。

首先,主服务器会记录二进制日志,每个事务更新数据完成之前,主服务器将这些操作的信息记录在二进制日志里面在事件写入二进制日志完成后主服务器通知 存储引擎提交事务。

准备: 了解binlog日志,MySQL用户-权限

mysql服务器配置复制不难,但是因为场景不同可能会存在一定的差异化,总的来说分为一下几步:
1.在服务器上创建复制账号。
2.通知备库连接到主库并从主库复制数据。
准备服务器:
在这里插入图片描述
对于主从复制,在本质上就是通过与从数据库复制与主数据库的binlog日志文件,通过重做实现的同步; 但是一定要注意尽量保证主从服务器上安装了相同的版 本的数据库,设定主从的服务器ip地址为192.168.81.132从服务器的ip地址是192.168.81.140,192.168.81.141。 然后再主服务器上设置一个复制使用的账号,并授予replication slave权限。我们可以根据ip创建账号为slave
/*创建账号sql:
create user ‘username’@‘localhost’ identified by ‘password’;

授权grant [权限] on . to ‘username’@‘localhost’ identified by ‘password’;

*/ mysql> CREATE USER ‘slave’@‘192.168.81.%’ IDENTIFIED WITH mysql_native_password BY ‘slave’;
Query OK, 0 rows affected (0.04 sec)

mysql> select user,host from mysql.user;
mysql> GRANT REPLICATION SLAVE ON . TO ‘slave’@‘192.168.81.%’;
Query OK, 0 rows affected, 1 warning (0.00 sec)
对于MySQL的主从复制来说最重要的主要就是binlog日志,所以我们就需要开启binlog日志,并设置server-id的值。需要重启服务器之后才生效 二进制日志,也就是我们常说的binlog。

二进制日志记录了MySQL所有修改数据库的操作,然后以二进制的形式记录日志在日志文件中,其中还包括没调语句所 执行的时间和消耗的资源,以及相关的事务信息。默认情况下二进制日志功能是没有开启的,启动可以配置log-bin[=file_name]开启,
在这里插入图片描述
作用就是
1.增量备份(不是所有数据备份,而是最近的写操作)
2.用于MySQL主从复制
[root@localhost panel]# vi /etc/my.cnf

主要就是下配置文件中添加如下配置
[mysqld]
log-bin=mysql-bin
server-id=1
3.4 Slave节点配置

注意:对于使用虚拟机的同学–注意克隆之后的系统你需要稍微修改一下系统的ip 地址
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.153.131
NETMASK=255.255.255.0
GATEWAY=192.168.153.2
[root@localhost ~]# systemctl restart network

在进行配置之前,回顾一下过程

要先明确配置的架构Master-slave

  1. 配置主节点
    1.1 配置账号
    1.2 开启binlog日志

  2. 配置从节点
    2.1 配置同步日志
    2.2 指定主节点的ip, 端口, 用户…
    2.3 启动从节点
    修改配置
    [root@localhost ~]# find / -name my.cnf /etc/my.cnf
    [root@localhost ~]# vi /etc/my.cnf
    [root@localhost ~]# find / -name mysqld /etc/rc.d/init.d/mysqld /www/server/mysql/bin/mysqld
    [root@localhost ~]# /etc/rc.d/init.d/mysqld restart
    Shutting down MySQL… SUCCESS!
    Starting MySQL. SUCCESS!

在配置文件中添加

配置从节点

server-id = 2
relay_log = /usr/local/mysql/data/mysql-relay-bin
relay_log-index = /usr/local/mysql/data/mysql-relay-bin.index
log_slave_updates = 1
read_only = 1

参数介绍:
1.server_id:这是服务id系统会自动命名的,但如果机器名边画画肯能回答导致问题。可以讲你主库和备库上的log-bin设置为相同的值。
2.relay_log:指定 中继日志的位置和命名
指定主节点的ip,端口,用户
mysql> change master to master_host=‘192.168.81.132’,master_port=3306,master_user=‘slave’,master_password=‘slave’,master_log_file=‘mysql-bin.000002’,master_log_pos=155;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
启动从节点
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status \G;

对于我们来说其中的信息主要是关注
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes

reset slave all 清楚slave信息 测试的方法就是在主服务器中,添加一些数据测试观察从服务其中的数据变化情况。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值