您的位置:永利国际官网登录 > 网络科技 > 运维实践,MySQL运维经验

运维实践,MySQL运维经验

发布时间:2019-07-22 22:07编辑:网络科技浏览(97)

    原标题:MySQL运维经验

     

    MySQL参数调优

    • 为什么要调整MySQL的参数
      • MySQL是通用数据库,但业务是多变的,默认参数无法满足所有业务需求
      • MySQL内部一些参数是在MySQL一些很老的版本时候做的,可能之前是做限流和保护用的,但随着机器性能的提高,这些保护类的参数可能会成为性能瓶颈

    项目地址:

    所有的备份都是基于mysqldump实现,之所以采用mysqldump逻辑备份好处有:

    慢查询日志

    • 记录执行时间超过一定阈值的SQL语句
    • 配置参数
    slow_query_log = 1
    slow_query_log_file = /data/mysql_data/node-1/mysql-slow.log
    long_query_time = 5
    
    • 用于分析系统中可能存在性能问题的SQL

    采用他们自已的osc工具执行Online DDL(也是本次DTCC大会上lulu的分享主题),它最早用PHP开发,虽早已开源,但实在不好用,所以几乎只在内部使用。这个工具不同于pt-osc,相对来说更有优势,比如可以避免使用pt-osc最常遇到的主从数据延迟问题。

    6. 团队结构及技能树

    什么是日志

    • 日志(log)是一种顺序记录事件流水的文件
    • 记录计算机程序运行过程中发生了什么
    • 用途多样
    • 帮助分析程序问题
    • 分析服务请求的特征、流量等
    • 判断工作是否成功执行
    • ……

    基于配置中心实现切换,未使用VIP。

    备份放在集中存储(HDFS)上, 据说已达EB级别容量。 

    innodb_buffer_pool_size

    • InnoDB存储引擎自己维护一块内存区域完成新老数据的替换
    • 内存越大越能缓存更多的数据

    放在MyRocks上的核心业务主要有:Feed、Post、社交图谱等读写混合业务。

    项目地址:

    主要影响MySQL写性能的两个参数

    • innoDB_flush_log_at_trx_commit
    • sync_binlog

    2. 高可用机制

    在认为semi-sync复制可保证主从数据一致性的假设前提下,发生故障切换时,利用上述的binlog server中的日志进行补全后再选新主、切换。

    5.7-MySQL参数调优

    关于WDT项目:


    5.5-MySQL主从复制

    在线表结构变更:数据库资源申请由质量服务团队负责,做到资源的合理分布、分配,如果某个业务只需要个位数级别的DB实例,可以自行在私有DB云平台中申请部署,当数量比较大时,需要先经过质量服务团队评估通过。

    • 供数据分析环境拉数据

    • 供灾难恢复

    基本知识 - 冷备份与热备份

    • 冷备份
      • 关闭数据库服务,完整拷贝数据文件
    • 热备份
      • 在不影响数据库读写服务的情况下备份数据库

    在认为semi-sync复制可保证主从数据一致性的假设前提下,发生故障切换时,利用上述的binlog server中的日志进行补全后再选新主、切换。

    目前大部分核心业务已切换成MyRocks引擎,在机器硬件配置不变的情况,约可节省一半机器。

    导数据及注意事项

    • 数据最终形式(csv、sql文本 还是直接导入某库中)
    • 导数据方法(mysqldump、select into outfile)
    • 导数据注意事项
      • 导出为csv格式需要file权限,而且只能数据库本地导
      • 避免锁库锁表(mysqldump使用——single-transaction选项不锁表)
      • 避免对业务造成影响,尽量在镜像库做

    关于备份的作用定位:

     

    InnoDB Redo log

    • Write ahead Log

    5. 高度自动化

    上面提到,因为采用多实例、多DB结构,备份时可以多DB并行备份。当然了,也会控制并行备份的数量,避免影响在线业务性能。

    5.4-MySQL线上部署

    永利国际开户送38体验 1

     

    读优化

    • 合理利用索引对MySQL查询性能至关重要
    • 适当的调整参数也能提升查询性能

    每台机器都使用多实例的模型。 每个机器放多个实例,每个实例放多个DB。

    可使用xtrabackup在现有存活的SLAVE实例上备份,也可在主库上发起备份,再利用WDT(或者是BT)协议传输到异地,用于拉起从库。

    数据恢复的必要条件

    • 有效备份
    • 完整的数据库操作日志(binlog)

    Schema设计及DB拆分等由性能优化团队负责。

    面对大规模的数据库实例,手工处理完全不现实。目前在facebook主要是利用Python开发内部DB运维平台,所以Python技能方面要求比较高。

    小结

    • 日常工作比较简单,但是任何一个操作都可能影响线上服务
    • 结合不同环境,不同要求选择最合适的方法处理
    • 日常工作应该求稳不求快,保障线上稳定是DBA的最大责任

    责任编辑:


    表结构变更注意事项

    • 在低峰期做
    • 表结构变更是否会有锁?(5.6包含online ddl功能)
    • 使用pt-online-schema-change完成表结构变更
      • 可以避免主从延时
      • 可以避免负载过高,可以限速

    某个从库挂掉时,可以动态摘除。

    放在MyRocks上的核心业务主要有:Feed、Post、社交图谱等读写混合业务。

    Write Back VS Write Through

    • write Back 性能优于 Write Through
    • Write Through 比 Write Back安全性高

    多实例之间没有进行资源隔离,这么做是让每个实例都能发挥最大性能。


    MySQL升级

    • 下载MySQL5.6安装包并配置MySQL5.6安装包安装路径
    • 关闭MySQL5.5实例,修改部分参数,使用MySQL5.6软件启动
    • 执行MySQL5.6路径下mysql_upgrade脚本
    • 验证是否成功升级

    目前大部分核心业务已切换成MyRocks引擎,在机器硬件配置不变的情况,约可节省一半机器。

    2. 高可用机制

    综合查询日志

    • 如果开启将会记录系统中所有SQL语句
    • 配置参数
    general_log = 1
    general_log_file = /data/mysql_data/node-1/mysql-slow.log
    
    • 偶尔用于帮助分析系统问题,对性能有影响

    备份放在集中存储(HDFS)上, 据说已达EB级别容量。

    永利国际开户送38体验,4. 如何快速部署从库

    DBA运维工作

    日常

    • 导数据、数据修改、表结构变更
    • 加权限、问题处理
      其他
    • 数据库选型部署、设计、监控、备份、优化等

    基于多数派实现自动选主。

    在线表结构变更:数据库资源申请由质量服务团队负责,做到资源的合理分布、分配,如果某个业务只需要个位数级别的DB实例,可以自行在私有DB云平台中申请部署,当数量比较大时,需要先经过质量服务团队评估通过。

    什么时候需要恢复数据

    • 硬件故障(如磁盘损坏)
    • 人为删除(如误删除数据、被黑)
    • 业务回滚(如游戏bug需要回档)
    • 正常需求(如部署镜像库、查看历史某时刻数据)

    数据库资源申请由质量服务团队负责,做到资源的合理分布、分配。如果某个业务需要小量DB实例,可以自行在私有DB云平台中申请部署;当数量比较大时,需要先经过质量服务团队评估通过才可以。返回搜狐,查看更多

    关于备份的作用定位:

    5.3-MySQL数据恢复

    若个别情况下由于特殊原因,出现从库全部挂掉的情况,会将全部请求切到主库,由它扛起所有的业务服务压力。

    某个从库挂掉时,可以动态摘除。

    课程小结

    • 恢复是已经非常苦逼的差事,尽量避免做。我们要做数据卫士而不是救火队员。(线上应该严格把控权限,数据变更操作应事先测试,操作时做好备份)
    • 有效备份( binlog)是重中之重,对数据库定期备份是必须的
    • 备份是一切数据恢复的基础

    MyRocks项目地址:


    binlog格式

    • 主要参数

    binlog_format = {ROW|STATEMENT|MIXED}

    • 查看row模式的binlog内容

    mysqlbinlog --base64-output=decode-rows -v c:/tmp/mylpg/mysql-bin.000001

    3. 备份机制

    MyRocks项目地址:

    数据库恢复工具与命令

    • mysqldump备份 -> source恢复
    • xtrabackup备份 -> xtrabackup恢复
    • binlog备份 -> mysqlbinlog恢复

    1. 概要

     

    写优化

    • 表结构设计上使用自增字段作为表的主键
    • 只对合适的字段加索引,索引太多影响写入性能
    • 监控服务器磁盘IO情况,如果写延迟较大则需要扩容
    • 选择正确的MySQL版本,合理设置参数

    所有的备份都是基于mysqldump实现,之所以采用mysqldump逻辑备份好处有:

    若个别情况下由于特殊原因,出现从库全部挂掉的情况,会将全部请求切到主库,由它扛起所有的业务服务压力。

    MySQL semi-sync(半同步复制)

    ./sorence.png

    永利国际开户送38体验 2

    半同步复制

    • 供数据分析环境拉数据
    • 供灾难恢复

    数据库资源申请由质量服务团队负责,做到资源的合理分布、分配。如果某个业务需要小量DB实例,可以自行在私有DB云平台中申请部署;当数量比较大时,需要先经过质量服务团队评估通过才可以。

    总结

    • 服务器配置要合理(内核版本、磁盘调度策略、RAID卡缓存)
    • 完善的监控系统,提前发现问题
    • 数据库版本要跟上,不要太新,也不要太老
    • 数据库性能优化:
      • 查询优化:索引优化为主,参数优化为辅
      • 写入优化:业务优化为主,参数优化为辅

    另外,MariaDB 10.2版本也即将整合MyRocks引擎。

    关于WDT项目:

    xtrabackup备份原理

    • 基于InnoDB的crash-recovery功能
    • 备份期间允许用户读写,写请求产生redo日志
    • 从磁盘上拷贝数据文件
    • 从InnoDB redo log file实时拷贝走备份期间产生的所有redo日志
    • 恢复的时候 数据文件 redo日志 = 一致性数据

    6. 团队结构及技能树

    基于配置中心实现切换,未使用VIP。

    磁盘调度策略-write back

    • 数据写入cache既返回,数据异步的从cache刷入存储介质
    • 无需备份索引,只备份数据;
    • 备份文件压缩比高,更节省磁盘空间;
    • 改进了mysqldump,备份过程中还进行额外压缩;

    一些信息可以参考: 

    innobackupex使用

    主要示例:

    • 全量备份
    innobackupex --user=root --password=123456 --defaults-file=/etc/mysql/my.cnf /dbbackup
    
    • 增量备份
    innobackupex --user=root --password=123456 --defaults-file=/etc/mysql/my.cnf --incremental --incremental-dir /dbbackup/2016-4-3_13:24:32 /dbbackup
    
    • 流方式备份
    innobackupex --user=root --password=123456 --defaults-file=/etc/mysql/my.cnf --stream=xbstream /dbbackup/ > /dbbackup/stream.bak
    
    • 并行备份
    innobackupex --user=root --password=123456 --defaults-file=/etc/mysql/my.cnf --parallel=4 /dbbackup/
    
    • 限流备份
    innobackupex --user=root --password=123456 --defaults-file=/etc/mysql/my.cnf --throttle=10 /dbbackup/
    
    • 压缩备份
    innobackupex --user=root --password=123456 --defaults-file=/etc/mysql/my.cnf --compress --compress-thread 4 /dbbackup/
    

    上面提到,因为采用多实例、多DB结构,备份时可以多DB并行备份。当然了,也会控制并行备份的数量,避免影响在线业务性能。

     

    二进制日志binlog

    • binlog (binary log)
    • 记录数据引起数据变化的SQL语句或数据逻辑变化的内容
    • MySQL服务层记录,无关存储引擎
    • binlog的主要作用:
      • 基于备份恢复数据
      • 数据库主从同步
      • 挖掘分析SQL语句

    采用基于GTID的一主多从结构,外加一个基于lossless semi-sync机制的mysqlbinlog实现的binlog server(可以理解为MySQL 5.7的loss zero replication)。

    DBA团队更多的是负责私有DB云平台的建设。

    基本知识 - 备份内容

    • 数据
      • 数据文件或文本格式数据
    • 操作日志(binlog)
      • 数据库变更日志

    DBA团队更多的是负责私有DB云平台的建设。

    每台机器都使用多实例的模型。 每个机器放多个实例,每个实例放多个DB。

    配置MySQL并行复制

    并行复制

    • 社区版5.6中新增
    • 并行是指从库多线程apply binlog
    • 库级别并行应用binlog,同一个数据库更改还是串行的(5.7版并行复制基于事务组)

    设置

    set global slave_parallel_workers=10; 设置sql线程数为10

    4. 如何快速部署从库

     

    innodb_thread_concurrency

    • innoDB内部并发控制参数,设置为0代表不做控制
    • 如果并发请求较多,参数设置较小,后进来的请求将会排队

    可使用xtrabackup在现有存活的SLAVE实例上备份,也可在主库上发起备份,再利用WDT(或者是BT)协议传输到异地,用于拉起从库。

    5. 高度自动化

    磁盘调度策略-write through

    • 数据同时写入cache和存储介质才返回写入成功

    本文由永利国际官网登录发布于网络科技,转载请注明出处:运维实践,MySQL运维经验

    关键词: 永利国际官网