MySQL的主从复制架构的分布机制,是通过将MySQL的某一台主机(master)的数据复制到其他主机(slave)上。
在复制过程中一台主机作为主服务器,其他服务器则为从服务器。主服务器将更新写入到日志文件中,日志被从服务器的 I/O线程读取,并写入到从服务器创建的 中继日志中,再被从服务器的 SQL线程 读取。
具体架构图如下:
环境准备
1.关闭防火墙(systemctl stop firewalld),清空防火墙策略(iptables -F)
2.两台服务器安装mysql,且版本一致
3.分贝启动mysql服务,保证服务正常启动
具体操作
master_ip:192.168.75.134
slave_ip:192.168.75.135
注意uuid
mysql 5.6版本后,引入了uuid的概念,各个结构的uuid要保证不一样,可以在MySQL中使用
show variables like '%server_uuid%'; 进行查看。
如果uuid相同,则需要进入 /var/lib/mysql/auto.cnf ,修改uuid的值,保证每个服务器都不相同。
修改完成后重启mysql服务:systemctl restart mysqld
1.master-主服务器的配置
1.1vim /etc/my.cnf
server-id=134 #配置server-id,让主服务器有唯一ID号(让从服务器知道
他的主服务器是谁),建议使用ip最后3位
log-bin=mysql-bin #打开Mysql日志,日志格式为二进制
skip-name-resolve #关闭名称解析,(非必须)
修改完成后,重启mysql服务:systemctl restart mysqld
1.2 创建复制账号
在master服务器上创建备份账户,创建完毕后,给从服务器授权,使从服务器能够在主服务器上拷贝日志文件。
#注意:密码必须符合要求,大小写字母+数字+特殊字符
create user 'copy'@'%' identified with mysql_native_password by 'Copy@123';
grant replication slave on *.* to 'copy'@'%';
flush privileges;
1.3查看主服务器状态
show master status\G;
上图的 file 和 position 需要记录,在配置slave时会需要。
2配置slave从服务器
2.1.vim /etc/my.cnf
server-id=135 #配置server-id,让从服务器有唯一ID号,建议使用ip最后3位
relay_log=mysql-relay #打开Mysql日志,日志格式为二进制
read_only=1 #设置只读权限
log_bin=mysql-bin #开启从服务器二进制日志
log_slave_updates=1 #使得更新的数据写进二进制日志中
修改完成后,重启mysql服务:systemctl restart mysqld
2.2启动从服务器的复制线程
登录mysql,让slave连接master,并重做master日志中的事件。
change master to
master_host='192.168.75.134',
master_user='copy', #主库创建的账号
master_password='Copy@123', #创建账号的密码
master_log_file='mysql-bin.000001', #主库的二进制文件名称
master_log_pos=827; #主库的二进制文件位置
配置完成后,执行start slave #启动复制线程
2.3查看slave状态
show slave status\G;
显示结果,必须要有上图红色标注。
错误事件:
如果slave主从不一致,即Slave_SQL_Running: No 时
解决方法:
①stop slave; #停掉slave
②set global sql_slave_skip_counter=1; #跳过错误步数
③start slave; #再启动slave
④show slave status #查看slave线程
3.测试主从同步
在master服务器和slave服务器上执行
show databases;
在master服务器上创建一个新的数据库,库中创建新的表,,并插入数据。
create database copy;
create table tabl1(id int auto_increment,name varchar(10),primary key(id));
insert into tabl1 values(1,"张三");
在master服务器上查看
在 slave服务器上查看