MySQL数据库入门到精通9--运维篇

news2024/12/26 23:32:47

1. 日志

1.1 错误日志

错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。
该日志是默认开启的,默认存放目录 /var/log/,默认的日志文件名为 mysqld.log 。查看日志位置:

show variables like '%log_error%';

在这里插入图片描述

1.2 二进制日志

1.2.1 介绍
二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但不包括数据查询(SELECT、SHOW)语句。
作用:①. 灾难时的数据恢复;②. MySQL的主从复制。在MySQL8版本中,默认二进制日志是开启着的,涉及到的参数如下:

show variables like '%log_bin%';

在这里插入图片描述
参数说明:
log_bin_basename:当前数据库服务器的binlog日志的基础名称(前缀),具体的binlog文件名需要再该basename的基础上加上编号(编号从000001开始)。
log_bin_index:binlog的索引文件,里面记录了当前服务器关联的binlog文件有哪些。
1.2.2 格式
MySQL服务器中提供了多种格式来记录二进制日志,具体格式及特点如下:
在这里插入图片描述

show variables like '%binlog_format%';

在这里插入图片描述
如果我们需要配置二进制日志的格式,只需要在 /etc/my.cnf 中配置 binlog_format 参数即可。
1.2.3 查看
由于日志是以二进制方式存储的,不能直接读取,需要通过二进制日志查询工具 mysqlbinlog 来查看,具体语法:

mysqlbinlog [ 参数选项 ] logfilename
参数选项:
-d 指定数据库名称,只列出指定的数据库相关操作。
-o 忽略掉日志中的前n行命令。
-v 将行事件(数据变更)重构为SQL语句
-vv 将行事件(数据变更)重构为SQL语句,并输出注释信息

1.2.4 删除
对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量磁盘空间。可以通过以下几种方式清理日志:
在这里插入图片描述
也可以在mysql的配置文件中配置二进制日志的过期时间,设置了之后,二进制日志过期会自动删除。

show variables like '%binlog_expire_logs_seconds%';

1.3 查询日志
查询日志中记录了客户端的所有操作语句,而二进制日志不包含查询数据的SQL语句。默认情况下,查询日志是未开启的。
在这里插入图片描述
如果需要开启查询日志,可以修改MySQL的配置文件 /etc/my.cnf 文件,添加如下内容:

#该选项用来开启查询日志 , 可选值 : 0 或者 1 ; 0 代表关闭, 1 代表开启
general_log=1
#设置日志的文件名 , 如果没有指定, 默认的文件名为 host_name.log
general_log_file=mysql_query.log

开启了查询日志之后,在MySQL的数据存放目录,也就是 /var/lib/mysql/ 目录下就会出现mysql_query.log 文件。之后所有的客户端的增删改查操作都会记录在该日志文件之中,长时间运行后,该日志文件将会非常大。
1.4 慢查询日志
慢查询日志记录了所有执行时间超过参数 long_query_time 设置值并且扫描记录数不小于min_examined_row_limit 的所有的SQL语句的日志,默认未开启。long_query_time 默认为10 秒,最小为 0, 精度可以到微秒。
如果需要开启慢查询日志,需要在MySQL的配置文件 /etc/my.cnf 中配置如下参数:

#慢查询日志
slow_query_log=1
#执行时间参数
long_query_time=2

默认情况下,不会记录管理语句,也不会记录不使用索引进行查找的查询。可以使用log_slow_admin_statements和 更改此行为 log_queries_not_using_indexes,如下所述。

#记录执行较慢的管理语句
log_slow_admin_statements =1
#记录执行较慢的未使用索引的语句
log_queries_not_using_indexes = 1

上述所有的参数配置完成之后,都需要重新启动MySQL服务器才可以生效。

2. 主从复制

2.1 概述
主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这
些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。
在这里插入图片描述
MySQL 复制的优点主要包含以下三个方面:
主库出现问题,可以快速切换到从库提供服务。
实现读写分离,降低主库的访问压力。
可以在从库中执行备份,以避免备份期间影响主库服务。

2.2 原理

MySQL主从复制的核心就是 二进制日志,具体的过程如下:
在这里插入图片描述
从上图来看,复制分成三步:

  1. Master 主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中。
  2. 从库读取主库的二进制日志文件 Binlog ,写入到从库的中继日志 Relay Log 。
  3. slave重做中继日志中的事件,将改变反映它自己的数据。

2.3 搭建

