栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

MySQL运维篇笔记

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL运维篇笔记

MySQL运维

日志

错误日志二进制日志 (重点)

介绍日志格式日志查看日志删除 查询日志慢查询日志 主从复制

概述原理搭建

服务器准备主库配置从库配置测试 总结 分库分表

介绍

问题分析拆分策略垂直拆分水平拆分实现技术 Mycat概述

介绍 读写分离

介绍 后续

日志 错误日志

  错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。

  该日志是默认开启的,默认存放目录 /var/log/,默认的日志文件名为 mysqld.log 。查看日志位置:

show variables like '%log_error%'
二进制日志 (重点) 介绍

  二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但不包括数据查询(SELECT、SHOW)语句。

作用:

    灾难时的数据恢复MySQL的主从复制

在MySQL8版本中,默认二进制日志是开启着的,涉及到的参数如下:

show variables like '%log_bin%'
日志格式

MySQL服务器中提供了多种格式来记录二进制日志,具体格式及特点如下:

日志格式含义
statement基于SQL语句的日志记录,记录的是SQL语句,对数据进行修改的SQL都会记录在日志文件中。
row基于行的日志记录,记录的是每一行的数据变更。(默认)
minex混合了STATEMENT和ROW两种格式,默认采用STATEMENT,在某些特殊情况下会自动切换为ROW进行记录。
show variables like '%binlog_format%'
日志查看

由于日志是以二进制方式存储的,不能直接读取,需要通过二进制日志查询工具 mysqlbinlog 来查看,具体语法:

语法:
	mysqlbinlog [options] logo-files 1 log-files 2...
选项:
	-d,--database=name # 指定数据库名称,只列出指定的数据库相关操作。
	-o,--offset=n # 忽略掉日志中的前n行命令。
	-r,--result-file=name # 将输出的文本格式日志输出到指定文件。
	-s,--short-form #显示简单格式,省略掉一些信息。
	--start-datetime=date1 --stop-datetime=date2 # 指定日期间隔内的所有日志。
	--start-positioin=pos1 --stop-position=pos2 #指定位置间隔内的所有日志。
	-v,# 将行事件重构为SQL语句
	-vv,#将行事件重构为SQL语句,并输出注释信息
日志删除

对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量磁盘空间。可以通过以下几种方式清理日志:

指令含义
reset master删除全部 binlog 日志,删除之后,日志编号,将从 binlog.000001重新开始
purge master logs to 'binlog.****** ’删除 ****** 编号之前的所有日志
purge master logs before ‘yyy-mm-dd hh24:mi:ss’删除日志为 “yyyy-mm-dd hh24:mi:ss” 之前产生的所有日志

也可以在mysql的配置文件中配置二进制日志的过期时间,设置了之后,二进制日志过期会自动删除

# mysql的配置文件
/etc/my.cnf

show variables like '%binlog_expire_logs_seconds%'
查询日志

查询日志中记录了客户端的所有操作语句,而二进制日志不包含查询数据的SQL语句。默认情况下, 由于查询日志记录的数据比较多,所以查询日志是未开启的。如果需要开启查询日志,可以设置以下配置 :

show variables like '%general%'

修改MySQL的配置文件 /etc/my.cnf 文件,添加如下内容:

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

慢查询日志记录了所有执行时间超过参数 long_query_time 设置值并且扫描记录数不小于 min_examined_row_limit的所有的SQL语句的日志,默认未开启。long_query_time 默认为 10 秒,最小为 0, 精度可以到微秒。

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

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

# 记录执行较慢的管理语句
log_slow_admin_statements=1
# 记录执行较慢的未使用索引的语句
log_queries_not_using_indexes=1
主从复制 概述

  主从复制是指将主数据库的DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。

MySQL 复制优点主要包含以下三个方面:

    主库出现问题,可以快速切换到从库提供服务。实现读写分离,降低主库的访问压力。可以在从库中执行备份,以避免备份期间影响主库服务。

原理

MySQL 的主从复制原理如下


复制分成三步:

    Master 主库在事务提交时,会把数据变更记录在二进制日志文件 binlog 中从库读取主库的二进制日志文件 binlog ,写入到从库的中继日志 relay logslave重做中继日志中的事件,将改变反映它自己的数据。
搭建 服务器准备


准备好两台服务器之后,在上述的两台服务器中分别安装好MySQL,并完成基础的初始化准备工作

# 开放指定的3306端口号
firewall-cmd --zone=public --add-port=3306/tcp -permanent
firewall-cmd -reload
# 或者直接关闭服务器的防火墙
systemctl stop firewalld
systemctl disable firwalld
主库配置
    修改配置文件 /etc/my.cnf
# mysql服务器ID,保证整个集群环境唯一,取值范围:1-2的32-1,默认为1
server-id = 1
# 是否只读,1只读,0读写
read-only = 0
# 忽略的数据,指不需要同步的数据库
#binlog_ignore-db=mysqlID
#指定同步的数据库,默认都同步
#binlog-do-db=mysqlID
    重启MySQL服务器
