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模式下通过注释)
    生产中脚本处理

  • 相关阅读:
    codevs 2632 非常好友
    codevs 1213 解的个数
    codevs 2751 军训分批
    codevs 1519 过路费
    codevs 1503 愚蠢的宠物
    codevs 2639 约会计划
    codevs 3369 膜拜
    codevs 3135 River Hopscotch
    数论模板
    JXOJ 9.7 NOIP 放松模拟赛 总结
  • 原文地址:https://www.cnblogs.com/HKUI/p/6414830.html
Copyright © 2011-2022 走看看