2.3.1 准备
在这里插入图片描述
准备好两台服务器之后,在上述的两台服务器中分别安装好MySQL,并完成基础的初始化准备(安装、密码配置等操作)工作。 其中:
192.168.200.200 作为主服务器master
192.168.200.201 作为从服务器slave
2.3.2 主库配置

  1. 修改配置文件 /etc/my.cnf
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1
server-id=1
#是否只读,1 代表只读, 0 代表读写
read-only=0
#忽略的数据, 指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01
  1. 重启MySQL服务器
systemctl restart mysqld
  1. 登录mysql,创建远程连接的账号,并授予主从复制权限
#创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456'
;
#为 'itcast'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';
  1. 通过指令,查看二进制日志坐标
show master status ;

在这里插入图片描述
字段含义说明:
file : 从哪个日志文件开始推送日志文件
position : 从哪个位置开始推送日志
binlog_ignore_db : 指定不需要同步的数据库
2.3.3 从库配置
5. 修改配置文件 /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=2
#是否只读,1 代表只读, 0 代表读写
read-only=1
  1. 重新启动MySQL服务
systemctl restart mysqld
  1. 登录mysql,设置主库配置
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.200.200', SOURCE_USER='itcast',
SOURCE_PASSWORD='Root@123456', SOURCE_LOG_FILE='binlog.000004',
SOURCE_LOG_POS=663;

上述是8.0.23中的语法。如果mysql是 8.0.23 之前的版本,执行如下SQL:

CHANGE MASTER TO MASTER_HOST='192.168.200.200', MASTER_USER='itcast',
MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000004',
MASTER_LOG_POS=663;

在这里插入图片描述
4. 开启同步操作

start replica ; #8.0.22之后
start slave ; #8.0.22之前
  1. 查看主从同步状态
show replica status ; #8.0.22之后
show slave status ; #8.0.22之前

2.3.4 测试
6. 在主库 192.168.200.200 上创建数据库、表,并插入数据

create database db01;
use db01;
create table tb_user(
id int(11) primary key not null auto_increment,
name varchar(50) not null,
sex varchar(1)
)engine=innodb default charset=utf8mb4;
insert into tb_user(id,name,sex) values(null,'Tom', '1'),(null,'Trigger','0'),
(null,'Dawn','1');
  1. 在从库 192.168.200.201 中查询数据,验证主从是否同步

3. 分库分表

3.1 介绍

3.1.1 问题分析
在这里插入图片描述
随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存
储,存在以下性能瓶颈:

  1. IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。 请求数据太多,带宽
    不够,网络IO瓶颈。
  2. CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出
    现瓶颈。
    为了解决上述问题,我们需要对数据库进行分库分表处理。
    在这里插入图片描述
    分库分表的中心思想都是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能
    问题,从而达到提升数据库性能的目的。
    3.1.2 拆分策略
    分库分表的形式,主要是两种:垂直拆分和水平拆分。而拆分的粒度,一般又分为分库和分表,所以组成的拆分策略最终如下:
    在这里插入图片描述
    3.1.3 垂直拆分
    1 垂直分库
    在这里插入图片描述
    垂直分库:以表为依据,根据业务将不同表拆分到不同库中。
    特点:
    每个库的表结构都不一样。
    每个库的数据也不一样。
    所有库的并集是全量数据。
    2 垂直分表
    在这里插入图片描述
    垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。
    特点:
    每个表的结构都不一样。
    每个表的数据也不一样,一般通过一列(主键/外键)关联。
    所有表的并集是全量数据。
    3.1.4 水平拆分
    1 水平分库
    在这里插入图片描述
    水平分库:以字段为依据,按照一定策略,将一个库的数据拆分到多个库中。
    特点:
    每个库的表结构都一样。
    每个库的数据都不一样。
    所有库的并集是全量数据。
    2 水平分表
    在这里插入图片描述
    水平分表:以字段为依据,按照一定策略,将一个表的数据拆分到多个表中。
    特点:
    每个表的表结构都一样。
    每个表的数据都不一样。
    所有表的并集是全量数据。
    在业务系统中,为了缓解磁盘IO及CPU的性能瓶颈,到底是垂直拆分,还是水平拆分;具体是分
    库,还是分表,都需要根据具体的业务需求具体分析。
    3.1.5 实现技术
    shardingJDBC:基于AOP原理,在应用程序中对本地执行的SQL进行拦截,解析、改写、路由处
    理。需要自行编码配置实现,只支持java语言,性能较高。
    MyCat:数据库分库分表中间件,不用调整代码即可实现分库分表,支持多种语言,性能不及前
    者。
    在这里插入图片描述
    可以选用MyCat数据库中间件,通过MyCat中间件来完成分库分表操作。具体操作请百度

4. 读写分离

4.1 介绍

读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操
作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。
通过MyCat即可轻易实现上述功能,不仅可以支持MySQL,也可以支持Oracle和SQL Server。
在这里插入图片描述

