MySQL运维
日志
错误日志
存放目录 /var/log/mysqld.log
show variables like '%log_error%'二进制日志
二进制日志(BINLOG)记录了所有的DDL语句和DML语句,但是不包括select、show语句
即这里记录了数据的变化。
主要作用:
灾难时数据恢复
MySQL的主从复制
在MySQL中默认开启。
日志格式有三种
statement
基于SQL语句的日志记录,记录的是SQL语句。
row
基于行的日志记录,记录的是每一行的数据变更(默认)
mixed
混合上面两种,默认使用statement,在某些特殊情况下自动切换为ROW进行记录。
查询日志
查询日志中记录了客户端的所有操作语句,而二进制日志中不包含查询数据的SQL语句。默认是关闭的。
慢查询日志
(就是mysql性能分析里面的)
主从复制
主从复制是指讲主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行辅助,从库同时也可以作为其他从服务器的主库,实现链状复制。
优势:
主库出现问题,可以快速切换到从库提供服务。
实现读写分离,降低主库的访问压力
可以在从库中执行备份,以避免备份期间影响主库服务。
原理
主库数据变更会写入到binlog中,从库会发送请求到主库,请求binlog,从库拿到后存储在本地的relay log中继日志中,然后本地读取中继日志,重做其中的数据变更。
读写分离
简单来说,就是把对数据的读和写分开。主数据库提供写操作,从数据库提供读操作,这样能够有效地减轻单台数据库的压力。
一主一从
配置好主从数据库,然后使用中间件处理对数据的操作,写操作分流到主主数据库,读操作分流到从数据库
缺点:
主节点宕机后,业务系统只能读不能写。即数据的高可用
双主双从
两个主数据库相互复制。这样就会有一个优先级,主写数据库和副写数据库。
分库分表
性能瓶颈:
io,大量访问,会占用大量内存,内存不够时,会产生大量的磁盘IO
cpu,各种查询会耗费CPU资源,请求太多,cpu出现瓶颈
中心思想:数据分散存储,使得单一数据库的数据量变小,从而缓解单库压力。
拆分策略
垂直拆分,
垂直分表。以字段为依据,根据字段属性将不同的字段拆分到不同表中,不同的表可以存储在不同的数据库中。
垂直分库,以表为依据,根据业务将不同表拆分到不同的库中。
水平拆分
水平分库。将同一个数据库分为多个数据库存储,即每一个数据库仅存储全部数据的一部分,大家组合在一起才算全部的数据
水平分表。将一个表分为多个数据库存储,即一个数据库服务器中存储一部分数据,大家合在一起才能得到而这个表的全部数据
注:水平拆分其实拆的是数据,垂直拆分拆的是结构
具体实现呢 采用一些中间件或者在原应用程序开发,自定义配置对本地sql进行拦截、解析、改写、路由等策略。
水平拆分规则和方法
范围拆分,根据指定字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片。
取模分片,根据指定字段值与节点数量进行求模运算,按照运算结果,来决定该数据属于哪一个分片。
一致性hash:计算指定字段的hash值来确定数据数据哪一个分片。所谓一致性hash,相同的hash因子,计算值总是被划分到相同的分区表中。
枚举分片:通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,本规则适用于按照省份、性别、状态拆分。
应用指定:在运行阶段由应用自主决定路由到哪个分片,根据字符字串计算所在分区表。即比如0100000,0200000,030000,040000,类似情况。根据前两位数据来决定分区到哪个
固定分片Hash算法:取某个字段值(数)的二进制的一部分,比如低10位,然后与1111111111进行&运算,根据这个结果,来决定应该分区到哪个地方
字符串Hash解析:截取指定位置的子字符串,进行hash算法,算出应该分区到哪个地方。
按天分:可以指定某个时间周期(如10天),每一个周期内的数据放到同一个地方。并循环放置。
按自然月:按月为周期,一个月的数据存储在一个分区中。
最后更新于
这有帮助吗?