mysql主从复制

  • 准备与说明

  1. 搭建一主一从的主从服务
  2. 在两台服务器安装两个相同的mysql。可以参考文章:https://blog.csdn.net/shuair/article/details/118393294
  • 约定简称

  1. 主机:主mysql所在服务器,主mysql一般用作增删改
  2. 从机:从mysql所在服务器,从mysql一般用作查
  • 网络环境

保证主从两台服务器可以互相访问,要分别关闭防火墙,如果服务器有安全组,还要在安全组配置安全策略

查看主机(从机)防火墙状态

systemctl status firewalld

如果防火墙开启,要关闭

systemctl stop firewalld

验证主从服务器之间是否可以相互访问

在主机访问从mysql

mysql -h从机ip -uroot -p

在从机访问主mysql

mysql -h主机ip -uroot -p
  • 主从复制的原理

主mysql(master)把所有的写操作写到Binary log日志文件中,从mysql(slave)读取主mysql的Binary log日志,并写到自己的Relay log(中继日志)里,写完后,再到数据库中执行

mysql主从复制是从接入点开始复制

  •  配置主mysql

编辑主mysql配置文件

vim /etc/my.cnf

在[mysqld]节点添加以下配置

#主服务唯一ID,不能与从机等重复
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可配置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库,设置了需要复制的数据库,就可以不配置忽略的数据库了
binlog-do-db=testdb
#设置binlog日志模式
binlog_format=STATEMENT

只有binlog-do-db配置的数据库才会主从复制,先不要创建主从复制的数据库

binlog日志的三种模式(binlog_format的值)

  1. STATEMENT:复制sql语句,当sql语句中包含获取当前时间、获取当前主机名称等函数时,可能导致数据不一致
  2. ROW:行模式,记录每一行数据的变化,更新语句修改多条数据等操作时,效率较低
  3. MIXED:sql语句中有的函数的时候,使用ROW模式,没有函数时切换成STATEMENT模式。但是该模式识别不了系统变量,如@@hostname(获取当前主机名称)

重启主mysql

systemctl restart mysqld

查看主mysql状态

systemctl status mysqld
  • 配置从mysql

编辑从mysql配置文件

vim /etc/my.cnf

在[mysqld]节点添加以下配置

#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

重启从mysql

systemctl restart mysqld

查看从mysql状态

systemctl status mysqld

配置好主从mysql后,还需要在主从mysql执行相应的sql语句,才能真正做到主从复制

  • 主mysql执行命令

创建一个只有复制权限的用户,该用户设置为不可给其它用户授权 (不包含with grant option)

grant REPLICATION SLAVE on *.* to 'slave(用户名)'@'%' identified by '123123(密码)';

查看主mysql二进制日志文件的状态信息

show master status;

记录binlog日志的文件名(File的值),及接入点(Position的值),暂时不要再操作主mysql,防止主msyql二进制文件状态发生变化

  • 从mysql执行命令

配置执行复制操作的接入信息

CHANGE MASTER TO MASTER_HOST='主机ip',
MASTER_USER='slave(主msyql创建的主从复制的用户)',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='binlog日志名(mysql-bin.数字)',
MASTER_LOG_POS=数值(接入点);

MASTER_LOG_FILE(二进制文件)、MASTER_LOG_POS(接入点)就是上面主mysql查询的二进制日志文件信息的内容

如果之前配置过主从复制,可能会报错,先停止主从复制功能,再执行配置接入信息

停止主从复制

stop slave;

执行完配置接入信息后,启动主从复制

start slave;

reset master(在主机执行)、reset slave等操作先自行查阅含义,日后补充

查看从机主从复制状态

show slave status\G;

\G表示查询出来的字段分行显示

截图显示部分字段,如果Slave_IO_Running、Slave_SQL_Running 的值都为Yes,则说明主从复制配置成功了

此时在主mysql创建约定好的需要复制的数据库,从库就会同步创建了。

  • 快速验证主从复制

在主mysql执行命令

create database testdb;

use testdb;

create table mytbl(id int,name varchar(20));

insert into mytbl values(1,'zhang3');
insert into mytbl values(2,@@hostname);

观察主从数据库的数据,两个数据库中存储的hostname的值会不同(前提:两台机器的hostname确实不同),原因就在于binlog日志模式配置的是STATEMENT

到此mysql主从复制就配置完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值