systemctl restart mysqld
    登录mysql,创建远程连接的账号,并授予主从复制权限
# 创建itcast用户,并设置密码,该用户可在任意主机连接该mysql服务
create user 'itcast'@'%' identified with mysql_native_password by 'Root@123456';
# 为itcast用户分配主从复制的权限
grant replication slave on *.* to 'itcast'@'%'
    通过指令,查看二进制日志坐标
show master status;

字段含义说明:

    file : 从哪个日志文件开始推送日志文件position : 从哪个位置开始推送日志binlog_ignore_db : 指定不需要同步的数据库
从库配置
    修改配置文件 /etc/my.cnf
# mysql服务器ID,保证整个集群环境唯一,取值范围:1-2的32-1,和主库不一样即可
server-id = 2
# 是否只读,1只读,0读写
read-only = 0
    重启MySQL服务器
systemctl restart mysqld
    登录mysql,设置主库配置
change master to master_host='ip地址' ,master_user ='用户名' ,master_password ='密码' , master_log_file = '文件名' , master_log_pos =xxx;

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;
参数名含义8.0.23之前
SOURCE_HOST主库IP地址MASTER_HOST
SOURCE_USER连接主库的用户名MASTER_USER
SOURCE_PASSWORD连接主库的密码MASTER_PASSWORD
SOURCE_LOG_ FILEbinlog日志文件名MASTER_LOG_FILE
SOURCE_LOG_POSbinlog日志文件位置MASTER_LOG_POS
    开启同步操作
start replica;# 8.0.22之后
start slave;# 8.0.22之前
    查看主从同步状态
show replica status;# 8.0.22之后
show slave status;# 8.0.22之前

测试
    在主库上创建数据库、表,并插入数据
create database itcast;

use itcast;

create table tb_user(
	id int(11) not null,
	name varchar(50) not null,
	sex varchar(1),
	primary key (id)
)engine=innodb default charset=utf8;

insert into tb_user(id,name,sex) values(1,'Tom','1');
insert into tb_user(id,name,sex) values(2,'Trigger','0');
insert into tb_user(id,name,sex) values(3,'Dawn','1');
    在从库中查询数据,验证主从是否同步

  注意,我们现在演示的主从复制,是从二进制日志的当前位置往后进行主从复制,如果要把之前的数据也同步到从库,我们可以把之前的数据导出到一个.sql脚本中,然后在从库中执行sql脚本,这样先保证主库和从库的初始数据是一致的,然后在从当前位置往后进行同步

总结
    概述

将主库的数据变更同步到从库,从而保证主库和从库数据一致。
数据备份、失败迁移,读写分离,降低单库读写压力。

    原理

主库会把数据变更记录在二进制日志文件binlog中。从库连接主库,读取binlog日志,并写入自身中继日志relay.log 。从库重做中继日志,将改变反映它自己的数据。

    搭建

准备服务器配置主库配置从库测试主从复制 分库分表 介绍 问题分析

随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:

    IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。 请求数据太多,带宽不够,网络IO瓶颈。CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。

分库分表的中心思想都是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。

拆分策略

在拆分的力度中,又分为分库和分表。分库:对一个数据库来进行拆分,一个数据库的数据分散的存储在多个数据库当中;分表:对表结构进行拆分,原来存在一张表中的数据,现在分散的存在多个表中。所以分库和分表是力度上的不同。垂直拆分和水平拆分是拆分维度上的不同。

垂直拆分

垂直分库:以表为依据,根据业务将不同表拆分到不同库中。
特点:

    每个库的表结构都不一样。每个库的数据也不一样。所有库的并集是全量数据。

垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。
特点:

    每个表的结构都不一样。每个表的数据也不一样,一般通过一列(主键/外键)关联。所有表的并集是全量数据。

水平拆分

水平分库:以字段为依据,按照一定策略,将一个库的数据拆分到多个库中。

特点:

    每个库的表结构都一样。每个库的数据都不一样。所有库的并集是全量数据。


水平分表:以字段为依据,按照一定策略,将一个表的数据拆分到多个表中。
特点:

    每个表的表结构都一样。每个表的数据都不一样。所有表的并集是全量数据。

实现技术

shardingJDBC:基于AOP原理,在应用程序中对本地执行的SQL进行拦截,解析、改写、路由处理。需要自行编码配置实现,只支持java语言,性能较高。MyCat:数据库分库分表中间件,不用调整代码即可实现分库分表,支持多种语言,性能不及前者。 Mycat概述 介绍

  Mycat是开源的、活跃的、基于Java语言编写的MySQL数据库中间件。可以像使用mysql一样来使用mycat,对于开发人员来说根本感觉不到mycat的存在。

优势:

    性能可靠稳定强大的技术团队体系完善社区活跃

读写分离 介绍

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

后续

  其实后面使用mycat分库分表,读写分离,都仅仅是去改改参数,并无原理,后续用到了直接看看视频即可,已经没必要总结了视频传送门

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/731196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号