Mysql 5.5 实现主从同步一主一从(图文详细教程)

文章目录

  • Mysql 5.5 实现主从同步一主一从(图文详细教程)
    • 1、主从同步是什么
    • 2、主从同步有什么作用
    • 3、实现原理
    • 4、具体操作(需要3个线程执行)
    • 5、资源准备
    • 6、主节点(sql-master-125)搭建
      • 1):主节点master常用参数介绍
      • 2):修改主库(master)配置
      • 3):创建用于同步的账号
      • 4):查看主节点(master)节点状态
    • 7、从节点(sql-slave-126)搭建
      • 1):从节点(slave)参数介绍
      • 2):修改从库(sql-slave-126)配置
      • 3):执行执行链接主服务器命令
      • 4):启动slave同步进程
      • 5):查看状态(当Slave_IO_Running、Slave_SQL_Running)同为yes即为启动成功。
    • 8、效果展示
      • 1):查看主节点以及从节点状态
      • 2):查询主节点(master)与从节点(slave)中同步的数据库信息、确认数据一致。
      • 3):主节点(master)新增表数据、确认从节点(slave)是否准实时同步。
      • 4):主节点(master)新建表、查看从节点(slave)数据库表状态;
      • 5):若有不足之处、请多海涵。其它功能请自行测试....

Mysql 5.5 实现主从同步一主一从(图文详细教程)

1、主从同步是什么

  • 1)主数据通常是指实时生产数据库。
  • 2)从同步是在一个交换节点设立高精度的基准时钟,通过传输链路把 此基准时钟信号送到网中各个从节点,利用 此基准时钟信号送到网中各个从节点,利用 锁相环 技术吧本地时 钟频率锁定在基准时上,从而实现网内各节点之间的信号同步。 数据库 主从同步 , 是用来建立一个和主数据库完全样的环境, 是用来建立一个和主数据库完全样的环境称为从数据库。

2、主从同步有什么作用

  • 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
  • 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
  • 读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

3、实现原理

  • 主数据库(master)有bin-log日志,记录了主库总所有的sql语句。在从数据库(slave)中把主库(master)的bin-log日志拉取过来、重新relay-log再次执行这些语句即可。

4、具体操作(需要3个线程执行)

  • 1)bin-log输出线程:每当有slave连接到master的时候,master都会创建一个线程等待发现哪个bin-log内容到slave。
  • 2)slave I/O线程: 当从库slave开启后,slave会创建一个I/O线程,会自动链接到master并请求主库发送bin-log里面更新的记录都slave上,从本地IO进程读取主库发送的bin-log内容并保存到本地。
  • 3)slave的SQL线程:从库slave启动会新建一个sql线程、这个线程会读取slave I/O线程内容并写入到relay log 中更新事件并执行。
  • 对于每一个主从复制的连接,都有三个线程。拥有多个slave 的master为每一个连接到master 的slave 创建一个bin-log 输出线程,每一个slave都有它自己的I/O 线程和SQL 线程。
    Mysql 5.5 实现主从同步一主一从(图文详细教程)_第1张图片

5、资源准备

  • 准备主从服务器(mysql 已安装)
  • 主(sql-master-125)、ip:192.168.44.125
  • 从(sql-slave-126)、ip:192.168.44.126
  • 准备测试数据库(主从库必须要有)
CREATE DATABASE `task_db`;

USE `task_db`;

DROP TABLE IF EXISTS `tb_user`;

CREATE TABLE `tb_user` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

insert  into `tb_user`(`id`,`name`) values (1,'刘一'),(2,'陈二'),(3,'张三'),(4,'李四'),(5,'王五');
  • 虚拟机配置请参考:https://blog.csdn.net/weixin_44187730/article/details/85121157
  • Mysql安装请参考:https://blog.csdn.net/weixin_44187730/article/details/85693563

6、主节点(sql-master-125)搭建

1):主节点master常用参数介绍

参数 描述
server-id=1 当前Mysql服务器标识
log-bin=mysql-bin 控制master的是否开启binlog记录功能
expire_logs_days=7 删除多少天之前的bin-log日志
binlog-do-db=task_db 指定数据库(举例 task_db库)的更新到二进制日志中
binlog-do-table=tb_user 指定表(tb_user)的更新到二进制日志中
binlog-do-table=mysql 指定不需要同步的数据库(举例 mysql库)
max_binlog_size master的每个二进制日志文件的大小,默认1G、当日志文件到达1G会重新创建一个日志文件
log_slave_updates 此参数控制slave数据库是否把从master接受到的log并在本slave执行的内容记录到slave的二进制日志中,在级联复制环境中(包括双master环境),这个参数是必须的

