Mysql运维篇(二) 主从复制

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人,如有侵权请留言,我及时删除。

一、主从复制的原理

主库会生成一个I/O操作线程进去写的的操作,而从库则生成两个线程,其一是I/O读取线程,其二是一个SQL线程。

1、主库将数据的操作记录到一个二进制日志中(即:binary log),也就是配置文件中指定的log-bin指定的文件就是日志文件。

2、从库将主库的日志文件拷贝到他的中继日志即配置文件中指定的relay log日志文件中,I/O线程去请求主库的bin-log日志,并将日志写入到relay log中继日志中,此时主库会生成一个log dump线程,用来给从库I/O线程传输bin-log日志件。

3、从库会更新relay log文件中的操作,将数据的改变在从库中进行数据重演即重新执行一次,即SQL线程执行操作,将日志文件中的记录变为数据操作行为再次执行,以达到主从数据最终一致性的目的。

4、需要注意的是主从复制需要大量的I/O操作,所以延时是不可避免的。

二、主从复制原理图

1、主从复制的流程图

Mysql运维篇(二) 主从复制_第1张图片

2、主从复制的优点

Mysql运维篇(二) 主从复制_第2张图片

三、环境准备工作

准备两台服务器(模拟一主一从),并安装相同版本的MySQL数据库。

主库(master)地址:192.168.10.212 端口:3306。

从库(slave)地址:197.168.197.213 端口:3306。

版本:MySQL 8.0.25。

准备工作注意事项:

1、 每个master可以有多个slave,每个slave只属于一个master;

2、 数据库的版本必须保证一致;

3、 主库与从库中配置文件中的server_id都必须唯一。

4、硬件配置,操作系统必须保持一致

5、网络带宽满足业务要求,避免网络延迟过长

四、开始部署

1、MySQL-master 修改配置文件,重启服务

Mysql运维篇(二) 主从复制_第3张图片

[root@master etc]# vi my.cnf

-----新增配置-----

server-id=1
read-only=0
------------------------------

1.1、创建登录MySQL,创建远程连接的账号,并授予主从复制的权限

USE mysql;
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Ops7565!#!#';
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';
SHOW MASTER STATUS;

Mysql运维篇(二) 主从复制_第4张图片Mysql运维篇(二) 主从复制_第5张图片

2、MySQL-slave配置,重启数据库

Mysql运维篇(二) 主从复制_第6张图片

[root@slave ~]# vi /etc/my.cnf

--------新增配置---------------

server-id=2
read-only=1

--------------------------------------

查看主从server-id 

Mysql运维篇(二) 主从复制_第7张图片Mysql运维篇(二) 主从复制_第8张图片

参考文档

mysql 从库显示:Slave_IO_Running: No 怎么办? - 简书

2.2、从库配置,关联主库

Mysql运维篇(二) 主从复制_第9张图片

mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.10.212',SOURCE_USER='itcast',SOURCE_PASSWORD='Ops7565!#!#',SOURCE_LOG_FILE='binlog.000002',SOURCE_LOG_POS=665;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

2.3、启动主从复制

启动\停止主从命令

START REPLICA; 或者 start slave  停止同步 stop REPLICA/start slave 

mysql>   START  REPLICA;
Query OK, 0 rows affected (0.00 sec)

mysql>  SHOW SLAVE STATUS\G

Mysql运维篇(二) 主从复制_第10张图片

四、测试数据同步

1、创建数据库,并在数据库中创建一个表

-- 创建数据库
CREATE DATABASE dbtest01;
USE mydatabase;
 
-- 创建表
CREATE TABLE test01(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT
);

2、主从同步查看

MySQL主节点创建数据库dbtest01,并穿件01表;

Mysql运维篇(二) 主从复制_第11张图片

主从库查看表

Mysql运维篇(二) 主从复制_第12张图片Mysql运维篇(二) 主从复制_第13张图片

3、测试增、删、改 数据

主库操作,新增数据:                                  备库操作,查看新增数据:

Mysql运维篇(二) 主从复制_第14张图片Mysql运维篇(二) 主从复制_第15张图片

主库操作,修改数据:                                     从库操作,查询数据: 

Mysql运维篇(二) 主从复制_第16张图片Mysql运维篇(二) 主从复制_第17张图片

主库操作,删除数据:                                    从库操作,查询数据: 

Mysql运维篇(二) 主从复制_第18张图片Mysql运维篇(二) 主从复制_第19张图片

五、主从复制总结

Mysql运维篇(二) 主从复制_第20张图片

你可能感兴趣的:(mysql,数据库)