mysql主从架构和主主架构

     

目录

1.主从架构

环境准备

具体操作

注意uuid

1.master-主服务器的配置

2配置slave从服务器

 3.测试主从同步

2.主主架构

环境准备

具体操作

①修改配置文件

 ②创建复制账号

③启动服务器复制线程

④测试主主架构

  MySQL的主从复制架构的分布机制,是通过将MySQL的某一台主机(master)的数据复制到其他主机(slave)上。

        在复制过程中一台主机作为主服务器,其他服务器则为从服务器。主服务器将更新写入到日志文件中,日志被从服务器的 I/O线程读取,并写入到从服务器创建的 中继日志中,再被从服务器的 SQL线程 读取。

具体架构图如下:

mysql主从架构和主主架构_第1张图片

1.主从架构

环境准备

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%'; 进行查看。

mysql主从架构和主主架构_第2张图片

 如果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;

mysql主从架构和主主架构_第3张图片 上图的 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;

mysql主从架构和主主架构_第4张图片

 显示结果,必须要有上图红色标注。

错误事件:

如果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服务器上查看

mysql主从架构和主主架构_第5张图片

 在 slave服务器上查看

mysql主从架构和主主架构_第6张图片

2.主主架构

        主主架构是指,一台服务器既是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为自增

mysql主从架构和主主架构_第7张图片

在135服务器上操作

         因为现在为主主架构,134创建的表,会在135服务器上显示,因此直接在表中插入数据。

mysql主从架构和主主架构_第8张图片

         可以看到,在135插入数据后,id的变化。

你可能感兴趣的:(mysql,架构,服务器)