Mysql Replication

简介

1.Replication可以实现将数据从一台数据库服务器(master)复制到一或多台数据库服务器(slave)
2.默认情况下属于异步复制,无需维持长连接
3.通过配置,可以复制所有的库或者几个库,甚至库中的一些表
4.是MySQL内建的,本身自带的

作用

1.Fail Over 故障切换
2.Backup Server 备份服务,无法对SQL语句执行产生的故障恢复,有限的备份
3.High Performance高性能,可以多台slave,实现读写分离

原理

简单的说就是master将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制日志进行数据操作
在这里插入图片描述

步骤

第一步:master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
第二步:slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经执行完master产生的所有文件,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
第三步:SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重新执行其中的事件而更新slave的数据,使其与master中的数据一致。

常见方案

1.一主多从。一般用来做读写分离的,master写,其他slave读,这种架构最大问题I/O压力集中
2.M-S-S。使用一台slave作为中继,分担Master的压力,slave中继需要开启bin-log,并配置log-slave-updates

M-S 讲解

环境

master      mysql5.7.20     10.10.10.63
slave	   mysql5. 7.20	   10.10.10.64

部署Master

创建同步数据库
mysql> create database HA;
修改配置文件
service mysqld stop #要先停服务
vim /etc/my.cnf
log-bin=mysql-bin-master  #二进制日志前缀
server-id=1   #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库, 二进制需要同步的数据库名
binlog-ignore-db=mysql  #不可以被从服务器复制的库
Systemctl restart mysqld #重启mysql
授权
mysql> grant replication slave on *.* to slave@10.10.10.64  identified by "123456";
mysql> flush privileges;
查看状态信息
mysql> show master status;
+-------------------------+----------+--------------+------------------+
| File                    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------------+----------+--------------+------------------+
| mysql-bin-master.000001 |      259 | HA           | mysql            |
+-------------------------+----------+--------------+------------------+
查看二进制文件
ls /usr/local/mysql/data/

在这里插入图片描述

mysql> show binlog events\G

在这里插入图片描述

数据一致

复制前要保证同步的数据库一致, 将导出的数据库传给从服务器

mysqldump  -uroot -p123456 HA >HA.sql  #可以导出数据库

部署slave

两台数据库服务器mysql版本要一致

mysql> show variables like '%version%';

在这里插入图片描述

测试连接到主服务器
mysql -uslave -p123456 -h 10.10.10.63

在这里插入图片描述
只有复制的权限, 是看不到其他库的。导入数据库,和主数据库服务器保持一致

mysql> create database HA;
mysql -uroot -p123456 HA<HA.sql
修改从服务器配置文件
service mysqld stop
vim /etc/my.cnf
server-id = 2  #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例。
文本框是mysql 5.1的配置
mysql>stop slave;    #停止slave
mysql> change master to master_host='10.10.10.63',master_user='slave',master_password='123456'; #配置master相关信息
mysql> start slave;    #启动slave
mysql> show slave status\G  查看状态

在这里插入图片描述
Slave_IO_Running :一个负责与主机的io通信
Slave_SQL_Running:负责自己的slave mysql进程
两个为YES 就成功了!
再到主服务器上查看状态:

mysql> show processlist \G

排错

如果遇到主从不同步,看一下主从bin-log的位置,然后再同步。
在这里插入图片描述
在主服务器上看二进制日志事件列表

mysql> show binlog events \G

从服务器执行MySQL命令下

mysql> stop slave;             #先停止slave服务
mysql> change master to master_log_file='mysql-bin-master.000001',master_log_pos=1164;
#根据上面主服务器的show master status的结果,进行从服务器的二进制数据库记录回归,达到同步的效果
mysql>slave start;                      #启动从服务器同步服务
mysql> show slave status\G;          #用show slave status\G;看一下从服务器的同步情况
Slave_IO_Running: Yes
Slave_SQL_Running: Yes    #如果都是yes,那代表已经在同步

重启从服务器,再查看状态:

slave stop;
slave start;
排错思路:

1、二进制日志没有开启
2、IPTABLES 没有放开端口
3、对应的主机 IP地址写错了

M-S-S 讲解

环境

master mysql5.7.20 10.10.10.68
slave中继 mysql5. 7.20 10.10.10.69
slave mysql5. 7.20 10.10.10.70

master服务器
mysql> grant replication slave on *.* to repl@'10.10.10.%' identified by '123456';
mysql> flush privileges;
vim /etc/my.cnf   #修改配置 增加以下选项
server-id=1
binlog-do-db=HA
log-bin=mysql-bin-master
binlog-ignore-db=mysql
sync-binlog=1
binlog-format=row

systemctl restart mysqld #重启服务

#### 中继服务器
导入数据库
配置my.cnf

vim /etc/my.cnf
server-id= 2 #修改主配置文件也要开启bin-log:
log-bin=mysql-bin-slave1
log-slave-updates=1 #把它从relay-log当中读取出来的二进制日志并且这本机上执行的操作也记录这自己的二进制日志里面,这样才能使第三台slave通过中继slave读取到相应数据变化
binlog-format=row #以行方式
systemctl restart mysqld

授权

mysql> stop slave;
mysql> change master to master_host=‘10.10.10.68’,master_user=‘repl’,master_password=‘123456’;
mysql> start slave; #查看中继服务的状态
mysql> show slave status \G
在这里插入图片描述
再授权一个用户给slave(70):

mysql> grant replication slave on *.* to 'repl'@'10.10.10.70' identified by '123456';
mysql> flush privileges;
slave服务器

导入数据库
配置my.cnf

vim /etc/my.cnf
server-id = 3
log-bin=mysql-bini-slave2
binlog-format=row
systemctl restart mysqld #重启

指定slave中继服务作为70的主

mysql> stop slave;
mysql> change master to master_host='10.10.10.69',master_user='repl',master_password='123456';
mysql> start slave;
mysql> show slave status \G #查看从服务的状态

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL replicationMySQL数据库的一种特性,它允许将数据从一个MySQL服务器复制到另一个MySQL服务器。主要用于实现高可用性、读写分离和数据备份等需求。 MySQL replication基于主从模型,包括一个主服务器和一个或多个从服务器。主服务器负责处理写操作(INSERT、UPDATE、DELETE),而从服务器负责复制主服务器上的数据,并处理读操作(SELECT)。 主服务器将写操作以二进制日志(binary log)的形式记录下来,并将这些日志传递给从服务器。从服务器将这些日志应用到自己的数据库中,以保持与主服务器的数据一致性。 MySQL replication提供了以下几种常见的复制方式: 1. 异步复制(Asynchronous Replication):主服务器将二进制日志发送给从服务器,然后立即返回给客户端,不等待从服务器的响应。这种方式效率较高,但在主服务器故障时可能会丢失一部分数据。 2. 半同步复制(Semi-Synchronous Replication):主服务器将二进制日志发送给至少一个从服务器,并等待至少一个从服务器确认接收到日志后才返回给客户端。这种方式提高了数据的可靠性,但效率稍低。 3. 同步复制(Synchronous Replication):主服务器将二进制日志发送给所有从服务器,并等待所有从服务器确认接收到日志后才返回给客户端。这种方式提供了最高的数据可靠性,但对性能有较大的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值