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.重新关闭防火墙

  1. 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

相关推荐
努力学习的小廉17 小时前
深入了解linux网络—— 守护进程
linux·运维·网络
wheeldown17 小时前
【Linux】从内存布局到信号屏蔽:Linux 内核态与用户态交互核心知识点汇总
linux·运维·服务器
落羽的落羽17 小时前
【Linux系统】C/C++的调试器gdb/cgdb,从入门到精通
linux·服务器·c语言·c++·人工智能·学习·机器学习
张彦峰ZYF17 小时前
高频面试题(含笔试高频算法整理)基本总结回顾5
linux·运维·服务器
liuccn18 小时前
Ubuntu 22.04 离线升级 OpenSSH 到 9.8p1
linux·ubuntu·github
DO_Community18 小时前
裸金属 vs. 虚拟化 GPU 服务器:AI 训练与推理应该怎么选
运维·服务器·人工智能·llm·大语言模型
徐子元竟然被占了!!18 小时前
Linux的df和du
linux·运维·服务器
集大周杰伦18 小时前
Linux网络编程核心实践:TCP/UDP socket与epoll高并发服务器构建
linux·tcp/ip·网络编程·socket·字节序·套接字·i/o多路复用
星哥说事18 小时前
NAS/SAN存储:NFS/iSCSI/FC 存储协议与应用场景
运维
科技峰行者18 小时前
华为发布Atlas 900 DeepGreen AI服务器:单机柜100PF算力重构AI训练基础设施
服务器·人工智能·华为·aigc·gpu算力