mysql原理、部署mysql主从+读写分离、监控mysql主从脚本

news/2024/10/26 13:52:41/

mysql:工作原理

从库生成两个线程,一个I/O线程,一个SQL线程;

i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;

主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;

SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致

mysql主从复制用途

实时灾备,用于故障切换

读写分离,提供查询服务

备份,避免影响业务

主从部署必要条件:

主库开启binlog日志(设置log-bin参数)

主从server-id不同

从库服务器能连通主库

Mysql支持的复制类型:

1、 基于语句的复制:在主服务器上执行的sql语句,在从服务器上会执行同样的语句。Mysql默认采用基于语句的复制,效率比较高,但是有时不能实现精准复制。

2、 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。

3、 混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的复制不能精准复制时,就会采用基于行的复制。

部署mysql主从:

两台centos7
首先关闭防火墙、关闭 seliunx

systemctl stop firewalld
senetforce 0

yum 安装mariadb

yum -y install mariadb mariadb-server

[root@kafka02 ~]# vim /etc/my.cnf #主配置文件配置二进制文件

server-id=1    #主的ID
log-bin=mysql-bin           # 二进制的配置
binlog-ignore-db=information_schema              
binlog-ignore-db=performance_schema              #这三个库不需要同步过去,不然密码该成一样的了
binlog-ignore-db=mysql

重启mysql

systemctl  restart mariadb

进入mariadb

mysql

创建远程用户

MariaDB [(none)]> grant all on *.* to 'tom'@'%' identified by '123';
Query OK, 0 rows affected (0.01 sec)

刷新数据库

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

查询二进制位置和文件
MariaDB [(none)]> show master status;
±-----------------±---------±-------------±--------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
±-----------------±---------±-------------±--------------------------------------------+
| mysql-bin.000005 | 444 | | information_schema,performance_schema,mysql |
±-----------------±---------±-------------±--------------------------------------------+
1 row in set (0.00 sec)

退出数据库

exit

配置从数据库

yum -y install mariadb mariadb-server

[root@kafka02 ~]# vim /etc/my.cnf #从配置文件配置中继日志文件

server-id=2     # 从的ID 一定要不能和主的ID重复
relay-log=relay-log     #中继日志配置

重启mysql

systemctl  restart mariadb

进入mariadb

mysql

连接主数据库

MariaDB [(none)]> change master to  \
master_host='192.168.253.231' \                #主数据库的ip
master_user='tom' \                                     #主数据库新建的远程用户
master_password='123' \                             # 用户的密码
master_log_file='mysql-bin.000003' \           #二进制文件
master_log_pos=444;                                   #文件的位置   (记住位置不用加上引号)开启从slave start;

查询是否同步

MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.253.231
Master_User: tom
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 444
Relay_Log_File: relay-log.000011
Relay_Log_Pos: 728
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: YesIO和SQL为双Yes  说明同步成功

部署读写分离(amoeba )

安装jdk
rpm -ivh jdk-8u20-linux-x64.rpm #安装jdk
vi /etc/profile #配置jdk环境变量

export  JAVA_HOME=/usr/java/jdk1.8.0_20/
export  CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export  PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export  AMOEBA_HOME=/usr/local/amoeba
export  PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile #重读一遍才能生效
java –version #查询jdk版本

安装amoeba

mkdir /usr/local/amoeba
tar zxf amoeba-mysql-binary-2.2.0.tar.gz  -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
amoeba start|stop  //显示这个表示amoeba安装成功。

配置amoeba读写分离

在master、slave1、slave2、、、、中开放权限给amoeba访问:

mysql> grant all on *.* to  test@'172.18.49.%' identified by '123';

修改amoeba的配置文件:

cp amoeba.xml amoeba.xml.bak
vim /usr/local/amoeba/conf/amoeba.xml

修改连接amoeba代理服务器的有用户名和密码。
在这里插入图片描述
修改默认的地址池名字,写和读的名字:注意:删掉注释符。
在这里插入图片描述
对应主机名

编辑修改dbservers.xml配置文件(对后端mysql服务器的配置)。

cp dbServers.xml dbServers.xml.bak   #备份
vi dbServers.xml

在这里插入图片描述
#填写新建的远程用户
指定主从数据库地址:
都是对应得主机名
vi dbServers.xml
在这里插入图片描述

在这里插入图片描述
之后启动amoeba:

/usr/local/amoeba/bin/amoeba start&
netstat -anpt  | grep :8066

登陆amoeba 验证是否代理成功:
在这里插入图片描述

部署监控mysql状态脚本
首先要切割出来双Yes和延时时间不能超过120,然后在判断。

 yum -y install mailx 
