Mariadb知识点梳理--简单主从复制搭建

232 阅读3分钟

为什么要进行主从复制

以前咱们做实验使用的mariadb都是单节点的,存在单点故障,如果服务出现问题,整个系统就挂掉了。那么为了解决这个单点问题,mariadb和mysql都有复制功能,简单来说就是有一个主节点(master),一个或者多个从节点(slave), 主节点可读可写,从节点只能进行读操作,这样数据在主节点更新后复制一份给从节点,保持两个数据库节点的数据集是一样的,这样做好处很多,下面分别介绍。

使用数据库复制功能的优势

  • 横向扩展,增加多个从节点后,读操作可以被分散到这些节点上去,从而降低主节点压力,使用场景为读多写少,可以做到读写分离。
  • 数据分析,对于需要进行数据处理分析的场景来说,使用从节点的数据进行分析,可以大大降低主节点压力。
  • 备份用途,可以在从节点上进行备份操作,于此同时主节点继续正常提供服务,毫无影响。

复制步骤和原理说明

  1. 首先主节点上,在事务提交时会把数据变更作为事件记录在二进制日志(BINLOG)中。
  2. 从节点请求主节点的binlog事件,主节点通过自身的BINLOG Dump线程将需要的数据发送给从节点的IO线程。
  3. 从节点将刚才IO线程收到的数据写入到中继日志Relay Log(跟BINLOG类似,使用完了定期会进行删除)中。
  4. 从节点上的SQL线程读取中继日志并进行应用,从而保证与主节点数据一致。

可以看到整个过程一共涉及3个线程,主节点这边一个binlog dump,从节点这边俩线程,一个IO线程,一个SQL线程.

实验环境说明

本次实验使用两个虚拟机,分别都安装了mariadb最新版本.

  • Master VM: 192.168.58.131/24
  • Slave VM: 192.168.58.135/24

主节点上的操作

首先编辑配置文件,打开二进制日志功能,并设置一个唯一识别的server id.

log_bin=binlog_master
server_id=1
binlog_format=row

format等于row表示记录二进制日志的时候记录具体行的变化,而不是只记录sql语句,这样更详细,更能保持数据一致性,但是log占用磁盘空间比较大。

然后创建用于复制的用户(repuser),步骤如下(连接到mysql命令行下):

GRANT REPLICATION SLAVE ON *.* to 'repuser'@'192.168.58.%' identified by 'P@ssw0rd';
FLUSH PRIVILEGES;

重启数据库服务,以便配置文件的修改生效。

systemctl restart mariadb

重启过后再次登录主节点,使用下面命令观察下主节点的情况:

show master status;

可以看到正在使用的binlog文件名以及具体写到了什么位置,记录好.

从节点的配置

首先也是编辑配置文件:

server_id=2

只需要添加serverid就可以了暂时,只是注意不要和主节点一样,这是设置为2.

设置完需要重启数据库服务.

systemctl restart mariadb

下面开始配置主从关系,指定主节点是谁,用户密码是什么,还有从哪里开始复制。

CHANGE MASTER TO MASTER_HOST='192.168.58.131',MASTER_USER='repuser',MASTER_PASSWORD='P@ssw0rd',MASTER_LOG_FILE='binlog_master.000001',MASTER_LOG_POS=0;

最后的POS=0表示从一开始复制,接着开启slave:

start slave

此时使用下面的命令可以看到线程的情况,都是running就是对的:

show slave status;

此时主从复制已经配置完毕,咱们来在主节点上创建一个新的数据库,看看有没有同步到从库上。

create database testdb2

从节点上已经出现了新建的数据库,表示复制已经工作正常了。

解除主从复制关系

如果需要彻底删除主从关系,那么需要在从库上进行下面的操作:

stop slave;
reset slave all;

经过上面的操作后,主从关系的记录就删除了,此时在从节点上show slave status已经看不到输出了。