4.2 一主一从

4.2.1 原理
MySQL的主从复制,是基于二进制日志(binlog)实现的。
在这里插入图片描述

当主节点Master宕机之后,业务系统就只能够读,而不能写入数据了。

4.3 双主双从

4.3.1 介绍
一个主机 Master1 用于处理所有写请求,它的从机 Slave1 和另一台主机 Master2 还有它的从
机 Slave2 负责所有读请求。当 Master1 主机宕机后,Master2 主机负责写请求,Master1 、
Master2 互为备机。架构图如下:
在这里插入图片描述
4.3.2 准备
我们需要准备5台服务器,具体的服务器及软件安装情况如下:
在这里插入图片描述
关闭以上所有服务器的防火墙:

systemctl stop firewalld
systemctl disable firewalld

4.3.3 搭建
4.4.3.1 主库配置
1). Master1(192.168.200.211)
在这里插入图片描述
A. 修改配置文件 /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,默认为1
server-id=1
#指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates

B. 重启MySQL服务器

systemctl restart mysqld

C. 创建账户并授权

#创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456'
;
#为 'itcast'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

通过指令,查看两台主库的二进制日志坐标

show master status ;

在这里插入图片描述
2). Master2(192.168.200.213)
在这里插入图片描述
A. 修改配置文件 /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,默认为1
server-id=3
#指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates

B. 重启MySQL服务器

systemctl restart mysqld

C. 创建账户并授权

#创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456'
;
#为 'itcast'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

通过指令,查看两台主库的二进制日志坐标

show master status ;

在这里插入图片描述
4.4.3.2 从库配置
1). Slave1(192.168.200.212)
在这里插入图片描述
A. 修改配置文件 /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1
server-id=2

B. 重新启动MySQL服务器

systemctl restart mysqld

2). Slave2(192.168.200.214)
在这里插入图片描述
A. 修改配置文件 /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1
server-id=4

B. 重新启动MySQL服务器

systemctl restart mysqld

4.4.3.3 从库关联主库
1). 两台从库配置关联的主库
在这里插入图片描述
需要注意slave1对应的是master1,slave2对应的是master2。
A. 在 slave1(192.168.200.212)上执行

CHANGE MASTER TO MASTER_HOST='192.168.200.211', MASTER_USER='itcast',
MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000002',
MASTER_LOG_POS=663;

B. 在 slave2(192.168.200.214)上执行

CHANGE MASTER TO MASTER_HOST='192.168.200.213', MASTER_USER='itcast',
MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000002',
MASTER_LOG_POS=663;

C. 启动两台从库主从复制,查看从库状态

start slave;
show slave status \G;

2). 两台主库相互复制
在这里插入图片描述
Master2 复制 Master1,Master1 复制 Master2。
A. 在 Master1(192.168.200.211)上执行

CHANGE MASTER TO MASTER_HOST='192.168.200.213', MASTER_USER='itcast',
MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000002',
MASTER_LOG_POS=663;

B. 在 Master2(192.168.200.213)上执行

CHANGE MASTER TO MASTER_HOST='192.168.200.211', MASTER_USER='itcast',
MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000002',
MASTER_LOG_POS=663;

C. 启动两台从库主从复制,查看从库状态

start slave;
show slave status \G;

经过上述的三步配置之后,双主双从的复制结构就已经搭建完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1040182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决安装 RabbitMQ 安装不成功的问题

由于RabbitMQ是基于erlang的,所以,在正式安装RabbitMQ之前,需要先安装一下erlang。 1、下载mq https://www.rabbitmq.com/download.html 2、下载erlang(点击下载路径根据下载的MQ版本对应下载erl版本) https://www.…

客户端负载均衡_什么是负载均衡

为什么需要负载均衡 俗话说在生产队薅羊毛不能逮着一只羊薅,在微服务领域也是这个道理。面对一个庞大的微服务集群,如果你每次发起服务调用都只盯着那一两台服务器,在大用户访问量的情况下,这几台被薅羊毛的服务器一定会不堪重负…

澳大利亚新版《2023年消费品(36个月以下儿童玩具) 安全标准》发布 旨在降低危险小零件的伤害

2023年9月4日,澳大利亚政府发布了新的儿童玩具强制性安全标准《2023年消费品(36个月以下儿童玩具)安全标准》(Consumer Goods (Toys for Children up to and including 36 Months of Age) Safety Standard 2023)。该强制性标准旨在尽可能地降…

2023/9/24总结

