为什么需要主从复制?

通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。

为了提升业务系统性能,优化用户体验,可以通过做主从复制来减轻主数据库的负载。

而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。

主从复制原理

  • 主库将更新记录保存于Binlog文件中,并通过Binglog Dump线程发送给从库。
  • 从库的I/O线程从主库读取Binlog更新的数据,写入到Relay log中。
  • 从库的SQL线程读取Relay log文件的数据写入从库,实现同步。

采用GTID (Global Transaction ID)主从复制方式,保证了每个在主库上提交的事务在集群中有一个唯一的ID。

这种方式强化了数据库的主从一致性,故障恢复以及容错能力。

相比于早期通过master_log_file,master_log_pos同步的主从复制,省去了从库宕机重启后,需要重新配置的问题。

接下来介绍在虚拟机centos8版本,实现GTID主从复制的三大步骤:

一.MySQL8.0安装

1.1、使用rpm来安装MySQL

wget https://repo.mysql.com/mysql80-community-release-el8-1.noarch.rpm

1.2、启动mysql并设置开机自启动

systemctl start mysqld.service

1.3、关闭防火墙并设置开机不启动

systemctl stop firewalld.service

1.4、登录,无需密码,当前最新版本为8.0.26

mysql

1.5、查看BINLOG状态,最新版本默认已经开启

mysql> show variables like '%log_bin%';

1.6、复制安装好MySQL8的虚拟机镜像,作为从库二.主库配置

2.1、设置server-id,打开GTIT

vim /etc/my.cnf

2.2、登录mysql,添加用于同步的数据库账号

mysql> create user 'kunlun'@'%' identified by '123456';

三.从库配置

3.1、删除auto.cnf,重启自动生成server-uuid

rm -f /var/lib/mysql/auto.cnf

3.2、设置server-id, 主库和从库server-id不要重复

vim /etc/my.cnf

3.3、登录mysql,配置主从同步

mysql> change master to

3.4、启动从库服务

mysql> start slave;

3.5、查看状态

mysql> show slave status\G

3.6、测试

在主库创建数据库:

mysql> create database mydb;

在从库查看:

mysql> show databases;

至此,GTID方式的主从复制已经搭建成功。

注意

要实现MySQL的Replication,首先必须打开master端的binlog(mysql-bin.xxxxxx)日志功能,否则无法实现mysql的主从复制。

因为MySQL的整个主从复制过程实际上就是:slave端从master端获取binlog日志,然后再在自己身上完全顺序的执行该日志中所记录的各种SQL操作。

KunlunDB项目已开源

【GitHub:】
https://github.com/zettadb

【Gitee:】
https://gitee.com/zettadb

END

03-05 15:03