目录
1.主从架构
环境准备
具体操作
注意uuid
1.master-主服务器的配置
2配置slave从服务器
3.测试主从同步
2.主主架构
环境准备
具体操作
①修改配置文件
②创建复制账号
③启动服务器复制线程
④测试主主架构
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
mysql 5.6版本后,引入了uuid的概念,各个结构的uuid要保证不一样,可以在MySQL中使用
show variables like '%server_uuid%'; 进行查看。
如果uuid相同,则需要进入 /var/lib/mysql/auto.cnf ,修改uuid的值,保证每个服务器都不相同。
修改完成后重启mysql服务:systemctl restart mysqld
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;
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线程
在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服务器上查看
主主架构是指,一台服务器既是master,又是另一台服务器的slave。最终任何一方做出动作,在另一方都有保存。
1.关闭防火墙(systemctl stop firewalld),清空防火墙策略(iptables -F)
2.两台服务器安装mysql,且版本一致
3.分别启动mysql服务,保证服务正常启动
注意uuid,在上面主从架构有提到。
vim /etc/my.cnf
server-id = 134
log_bin = mysql_bin
relay_log = relay-log
skip-name-resolve = on
log_slave_updates = 1
auto_increment_increment=2 #设置字段自增的步长
auto_increment_offset=1 #设置字段自增的起始数字
另一台服务器
server-id = 135
relay_log = relay-log
log_bin = mysql-log
skip-name-resolve = on
log_slave_updates = 1
auto_increment_increment=2 #设置字段自增的步长
auto_increment_offset=2 #设置字段自增的起始位置
设置完成后,重启MySQL服务
systemctl restart mysqld
在每个服务器都创建账号
create user 'copy'@'%' identified with mysql_native_password by 'Nebula@123';
grant replication slave,replication client on *.* to copy@'%';
master_log_file 和 master_log_pos,需要先查看master的状态
show master status\G
在每台服务器上都需要执行
change master to master_host='192.168.xx.xxx',
master_user='copy',
master_password='Nebula@123',
master_log_file='mysql-log.000001',
master_log_pos=690;
执行完毕没有报错后,启动复制线程
start slave
查看从服务器状态
show slave status\G
Slave_IO_Running: Yes #IO线程正常运行
Slave_SQL_Running: Yes #SQL线程正常运行
需要保证上面两个线程正常运行
在配置文件时,设置了 auto_increment_increment=2 #设置字段自增的步长
auto_increment_offset=1 #设置字段自增的起始数字
在两个服务器上设置了不同字段自增位置,在134服务器上设置起始位1,135设置位起始位2。
因此在插入数据时,id会有不同效果,以方便演示。
在134服务器上操作
create database test; #创建test数据库
use test;
create table userinfo(id int primary key auto_increment,name varchar(20) not null); #创建userinfo表,设置id自增
insert into userinfo(name) values("张三"),("李四"); #插入name,不管id,id为自增
在135服务器上操作
因为现在为主主架构,134创建的表,会在135服务器上显示,因此直接在表中插入数据。
可以看到,在135插入数据后,id的变化。