Redis Redis 是一个基于内存的键值数据库 安装 Window下Redis的安装和部署详细图文教程(Redis的安装和可视化工具的使用)_redis安装_明金同学的博客-CSDN博客 出现上面代表安装成功了 redis 一共有 16 个库 安装后 再安装图形化界面 图形界面十分方便…

Java————网络编程

一 、网络编程基础 1. 为什么需要网络编程 用户在浏览器中,打开在线视频网站, 如优酷看视频,实质是通过网络, 获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相比本地资…

ubuntu20.04部署ntp服务器ntpd(ntpdate )

文章目录 步骤1. 安装NTP2. 配置NTP3. 重启NTP服务4. 检查NTP服务状态5. 验证NTP同步ntpq -p检查本地ntp服务是否正常服务器不能连外网,如何配置? ntpdate -q xxx查询ntp服务器时间 步骤 1. 安装NTP 首先,在终端中更新你的包列表&#xff0…

vue项目 H5 动态设置浏览器标题

1,先将要展示的标题存本地 if (that.PromotionInfo.Title) {localStorage.setItem("AcTitle", that.PromotionInfo.Title)} 2,现在路由meta中设置标题,再在路由守卫中设置 import Vue from vue import Router from vue-router import prom…

游戏录屏软件推荐,教你录制高清游戏视频

“有没有好用的游戏录屏软件推荐呀,最近当上了游戏主播,平台要求每天都要发一个游戏视频,可是我的游戏录屏软件太拉胯了,录制出来的视频非常糊,导致平台审核不通过,所以想问问大家有没有游戏录屏软件推荐一…

机器视觉检测在流水线上的技术应用

机器视觉在流水线上的应用机器视觉系统的主要功能可以简单概括为:定位、识别、测量、缺陷检测等。相对于人工或传统机械方式而言,机器视觉系统具有速度快、精度高、准确性高等一系列优点。随着工业现代化发展,机器视觉已经广泛应用于各大领域…

【Git】轻松学会 Git:实现 Git 的分支管理

文章目录 前言一、对分支的理解二、分支的创建三、分支的切换3.1 切换到 dev 分支3.2 在 dev 分支上进行文件的修改和提交3.2 来回切换 master 和 dev 分支,查看修改的内容 四、分支的合并五、分支的删除六、冲突的合并6.1 模拟制造冲突6.2 解决冲突 七、分支管理策…

openGauss学习笔记-79 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT应用场景

文章目录 openGauss学习笔记-79 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT应用场景79 MOT应用场景 openGauss学习笔记-79 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT应用场景 本节介绍了openGauss内存优化表(Memory-Optimized Table&am…

Java基于基于微信小程序的快递柜管理系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 第一章:简介第二章、***\*开发环境:\******后端:****前端&am…

msvcp110.dll丢失是什么意思?msvcp110.dll丢失的五种修复方法

在现代社会,计算机已经成为我们生活和工作中不可或缺的一部分。然而,随着计算机技术的不断发展,我们也会遇到各种各样的问题。其中,msvcp110.dll丢失是许多用户经常遇到的问题之一。本文将详细介绍msvcp110.dll丢失的修复方法&…

基于微信小程序的健身房私教预约平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

echarts学习总结

一、新建一个简单的Echarts 首先新建一个vue2的项目,项目中安装Echarts cnpm install echarts --save1、title标题组件,包含主标题和副标题。 2、tooltip提示框组件 3、 legend图例组件 4、 series

算法通过村第九关-二分(中序遍历)黄金笔记|二叉搜索树

文章目录 前言1. 有序数组转二叉搜索树2. 寻找连个正序数组的中位数总结 前言 提示:有时候,我感觉自己一辈子活在两个闹钟之间,早上的第一次闹钟,以及5分钟之后的第二次闹钟。 --奥利弗萨克斯《意识的河流》 每个专题都有简单题&a…

新能源汽车OBC车载充电机(实物拆解)

需要样件请联:shbinzer 拆车邦 车载OBC简介 从产品/系统角度看OBC及在新能源汽车的作用。如下图,是威迈斯的OBC车载充电机,威迈斯今年刚上市,是OBC和DC/DC的领先企业。 图片来源:威迈斯官网(OBC) …

【简单图论】CF898 div4 H

Problem - H - Codeforces 题意&#xff1a; 思路&#xff1a; 手玩一下样例就能发现简单结论&#xff1a; v 离它所在的树枝的根的距离 < m 离这个根的距离时是 YES 否则就是NO 实现就很简单&#xff0c;先去树上找环&#xff0c;然后找出这个根&#xff0c;分别给a 和…

视频监控系统/视频汇聚平台EasyCVR有下级平台注册时出现断流情况该如何排查解决?

视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等&#xff0c;视频智能分析平台EasyCVR融合性强、开放度…