MySQL8.0轻松搞定GTID主从复制
为了提升业务系统性能,优化用户体验,可以通过做主从复制来减轻主数据库的负载。
而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。
主库将更新记录保存于Binlog文件中,并通过Binglog Dump线程发送给从库。
从库的I/O线程从主库读取Binlog更新的数据,写入到Relay log中。
从库的SQL线程读取Relay log文件的数据写入从库,实现同步。
采用GTID (Global Transaction ID)主从复制方式,保证了每个在主库上提交的事务在集群中有一个的ID。
这种方式强化了数据库的主从一致性,故障恢复以及容错能力。
相比于早期通过master_log_file,master_log_pos同步的主从复制,省去了从库宕机重启后,需要重新配置的问题。
wget https://repo.mysql.com/mysql80-community-release-el8-1.noarch.rpm
rpm -ivh mysql80-community-release-el8-1.noarch.rpm
yum install mysql-server -y
systemctl start mysqld.service
systemctl enable mysqld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
mysql
mysql> show variables like '%log_bin%';
vim /etc/my.cnf
# 添加
[mysqld]
server-id=1
gtid_mode=on
enforce-gtid-consistency=true
# 重启mysql
systemctl restart mysqld.service
mysql> create user 'kunlun'@'%' identified by '123456';
mysql> grant replication slave on *.* to 'kunlun'@'%';
mysql> flush privileges;
rm -f /var/lib/mysql/auto.cnf
# 复制的虚拟机镜像,UUID会重复
vim /etc/my.cnf
# 添加
[mysqld]
server-id=2
gtid_mode=on
enforce-gtid-consistency=true
# 重启mysql
systemctl restart mysqld.service
mysql> change master to
master_host='192.168.25.139', #主库IP
master_port=3306, #默认端口
master_user='kunlun', #第二步创建的账户
master_password='123456', #密码
master_auto_position = 1;
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在主库创建数据库:
mysql> create database mydb;
在从库查看:
mysql> show databases;
至此,GTID方式的主从复制已经搭建成功。
要实现MySQL的Replication,首先必须打开master端的binlog(mysql-bin.xxxxxx)日志功能,否则无法实现mysql的主从复制。
因为MySQL的整个主从复制过程实际上就是:slave端从master端获取binlog日志,然后再在自己身上完全顺序的执行该日志中所记录的各种SQL操作。
END
相关文章