vim check_mysql_status.sh
#!/bin/bash
check(){                         #定义一个函数
arr=(`mysql -e "show slave status\G"|egrep "Running|Behind"|awk -F ':' '{print $2}'`)          #定义数组,把双Yes和延时时间放到数组里面。
#echo ${arr[@]}     if [ ${arr[0]} == "Yes" -a ${arr[1]} == "Yes" -a ${arr[2]} != "NULL" ]; then                        # 判断 echo "mysql status is ok"                                  #  没有断开 就okelsemail -s "mysql status" xxxxxxxxxx@qq.com </tmp/result.txt           #若是断开就发邮件告警 可以发 qq163  邮件 echo "mysql is not ok! 正在发送邮件..."fi
}while true        #循环
do
check
sleep 5          # 五秒发一次邮件
done给脚本附件权限
chmod  +x  check_mysql_status.shmysql正常    执行脚本
#!/bin/bash
check(){                         #定义一个函数
arr=(`mysql -e "show slave status\G"|egrep "Running|Behind"|awk -F ':' '{print $2}'`)          #定义数组,把双Yes和延时时间放到数组里面。
#echo ${arr[@]}     if [ ${arr[0]} == "Yes" -a ${arr[1]} == "Yes" -a ${arr[2]} != "NULL" ]; then                        # 判断 echo "mysql status is ok"                                  #  没有断开 就okelsemail -s "mysql status" xxxxxxxxxx@qq.com </tmp/result.txt           #若是断开就发邮件告警 可以发 qq163  邮件 echo "mysql is not ok! 正在发送邮件..."fi
}while true        #循环
do
check
sleep 5          # 五秒发一次邮件
done给脚本附件权限
chmod  +x  check_mysql_status.sh
mysql正常    执行脚本
./ check_mysql_status.sh
mysql status is ok
mysql主从断开    执行脚本./ check_mysql_status.sh mysql is not ok! 正在发送邮件...

粉丝福利
在这里插入图片描述


http://www.ppmy.cn/news/1542130.html

相关文章

【计算机操作系统】课程 作业三 进程同步与互斥 408考研真题

作业三 进程同步与互斥 这两个问题都是关于进程同步和互斥的经典问题&#xff0c;它们可以通过信号量机制来解决。信号量&#xff08;semaphore&#xff09;是一种用于控制多个进程对共享资源访问的同步机制。信号量可以是二进制的&#xff08;只能取0或1&#xff09;&#xff…

雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的

如果域名处填写的分别为 IP 与域名&#xff0c;那么当使用进行 IP 请求时&#xff0c;则将会命中第一个配置的站点 以上图为例&#xff0c;如果用户使用 IP 访问&#xff0c;命中 example.com。 如果域名处填写的分别为域名与泛域名&#xff0c;除非准确命中域名&#xff0c;否…

webRTC搭建:STUN 和 TURN 服务器 链接google的有点慢,是不是可以自己搭建

如果使用 Google 提供的 STUN/TURN 服务器速度较慢&#xff0c;你完全可以自己搭建 STUN 和 TURN 服务器。这有助于提升网络连接速度和稳定性&#xff0c;特别是在需要穿透 NAT 或防火墙的网络环境下。 下面是如何自己搭建 STUN 和 TURN 服务器的具体步骤&#xff1a; 1. 选择…

微软推新模型OmniParser:让GPT-4V秒懂屏幕截图内容,指哪懂哪

还记得那个号称“看图说话”神器GPT-4V吗?它能理解图片内容&#xff0c;还能根据图片执行任务&#xff0c;简直是懒人福音!但它有个致命弱点:眼神不太好! 想象一下&#xff0c;你让GPT-4V帮你点个按钮&#xff0c;它却像个“屏幕瞎子”一样&#xff0c;到处乱点&#xff0c;是…

Find My平板键盘|苹果Find My技术与键盘结合,智能防丢,全球定位

‌平板键盘的主要用途包括提高输入效率、支持轻量化办公、提供丰富的文本编辑功能以及快捷操作。相比于直接在屏幕上打字&#xff0c;使用键盘可以显著提升输入速度&#xff0c;减少输入错误&#xff0c;特别是对于需要大量文字输入的场景&#xff0c;如写作、记录笔记等‌。平…

【GIT】Visual Studio 中 Git 界面中, 重置 和 还原

在 Visual Studio 的 Git 界面中&#xff0c;“重置” 和 “还原” 是两个常用的 Git 操作。它们的主要区别在于应用场景和影响范围。 1. 重置&#xff08;Reset&#xff09; 重置用于更改当前分支的提交历史&#xff0c;通常用于撤销或删除某些提交。重置操作可能会更改 Git…

Spring Boot助力的厨艺互动平台开发指南

2 相关技术 2.1 Spring Boot框架简介 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Sprin…

node和npm版本冲突

问题描述&#xff1a; 解决办法&#xff1a; 一、 查看自己当前的node和npm版本 node -v npm -v 二、 登录node官网地址 node官网地址 https://nodejs.org/zh-cn/about/previous-releases 查看与自己node版本兼容的是哪一版本的npm,相对应进行更新即可。 三 升级node 下载最…