MySQL的主从架构、利用MySQL主从架构实现主从复制(binglog机制)

一、MySQL主从复制是什么?

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。 MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
简单来说,就是将数据从一台MySQL服务器复制到另一台MySQL服务器上

二、MySQL主从架构的作用

1、可以缓解MySQL的数据存储以及访问的压力

2、数据备份。可以在从服务器上复制主服务器的数据,给主服务增加一个数据备份

3、高可用。当MySQL主服务宕机后,可以切换到从服务器,继续提供数据读写功能。

4、读写分离。对于大部分业务系统来说,都是读多写少的,读请求远远多于写请求。这时,当主服务的访问压力过大时,可以将数据读请求转为由从服务来分担,主服务只负责数据写入的请求,这样大大缓解数据库的访问压力。

三、MySQL主从复制的原理(binlog)

MySQL的主从复制可以通过两种方式,一种是通过binlog日志来实现,另一种是通过GITD全局事务id来实现,这里之讲述通过binlog日志实现的方式。

1.什么是binlog

MySQL的binlog(Binary Log)是数据库中的二进制日志文件,用于记录数据库的所有更改操作,包括插入、更新、删除等,而对于select、show这类读操作并不会记录。
bin-log是MySQL-Server级别的日志,所有引擎都能用的日志,而redo-log、undo-log都是InnoDB引擎专享的,无法跨引擎生效。
这些日志文件对于数据库的恢复和复制非常重要,因为它们可以用来恢复误删的数据或进行主从复制。
网上所说的删库跑路,如果仅仅删除数据的话,是可以通过binlog日志来进行数据恢复的,但就怕那些连同binlog日志一起删除的人。

2.怎样通过binlog恢复数据

误删了数据就要想办法恢复,可以通过binlog日志恢复,由于binlog日志记录模式是追加,不会主动去删除磁盘中的日志文件,所以binlog日志文件保留的比较完整,可以找到binlog文件,拷贝一份并打开,然后里面有你删库的操作,记得删除,再利用mysqlbinlog工具导出SQL文件,最后执行该SQL文件即可恢复删库前的数据。

四、MySQL主从复制集群搭建(binlog)

1.准备工作

mysql用的都是8.0.26的版本

虚拟机ip主从关系
192.168.187.111master
192.168.187.112slave

2.master配置

  1. 修改etc 下的my.cnf配置文件
[root@mysql01 ~]# vim /etc/my.cnf


[mysqld]
# 开启binlog日志功能  存放路径
log-bin=/var/log/mysql/mysql-bin
# 配置唯一的服务器ID
server-id=1

# 下面非必须
# 设置binlog清理时间14天
expire_logs_days=14
# 设置binlog每个日志文件大小为500m
max_binlog_size=500m
  1. 创建日志目录并赋予权限
[root@mysql01 ~]# mkdir /var/log/mysql
[root@mysql01 ~]# chown mysql:mysql /var/log/mysql
  1. 重启数据库,并查看以下配置是否生效
[root@mysql01 ~]# systemctl restart mysqld
[root@mysql01 ~]# mysql -uroot -p
Enter password: 
# 查看serverid
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+
1 row in set (0.00 sec)

# 查看binlog日志功能是否开启,ON为开启状态
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)
# skip_networking默认是OFF关闭状态,启用后主从将无法通信
mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)
  1. 在主库上建立用于主从复制的账号
# 创建账号
mysql> create user 'rep1'@'%' identified by '123123';
# 授予权限以进行主从复制
mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'%';

3.slave配置

  1. 在从库上面测试之前建立的用于主从复制得账号是否可以连接主库
[root@mysql02 ~]# mysql -urep1 -p'123123' -h192.168.187.111
  1. 成功后,退出,然后修改etc 下的my.cnf配置文件
[mysqld]
#配置唯一的服务器ID
server-id=2
  1. 重启数据库,并查看以下配置是否生效
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
1 row in set (0.00 sec)

binlog日志功能不需要开启,多个从服务器才需要开启

  1. 查看主库的二进制日志的名称
mysql> show master status\G;
*************************** 1. row ***************************
             File: mysql-bin.000003
         Position: 1328
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

这里的File和Position两个参数在第5步中会用到

  1. 配置复制参数
mysql> change master to master_host='192.168.187.111',master_user='rep1',master_password='123123',master_log_file='mysql-bin.000003',master_log_pos=1328;
mysql> start slave;
  1. 查看slave的状态
mysql> show slave status\G;

在这里插入图片描述
7. 若出错,则清理掉之前的配置,执行以下命令

mysql> stop slave;
mysql> reset slave all;

4.测试

  1. 在主库中创建一个数据库和一张表
show databases ;

create database mydb01;

create table dept(
  dept_id int(10) primary key,
  name varchar(20),
  local varchar(20)
);

show tables ;

在这里插入图片描述
2. 查看从库里面的数据库和表

在这里插入图片描述

自此,MySQL主从复制完成!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值