为什么须要主从复制?
艰深来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务零碎性能会升高。
为了晋升业务零碎性能,优化用户体验,能够通过做主从复制来加重主数据库的负载。
而且如果主数据库宕机,可疾速将业务零碎切换到从数据库上,可防止数据失落。
主从复制原理
- 主库将更新记录保留于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