MySQL主从复制的原理:
主库发送更新事件到从库,从库读取更新记录,并执行更新记录,从而使主机和从机的内容保持一致。
主机有一个binlog日志,主要记录主机所有的变更记录文件。并创建一个binlog dump进程,将binlog的内容发送到从库。
当start slave开始执行时,从机会产生一个I/O线程,读取主库传过来的binlog的内容并将其保存到从机的relay log(中继日志),此时从机会产生一个SQL线程,从relay log(中继日志)里面读取内容,并将内容写入到从机的数据库。
配置如下:
主机 :192.168.75.168
从机 :192.168.75.169
要求:相同的MySQL版本,两台都是centos 7 版本的虚拟机
首先,需要将两台虚拟机关闭防火墙
systemctl stop firewalld
setenforce 0
getenforce
若是permissive 设置成功
其次,若从机是主机克隆过来,需要将两台机子的uuid进行修改(注意是修改,不是减少和增加),并将其IP地址进行修改。若是两台MySQL相同版本的不同主机,请忽略。
配置主机:
1 修改配置文件
vim /etc/my.cnf
配置内容如下:
[mysqld] # 开启二进制日志
server_id = 1 # 配置唯一的server_id
log-bin=mysql-bin # 获取master二进制文件名及位置
log-bin-index=master-bin.index # 常进啊一个用于slave和master通信的用户账号
systemctl restart mysqld
2 在主机上建立账户并授权slave
create user 'copy'@'%' identified with mysql_native_password by 'Nebula@123'; # 创建
copy用户 ,用于让从数据库连接
grant replication slave on *.* to 'copy'@'%'; # 赋予权限
flush privileges; # 刷新授权表信息
在从机上测试验证是否可以登录
mysql -h192.168.75.168 -ucopy -pNebula@123;
在数据库中输入
show master status;
显示
从机上配置:
1 修改配置文件
[mysqld]
server_id = 2
relay-log=relay-log
relay-log-index = relay-log.index
systemctl reatart mysqld
2 登录数据库mysql -uroot -pNebula@123(注意一定要用root登录数据库)
mysql> change master to
-> master_host = '192.168.75.168',
-> master_user = 'copy',
-> master_password = 'Nebula@123',
-> master_log_file = 'mysql-bin.000003',
-> master_log_pos = 853;
3 开启复制
start slave;
4 查看主从复制是否配置成功
show slave status \G;
出现俩个yes就是配置成功
5 测试主从复制是否成功
在主机上进行创建库和表
create database aa;
use aa;
create table tab1 (id auto_increment,name varchar(10),primary key(id));
insert into tab1 (id,name) values (1,'why');
select * from tab1;
desc tab1;
再从机上查看库和表是否创建
自此,数据库的主从复制,拿下!!!