首页 > 数据库 >mysql 主从复制

mysql 主从复制

时间:2023-02-15 01:34:12浏览次数:50  
标签:主库 主从复制 source master mysql 日志 从库

概述

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库对这些日志重新执行(也叫重做),从而是的从库和主库数据保持同步。

mysql也支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链装复制。

如果需要开启慢查询日志,需要在MySQL的配置文件 /etc/my.cnf 中配置如下参数:

 

 mysql 复制的优点注意包含以下三点:

  • 主库出现问题,可以快速切换到从库提供服务
  • 实现读写分离,降低主库的访问压力
  • 可以在从库执行备份,以避免备份期间影响主库服务

原理

mysql主从复制的核心就是 二进制日志 具体过程如下:

 

 

 从上图来看,复制分成三步:

  1. master主库在事务提交时,会把数据变更记录在二进制日志文件 binlog中。
  2. 从库读取主库的二进制文件binlog,写入到从库的中继日志 relay log。
  3. slave 重做中继日志事件,将改变反映它自己的数据。

注意:这里面有两个线程:iothread 和sqlthread  

iothread线程是:在主库的二进制binlog日志有变更的时候,就会读取到从库,然后写入到中继日志relay log中

sqlthread线程是:是当中继日志有变更的时候,会读取,然后把记录的命令在从库执行一次。

搭建

搭建准备:在两台服务器上都部署mysql服务,保证mysql正常,部署mysql可以参考之前的文章

192.168.55.105 (master)

开放3306端口

命令:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd -reload

192.168.55.104 (slave)

 

 

 

 

我这里是直接关闭了服务器的防火墙:

关闭防火墙:
systemctl stop firewalld
关闭开机自启:
systemctl disable firewalld

 主库配置:

1.修改配置文件:/etc/my.cnf

#mysql 服务ID 保证整个集群环境中唯一,取值范围:1 - 2的32次幂减1 默认为1
server-id=1
#是否只读,代表只读:1   代表读写:0
read-only=0
#忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01

 

 

 2. 重启mysql服务器,使配置生效

systemctl restart mysqld
没有报错,代表配置成功

 

 

 

 3.登录mysql,创建远程连接的账号,并授予主从复制的权限

#创建test用户,并设置密码,该用户可在任意主机连接该MySQL服务
create user 'test'@'%' identified with mysql_native_password by 'Root@123456';
#为 'test'@'%' 用户分配主从复制权限
grant replication slave on *.* to 'test'@'%';

 

 

 4.通过指令,查看二进制日志坐标

show master status;

 

 

 字段说明:

  • file:从哪个二进制日志开始推送日志
  • position : 从哪个位置开始推送日志
  • binlog_ignore_db: 指定不需要同步的数据库

从库配置

1.修改配置文件:/etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=2
#是否只读,1 代表只读, 0 代表读写
read-only=1

2.重启mysql服务

systemctl restart mysqld

3.登录mysql 设置主库配置

mysql 8.0.23之后的语法:
change replication source to source_host='192.168.55.105',source_user='test',source_password='Root@123456',source_log_file='binlog.000008',source_log_pos=659;
如果是mysql8.0.23之前的版本,执行如下sql:
change master to master_host='192.168.55.105',master_user='test',master_password='Root@123456',master_log_file='binlog.000008',naster_log_pos=659;
参数名 含义 8.0.23之前
source_host 主库IP地址 master_host
source_user 连接主库的用户名 master_user
source_password 连接主库密码 master_password
source_log_fie binlog日志文件名 master_log_file
source_log_pos binlog日志文件位置 master_log_pos

 

 

 

 

 

 

4. 开启同步操作

8.0.23之后版本
start replica;
8.0.23之前版本
start slave;

5.查看主从同步状态

show replica status ; #8.0.22之后
show slave status ; #8.0.22之前

 

 重点看Replica_IO_Running 和 Replica_SQL_Running 都必须是yes

测试

1,.在主库192.168.55.105创建数据库,表,并插入数据

create database db01;
use db01;
create table tb_user(
  id int(11) primary key not null auto_increment,
  name varchar(50) not null,
  sex varchar(1)
)engine=innodb default charset=utf8mb4;
insert into tb_user(id,name,sex) values(null,'Tom', '1'),(null,'Trigger','0'),(null,'Dawn','1');

主库

 

 从库:

 

标签:主库,主从复制,source,master,mysql,日志,从库
From: https://www.cnblogs.com/slx-yyds/p/17121359.html

相关文章

  • 1.mysql架构
    mysql架构mysql的基础架构图innoDb引擎的4大特性,区别插入缓冲(Insertbuffer/ChangeBuffer)产生的原因:索引存在在磁盘,主键索引由于天然自增,无须磁盘的随机IO,只......
  • sql语气查询去重的两种方法、sql的模糊查询、sql中的日期函数、mysql字符串截取之subs
    sql语气查询去重的两种方法以下两种都可以进行去重查询,区别是:用distinct去重,只能查询到去重的属性那一列,无法查询其他字段用groupby分组查询,可以根据需求查询对应的其......
  • Python 使用mysql.connector、pymysql和 MYSQLdb(MysqlClient)操作MySQL数据库
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一。本文主要介绍安装mysql.connector,、pymysql......
  • MySQL SQL题
    1列转行 selectlcase(`name`)as`name`,sum(CASETYPEwhen'Breakfast'THEN`VALUE`else0end)asBreakfast,sum(CASETYPEwhen'Lunch'THEN`VALUE`e......
  • 干货!!!mysql如何进行优化,mysql优化环节
    MySQL优化环节有很多,我个人经验从硬件优化、软件优化、表结构设计、查询语句四个方面来考虑。硬件优化:MySQL软件本身是运行在硬件服务器之上,数据是存储在磁盘的。如果能......
  • mysql交互式外部执行sql语句
    之前一直纠结mysql如何编写交互式脚本,像Oracle那样进行交互式输出,通过Oracle的方式交互式输出在mysql中格式是乱的,最后在网上发现了mysql原来有一个-e选项编写相关脚本如......
  • Mysql数据库安全防护
    1.禁止mysql以管理员的账号权限运行加固方法:在mysql的配置文件my.cnf中配置user=mysql2.设置root用户口令并修改登录名,且不存在空密码账户检查方法:登录mysql之后,输入这个......
  • windows下mysql5.7 更改密码,更改用户名,提高数据库安全性的具体方法。
         一、二话不说,先更改my.ini,位置在 C:\ProgramData\MySQL\MySQLServer5.7,再【mysqld】节点下,增加 skip-grant-tables        这一步切......
  • window10下mysql8.0安装配置
    官网安装​​https://dev.mysql.com/downloads/mysql/​​下载完解压缩至于环境变量是不是必须要配置我不清除反正我是配置了,在Path中加入mysql文件下bin文件夹的路径然......
  • mysql慢sql监控
    1、思路之前用mysql一直没有考虑到这点,mysql慢sql监控是很重要的,它能帮我们梳理我们的业务sql到底是哪里处了问题,那么慢sql监控怎么做呢?有两种思路来实现:在应......