mysql主从复制

断了今生、忘了曾经 提交于 2019-12-02 09:21:20

一:MYSQL REPLICATION

什么是MYSQL replication

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

在这里插入图片描述
REPLICATION的作用

1、Fail Over 故障切换
2、Backup Server 备份服务,无法对SQL语句执行产生的故障恢复,有限的备份
3、High Performance /pə’fɔːm(ə)ns/ 高性能,可以多台slave,实现读写分离

REPLICATION如何工作

整体上来说,复制有3个步骤:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,修改salve上的数据。

在这里插入图片描述
mysql主从复制中:

第一步: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中的数据一致。


REPLICATION常见方案:
1、ONE MASTER AND MUTI SALVE 一主多备

在这里插入图片描述
一般用来做读写分离的,master写,其他slave读,这种架构最大问题I/O压力集中
在Master上 <多台同步影响IO>


2、M-S-S
使用一台slave作为中继,分担Master的压力,slave中继需要开启bin-log,并配置log-slave-updates
在这里插入图片描述
Slave中继可使用 Black-hole 存储引擎,不会把数据存储到磁盘,只记录二进制日志


3、M-M 双主互备 (互为主从)
很多人误以为这样可以做到MySQL负载均衡,实际没什么好处,每个服务器需要做同样的同步更新,破坏了事物的隔离性和数据的一致性
在这里插入图片描述


4、M-M-M
监控三台机器互相做对方的master
在这里插入图片描述
天生的缺陷:复制延迟,slave上同步要慢于master,如果大并发的情况那延迟更严重
Mysql在5.6已经自身可以实现fail over故障切换


5、ONE SLAVE MUTI MASTER 一从对多主
好处:节省成本,将多个master数据自动化整合
缺陷:对库和表数据的修改较多

在这里插入图片描述

配置主数据库服务器XUEGOD63
创建需要同步的数据库:

mysql> create database HA;
mysql> use HA;
mysql> create table T1(id int,name varchar(20));
service mysqld stop

配置my.cnf:

vim /etc/my.cnf

log-bin=mysql-bin-master #启用二进制日志
server-id=1 #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库, 二进制需要同步的数据库名
binlog-ignore-db=mysql #不可以被从服务器复制的库

重启mysql ( 如果重启卡死现象,kill掉再启动)
Systemctl restart mysqld

授权:

mysql> grant replication slave on *.* to slave@10.10.10.64  identified by "123456";

查看状态信息:

mysql> show master status;

在这里插入图片描述
在这里插入图片描述

复制前要保证同步的数据库一致

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

将导出的数据库传给从服务器

方法:scp HA.sql  10.10.10.64:/root

配置从数据库服务器XUEGOD64

在这里插入图片描述
在这里插入图片描述
导入数据库,和主数据库服务器保持一致

mysql> create database HA;
mysql -uroot -p123456 HA<HA.sql

修改从服务器配置文件:
从服务器没必要开启bin-log日志
在这里插入图片描述

mysql>stop slave;    #停止slave

mysql> change master to master_host='10.10.10.63',master_user='slave',master_password='123456';

mysql> start slave;    #启动slave

在这里插入图片描述

在这里插入图片描述
三:部署MYSQL主主双向主从复制 M-M(恢复快照再实验)

通过mysql主主:进行mysql 双向同步数据库HA的配置
mysql主:服务端:XUEGOD63 IP:10.10.10.63
mysql主:服务端:XUEGOD64 IP:10.10.10.64

如果没有恢复快照要先清空一下二进制日志,mysql> reset master
在上面主从的基础上进行配置

配置XUEGOD63
它有两种身份:
身份1: XUEGOD64的主。 身份2: XUEGOD64的从。
vim /etc/my.cnf

server-id = 1
log-bin=mysql-bin-master
binlog-do-db=HA
binlog-ignore-db=mysql #避免同步mysql用户 相关配置

service mysqld restart

在这里插入图片描述
授权:

mysql> grant replication slave on *.* to slave@'10.10.10.%' identified by '123456';

如果不符合密码要求修改如下(5.7版本)

mysql> set global validate_password_policy=0;  #定义复杂度
mysql> set global validate_password_length=1;  #定义长度 默认是8

关闭密码强度审计,在my.cnf添加validate-password=off

grant replication slave on *.* to slave@'10.10.10.%' identified by '123456';

mysql> flush privileges; #记得刷新授权表
在这里插入图片描述
先测试一下从帐号登陆是否正常

[root@xuegod64 ~]# mysql -uslave -p123456 -h 10.10.10.63
然后作主授权给从xuegod63,
[root@xuegod64 ~]# grant replication slave on *.* to slave@'10.10.10.63' identified by '123456';

指定哪台是xuegod64的master
[root@XUEGOD64 ~]# mysql -uroot -p123456

mysql> stop slave;
mysql> change master to master_host='10.10.10.63' master_user='slave',master_password='123456';
mysql> start slave;
mysql> show slave status\G

在这里插入图片描述

再回来配置XUEGOD63
先测试一下从帐号登陆是否正常
[root@xuegod63~]# mysql -uslave -p123456 -h 10.10.10.64 #可以登陆

指定哪台是xuegod63的master
[root@XUEGOD63 ~]# mysql -uroot -p123456

mysql> change master to master_host='10.10.10.64',master_user='slave',master_password='123456';
mysql> start slave;
mysql> show slave status\G

在这里插入图片描述

插入数据测试 同步成功
在这里插入图片描述
在这里插入图片描述

mysql> show slave status \G

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意如果是复制mysql数据,uuid相同会导致同步不成功。auto.cnf
https://www.cnblogs.com/xusx/articles/6597748.html

删除主从复制

stop slave;
reset slave all;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!