MySQL主从复制的实现过程及部署

一、什么是主从复制

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

基本原理:

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。
  MySQL复制是基于主服务器在二进制日志中跟踪所有对数据库的更改。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到日志的数据。
  当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。

二、主从复制的作用

1、主数据库出现问题,可以切换到从数据库。
2、可以进行数据库层面的读写分离。
3、可以在从数据库上进行日常备份。

三、复制过程

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

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

误区主从复制能否代替备份?

答案:不能

例如:误操作,也会被同步到从服务器;如果你在主上面误删除了某个表或者库,这个操作同样会被同步到从服务器。

面试题:主从复制的最大问题是什么?

答案:延迟问题

四、主从复制的具体操作

Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份的数据库中。实现mysql数据库的热备份。

要想实现双机的热备,首先要了解主从数据库服务器的版本的需求。要实现热备mysql的版本都高于3.2。还有一个基本的原则就是作为从数据库的数据版本可以高于主服务器数据库的版本,但是不可以低于主服务器的数据库版本。

当然要实现mysql双机热备,除了mysql本身自带的REPLICATION功能可以实现外,也可以用Heartbeat这个开源软件来实现。不过本文主要还是讲如何用mysql自带的REPLICATION来实现mysql双机热备的功能。

环境介绍:

主服务器(Master) 192.168.88.10
从服务器(Slave) 192.168.88.10
MySQL:5.5版本
防火墙状态:关闭

1、开启二进制日志

二进制日志,即binlog日志。由于Mysql不同版本之间的(二进制日志)binlog格式可能会不太一样,因此最好的搭配组合是主(Master)服务器的Mysql版本和从服务器(Slave)版本相同或者更低,主服务器的版本肯定不能高于从服务器版本。

我们分别在主从服务器上开启二进制日志

打开MySQL主配置文件

vim /etc/my.cnf

在标签[mysqld]中添加两行:

log-bin=mysql-bin	#启动二进制日志
server-id=***		#服务器ID号,一般以IP结尾的数字,必须设置不同

在这里插入图片描述

2、在主服务器上授权

进入mysql操作界面,在主服务器(Master)上为从服务器(Slave)建立一个连接帐户,该帐户必须授予REPLICATION SLAVE权限。因为从mysql版本3.2以后就可以通过REPLICATION对其进行双机热备的功能操作。

操作指令如下:

mysql> grant replication slave on *.* to asd@'192.168.88.20' identified by '123456';
mysql> flush privileges;	#刷新配置

创建好同步连接帐户后,我们可以通过在从服务器(Slave)上用replicat帐户对主服务器(Master)数据库进行访问下,看下是否能连接成功。

mysql -h 192.168.88.10 -uasd -p123456

3、查看二进制文件

继续在主服务器(Master)上面登陆MySQL,输入:

show master status;

在这里插入图片描述

4、配置从服务器(Slave)

在从服务器(Slave)上面登陆MySQL,输入:

change master to
master_user='asd',						#授权用户
master_password='123456',				#密码
master_host='192.168.64.24',			#主机IP
master_log_file='mysql-bin.000003',		#主服务器的二进制日志
master_log_pos=259;						#当前日志大小

输入完之后推出输入库,到MySQL目录下,我们可以看到master.info这个文件。

在这里插入图片描述

5、开启从服务器(Slave)

在从服务器(Slave)上面登陆MySQL,输入:

show slave status\G;

在这里插入图片描述

6、验证主从复制

先到主服务器(Master)上创建一个叫abc的库

create database abc;

然后到从服务器(Slave)上查看:

show databases;

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章