当前位置: 首页 > article >正文

Linux--运维

Mysql主从同步

通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行 复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器

为什么要做主从复制

灾备

数据分布

负载平衡

读写分离

提高并发能力

主从复制原理

主要基于MySQL二进制日志 主要包括三个线程(2个I/O线程,1个SQL线程)

1、MySQL将数据变化记录到二进制日志中;
2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中;
3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库

详细步骤:
1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、password、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start slave
2、从库的IO线程和主库的dump线程建立连接。
3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求。
4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。
5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info中
6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay 会自动被清理purge

 实验:

使用binlog技术实现一台服务器与两台客户端的mysql主从同步

1.准备工作(一台终端设备,以及两台客户端)

终端设备:192.168.88.8

客户端1:192.168.88.9

客户端2:192.168.88.10

(1)关闭防火墙与SELinux

[root@localhost ~]# systemctl stop firewalld        #关闭防火墙

[root@localhost ~]# setenforce 0                #将SELinux改为宽容模式

 

(2)下载Mysql,使用在线安装Mysql(节省时间并且linux自带mysql的root用户没有密码) 

 [root@localhost ~]# yum -y install mysql

 

2.主库配置

(1)定义服务id,在mysql的配置文件中

 [root@localhost ~]# vim /etc/my.cnf

        server_id=1                #在[mysqld]配置下添加

 (2)重启mysql

[root@localhost ~]# systemctl restart mysqld

(3)备份需要的数据库

        先查看有哪些数据库

mysql> show databases;

 

        备份数据库

 [root@localhost ~]# mysqldump --opt -B db1 school > db.sql

(4)创建用户并授权

 mysql> create user rep@'192.168.88.%' identified with mysql_native_password by '123456';                 #创建提供远程登录的用户
mysql> grant replication slave on *.* to rep@'192.168.88.%';        #赋予该账号最高权限

 (5)查看master信息

mysql> show master status;

 

 3.从库配置

(1)定义服务id

[root@client ~]# vim /etc/my.cnf

        server_id=2          #在[mysqld]配置下添加

[root@client ~]# vim /etc/my.cnf

        server_id=3          #在[mysqld]配置下添加

 

(2)重启MySQL服务

[root@localhost ~]# systemctl restart mysqld

(3)配置从库的服务

mysql> change master to
    -> master_host='192.168.88.8',
    -> master_user='rep',
    -> master_password='123456',
    -> master_log_file='binlog.000002',
    -> master_log_pos=716;
Query OK, 0 rows affected, 9 warnings (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

(4)检测配置是否成功

 mysql> show slave status \G

 显示两个yes证明是成功

(5)报错修改

mysql replication 中slave机器上有两个关键的进程,死一个都不行,
一个是slave_sql_running,
一个是Slave_IO_Running,
一个负责与主机的io通信,
一个负责自己的slave mysql进程。

Slave_IO_Running: Connecting / No

        检查是否是防火墙未关闭 ,或者是 Master_Log_File的名字不匹配

1.重新关闭防火墙

2.     mysql> slave stop;                 
        mysql>CHANGE MASTER TO MASTER_LOG_FILE='binlog.****** ';  #修改名称
        mysql> slave start;                               
        mysql> show slave status\G      

 Slave_SQL_Running: No

        1.程序可能在slave上进行了写操作
        2.也可能是slave机器重起后,事务回滚造成的.

 解决办法:
mysql> stop slave ;
mysq1>Set GLOBALE SQL SLAVE SKIP COUNTER=1.
mysql> start slave

4.测试

(1)客户端是否可以登录主数据库

[root@client ~]# mysql -u rep -h 192.168.88.8 -p         #-h 远程登录,属于设备ip

Enter password:

 

 

(2)测试数据是否同步 

mysql> create database db3;        #创建一个数据库
Query OK, 1 row affected (0.01 sec)

服务端 192.168.88.8

客户端192.168.88.9

 

客户端192.168.88.10

 


http://www.kler.cn/a/512444.html

相关文章:

  • 我在广州学Mysql 系列——触发器的使用
  • 通过Ukey或者OTP动态口令实现windows安全登录
  • MongoDB vs Redis:相似与区别
  • SpringCloud nacos 2.0.0 + seata 2.0.0
  • 2024年博客之星年度评选—创作影响力评审入围名单公布
  • 免费使用 Adobe 和 JetBrains 软件的秘密
  • 在 WiFi 连接的情况下,查找某一个 IP 地址所在位置
  • Trimble三维激光扫描-地下公共设施维护的新途径【沪敖3D】
  • PHP函数
  • 检查w-form-select 组件是否正确透传了 visible-change 事件
  • 0基础跟德姆(dom)一起学AI 自然语言处理18-解码器部分实现
  • 阳振坤:AI 大模型的基础是数据,AI越发达,数据库价值越大
  • 基于SpringBoot的健身房管理系统【源码+文档+部署讲解】
  • 百度飞桨基与UIE结合Doccano的微调来训练自己的数据格式以满足复杂生产环境的数据识别的需要
  • 你了解什么是股指期货贴水套利吗?
  • 网络编程 | UDP组播通信
  • 【useReducer Hook】集中式管理组件复杂状态
  • CSS笔记基础篇02——浮动、标准流、定位、CSS精灵、字体图标
  • 实测点云标注工具
  • linux 安装mysql5.6
  • OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用
  • Linux高级--3.3.1 C++ spdlog 开源异步日志方案
  • Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放
  • 实现二叉树_堆
  • 【Mac】ComfyUI 部署
  • 算法题目总结-链表