作业四:简述mysql 主从复制原理及其工作过程,配置一主两从并验证。
主从原理:MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。
主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作。
1.基于binlog的主从同步
准备三台虚拟机192.168.1.100(Mater),192.168.1.110(slave-1)和192.168.1.120(slave-2)
192.168.1.100(Mater)
#编辑配置文件
[root@master ~]# vim /etc/my.cnf
server_id=100#设置id为100#重新启动mysql
[root@master ~]# systemctl restart mysqld.service
#关闭防火墙
[root@master ~]# systemctl stop firewalld
#建立用户repl@'%'使用远程连接
mysql> create user repl@'%' identified with mysql_native_password by 'Abc1234+';
#确保每台SLAVE都能连得上MASTER
mysql> grant replication slave on *.* to repl@'%';
#查看日志文件名
mysql> SHOW MASTER status;
192.168.1.110(slave-1)
#编辑配置文件
[root@slave1 ~]#vim /etc/my.cnf
server_id=110#设置id为110#重新启动mysql
[root@slave1 ~]#systemctl restart mysqld.service
#关闭防火墙
[root@slave1 ~]# systemctl stop firewalld
#与Master(192.168.1.100主机)建立连接
mysql> change master to
-> master_host='192.168.1.100',
-> master_user='repl',
-> master_password='Abc1234+',
-> master_log_file='binlog.000001',
-> master_log_pos=690;mysql> start slave;
#同步功能成功开启
mysql> show slave status\G;
192.168.1.120(slave-2)
#编辑配置文件
[root@slave2 ~]#vim /etc/my.cnf
server_id=120#设置id为120#重新启动mysql
[root@slave2 ~]#systemctl restart mysqld.service
#关闭防火墙
[root@slave2 ~]# systemctl stop firewalld
mysql> change master to
-> master_host='192.168.1.100',
-> master_user='repl',
-> master_password='Abc1234+',
-> master_log_file='binlog.000001',
-> master_log_pos=690;mysql> start slave;
mysql> show slave status\G;
测试:
当在192.168.1.100主机上创建timinglee库,timinglee.userlist表。
mysql> create database timinglee;
mysql> use timinglee;
mysql> create table timinglee.userlist(username varchar(10) not null,password varchar(50) not null);
mysql> INSERT INTO timinglee.userlist values('lee','123');
mysql> show databases;
192.168.1.110和192.168.1.120主机的数据库上同时创建timinglee库,timinglee.userlist表。
2.基于gtid的主从同步
192.168.1.100(Mater)
#开启gtid
[root@master Mysql]# vim /etc/my.cnf
gtid_mode=ON
enforce-gtid-consistency=ON#开启MySQL
[root@master Mysql]# systemctl restart mysqld.service
192.168.1.110和192.168.1.120
#同理开启gtid
[root@slave1 ~]# vim /etc/my.cnf
gtid_mode=ON
enforce-gtid-consistency=ON
[root@slave1 ~]# systemctl restart mysqld.service[root@slave2 ~]# vim /etc/my.cnf
gtid_mode=ON
enforce-gtid-consistency=ON
[root@slave2 ~]# systemctl restart mysqld.service
mysql> change master to
-> master_host='192.168.1.100',
-> master_user='rep',
-> master_password='Abc1234+',
-> master_auto_position=1;
mysql> start slave;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='repl',MASTER_PASSWORD='Abc1234+', MASTER_AUTO_POSITION=1;
mysql> start slave;