zoukankan      html  css  js  c++  java
  • 二进制日志配置和运维管理

    1.sync_binlog 配置的性能与安全的考量
    控制二进制日志数据多久写入磁盘一次
    1.安全性的考虑,
    sync_binlog=0 系统默认,二进制日志并未显式地被服务器写入磁盘,可能会丢失1个或者多个事务的数据
    sync_binlog=1 对于支持XA的事务引擎如innodb,不会丢失数据
    2.性能的考虑
    sync_binlog=0 性能不错
    sync_binlog=1 性能下降,根据业务不同,可能有20%左右的性能损耗
    show variables like 'sync_binlog%';

    mysql> show variables like 'sync_binlog%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | sync_binlog   | 0     |
    +---------------+-------+

    是否把binlog的缓存刷新到磁盘
    如果是1 就是在一个事务完成后把binlog的缓存刷新到磁盘

    测试性能影响
    sysbench --num-threads=100 --max-requests=1000 --test=oltp --db-driver=mysql --mysql-host=192.168.1.250 --mysql-user=root --mysql-password='' prepare
    创建表sbtest,10000条记录写入
    运行测试
    sysbench --num-threads=100 --max-requests=1000 --test=oltp --db-driver=mysql --mysql-host=192.168.1.250 --mysql-user=root --mysql-password='' run

    2.配置选项 binlog_cache_size=1M
    事务缓存的内存大小
    如果过小,事务大于缓存那部分数据会进入磁盘,造成性能下降
    如果过大,服务器其它部分分配内存下降,造成性能下降
    判断事务日志缓存进入磁盘是否过多过大
    show global status like 'binlog_cache%';
    binlog_cahce_disk_use(很小或是0 )
    binlog_cache_use
    max_binlog_cache_size=2M
    二进制日志最大的事务大小
    预防大型事务可能阻塞二进制日志太长时间,导致其它事务等待二进制日志写

    3.日志轮换
    (1)手工轮换
    flush logs
    (2)自动轮换
    设置 max_binlog_size 单个日志文件的最大大小
    大于最大大小会产生新的日志文件
    (3)mysql重启
    奔溃重启 轮换

    清除日志
    mysql里
    1.根据编号文件名
    删除mysql-bin.000100 之前的日志 但不包括 mysql-bin.000100
    purge binary logs to 'mysql-bin.000100';
    2.根据时间
    purge binary logs before '2017-02-18';
    删除 2017-02-18之前的日志 但不包括 2017-02-18
    3.自动删除
    设置过期时间
    expire_logs_days=10(天)

    二进制日志和数据回滚和恢复
    一.PITR数据库定点即时恢复
    PITR: point in time recovery 思路与步骤
    step1 :恢复全备
    step2 :利用二进制日志恢复至指定的时间点
    操作过程
    1.使用innbackupex 工具进行全备
    在/home/backup/
    innobackupex --defaults-file=/etc/my.cnf --user=root /home/backup

    2.更新操作
    update1
    update2
    update3
    update3是操作错误的,需要恢复到update3之前
    3.恢复全备
    停掉mysql服务
    应用日志
    到 /home/backup/
    innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log 2017-02-04_15-30-43/
    cd /var/lib
    mv mysql mysql20170204
    mkdir mysql
    chown -R mysql.mysql /var/lib/mysql
    cd /home/backup
    innobackupex --defaults-file=/etc/my.cnf --user=root --password='' --copy-back 2017-02-04_15-30-43/
    出现
    innobackupex: completed OK!
    表示恢复成功完成

    4.使用mysqlbinlog工具过滤日志,恢复至更新update3的日志位置
    查看全备时的起始位置
    cd 2017-02-04_15-30-43/
    cat xtrabackup_binlog_info
    二进制文件名 位置
    cd var/log/mysql
    mysqlbinlog --base64-output='decode-rows' -vvv --start-pos=107 --stop--pos=731 mysql-bin.000100 >100.sql
    mysql<100.sql

    误操作的恢复
    在二进制日志目录下
    mysqlbinlog --base64-output='decode-rows' -vvv mysql-bin.000100 >100.sql
    在100.sql中查找相关的纪录(row模式下通过注释)
    生产中脚本处理

  • 相关阅读:
    块设备驱动、bio理解
    configfs_sample.c 理解
    configfs-用户空间控制的内核对象配置
    infiniswap安装
    virtualBox环境下安装centos7,设置虚拟主机和本地主机网络互通的几个关键步骤
    知识点-web
    SpringSecutiry源码探究(DAO密码认证)
    知识点-线程
    知识点-基础
    keypoint
  • 原文地址:https://www.cnblogs.com/HKUI/p/6414830.html
Copyright © 2011-2022 走看看