2):修改主库(master)配置

1、vim /etc/my.cnf

2、在对应位置添加如下内容:
[mysqld]

#server-id(不可重复)、log-bin该两项配置默认开启、请留意my.cnf文件
server-id=1 
log-bin=mysql-bin

#演示用的的task_db、如有需要请按照实际修改
binlog-do-db=task_db
expire_logs_days=7 

3、保存退出、并重启mysql服务、systemctl restart mysql

Mysql 5.5 实现主从同步一主一从(图文详细教程)_第2张图片

3):创建用于同步的账号

创建用户:allowsalve,密码为:147258,并授权。
GRANT REPLICATION SLAVE ON *.* TO 'allowsalve'@'192.168.44.%' IDENTIFIED BY '147258';

#刷新用户权限
flush privileges;

4):查看主节点(master)节点状态

show master status;

Mysql 5.5 实现主从同步一主一从(图文详细教程)_第3张图片

7、从节点(sql-slave-126)搭建

1):从节点(slave)参数介绍

参数 描述
server-id=1 当前Mysql服务器标识
log-bin=mysql-bin 开启二进制bin-log日志
relay-log=relay-bin 中继日志文件的路径名称
relay-log-index=relay-bin 中继日志索引文件的路径名称
read_only=1 使数据库只读,可以保证slave只接受master的更新,而不接受client的更新。
skip_slave_start 使slave在mysql启动时不启动复制进程,mysql起来之后使用 start slave启动,建议必须
replicate-do-db 只复制指定数据库
replicate-do-table 只复制指定表
replicate-ingore-table 忽略指定表
max_relay_log_size slave上的relay log的大小,默认是1G
relay_log_info_file 中继日志状态信息文件的路径名称
relay_log_purge 当relay log不被需要时就删除,默认是on
log_slave_updates 同master节点作用相同

2):修改从库(sql-slave-126)配置

1、vim /etc/my.cnf

2、在对应位置添加如下内容:
[mysqld]

#server-id(不可重复)、log-bin该两项配置默认开启、请留意my.cnf文件
server-id=2 
log-bin=mysql-bin

#演示用的的task_db、如有需要请按照实际修改
replicate-do-db=task_db
read_only=1

3、保存退出并重启、systemctl restart mysql

在这里插入图片描述

3):执行执行链接主服务器命令

CHANGE MASTER TO
         MASTER_HOST='192.168.44.125',
         MASTER_USER='allowsalve',
         MASTER_PASSWORD='147258',
         MASTER_LOG_FILE='mysql-bin.000011',
         MASTER_LOG_POS=247;

4):启动slave同步进程

#启动从节点(slave)
start slave;

5):查看状态(当Slave_IO_Running、Slave_SQL_Running)同为yes即为启动成功。

#查看从节点(slave)状态
show slave status\G;

slave启动成功:
Mysql 5.5 实现主从同步一主一从(图文详细教程)_第4张图片

8、效果展示

1):查看主节点以及从节点状态

#主节点(master)
show master status;
#从节点(slave)
show slave status\G;

Mysql 5.5 实现主从同步一主一从(图文详细教程)_第5张图片
特别说明:主节点(master)的日志文件File与位置Position会持续发生变化、从节点(slave)在链接master的时候、第一次需要确认主节点(master)的File与Position,前文主节点的File为mysql-bin.00011、Position为247只是代表一个执行同步的切入点、请勿混淆。

2):查询主节点(master)与从节点(slave)中同步的数据库信息、确认数据一致。

#选中数据库
use task_db;

#查看当前数据库中所有的表
show tables;

#查询tb_user表数据信息
select * from tb_user;

Mysql 5.5 实现主从同步一主一从(图文详细教程)_第6张图片

3):主节点(master)新增表数据、确认从节点(slave)是否准实时同步。

#主节点(master)添加两台新数据
insert into tb_user(name) values('赵六'),('孙七');

#从节点(slave)查看新的表数据
select * from tb_user;

同步成功:
Mysql 5.5 实现主从同步一主一从(图文详细教程)_第7张图片

4):主节点(master)新建表、查看从节点(slave)数据库表状态;

#主库(master)创建新表tb_dept
CREATE TABLE tb_dept(
id INT(4) PRIMARY KEY,
NAME VARCHAR(20) 
);

#查看从库(slave)中所有表
show tables;

同步成功:
Mysql 5.5 实现主从同步一主一从(图文详细教程)_第8张图片

5):若有不足之处、请多海涵。其它功能请自行测试…

你可能感兴趣的:(Linux,MySQL)