zoukankan      html  css  js  c++  java
  • mysql 日志方面与备份、恢复

    binary log 日志

    查询二进制日志位置

    show varsables like "%log_bin%"

    刷新重新生成一个binary_log

    flush logs;

    查看已有的二进制日志文件

    show binary logs;

    可以查看目前正在使用的哪个二进制日志

    show master status;

    查看二进制日志模式

    select @@binlog_format
    MIXED 混合模式 MBR
    ROW 行模式 RBR 5.7版默认 推荐用
    statment 原语句模式 SBR 5.6版默认

    输出事务信息

    SHOW BINLOG EVENTS IN 'mysql-bin.000009';
    ..可以查看事务的开始at位置号,结束at位置号

    查看二进制日志内容

    mysqlbinlog mysql-bin.000009;
    mysqlbinlog --base64-output=decode-rows -vvv mysql-binlog.000009;

    找到建表起始点和删除之前为结束点的at号进行恢复(-d 库名)

    mysqlbinlog -d 库名 --skip-gtids --start-position=219 --stop-position=335 mysql-binlog.000009 >/tmp/xx.sql
    ..起始点at219,结束点at335

    恢复前临时关闭当前会话二进制日志

    set sql_log_bin=0;
    source /tmp/xx.sql;
    set sql_log_bin=1;


    gtid记录模式的管理

    组成

    server_uuid:tid
    保存在./data/auto.cnf

    GTID幂等性

    如果拿有GTID的日志去恢复时,检查当前系统中是否有相同的GTID号,如果有相同的就是自动跳过
    会影响到binlog恢复和主从复制

    GTID开启和配置

    gtid-mode=on
    enforce-gtid-consistency=true

    GTID恢复

    mysqlbinlog --skip-gtids --include-gtids='3ca79ab5-3e4d-11e9-a709-000c293b577e:7-12' mysql-bin.000004> /tmp/bin.sql
    7-12表示从7到12的gtid子号
    --skip-gtids 表示导出时忽略原有的gtid信息,恢复时生产最新的gtid信息,不忽略就会跳过导入,最终失败。
    set sql_log_bin=0
    source /tmp/bin.sql
    set sql_log_bin=1
    mysqlbinlog 其他参数--exclude-gtids排除(用于排除删除操作例如drop table),多段日志编号用逗号分开


    slowlog 慢日志

    开关:

    slow_query_log=1

    文件位置及名字

    slow_query_log_file=/data/mysql/slow.log

    设定慢查询时间:

    long_query_time=0.1

    没走索引的语句也记录:

    log_queries_not_using_indexes

    慢日志分析

    mysqldumpslow -s c -t 10 /data/mysql/slow.log
    过滤出 按照语句被执行次数排序,top10


    mysqldump备份

    备份恢复思路

    先找个临时库,采用之前时间点的全备份恢复
    然后使用binlog 恢复 全备份点之后新增的数据

    注意难点:全备份中--master-data可以看到备份截止at点,或者是gtid点(show binlog event in 'mysql-bin.00000*')

    最后用测试库顶替,或者是导出需要的部分表,再导入到生产

    mysqldump命令备份

    mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction|gzip > /backup/full_$(date +%F).sql.gz
    mysqldump -uroot -p123 -A -R --triggers --master-data=2 --single-transaction|gzip > /backup/full_$(date +%F-%T).sql.gz
    -R存储过程 || --triggers 触发器
    --master-data=2
    *(1)记录备份时刻的binlog信息
    *(2)自动锁表,不加--single-transaction,就是温备份
    *加了--single-transaction ,对与innodb表不锁表,一致性快照备份,(快照备份)

    扩展参数

    --set-gtid-purged=auto/on 保存gtid信息
    --set-gtid-purged=off 里面不保存gtid,单机数据库使用没有问题,但是主从环境下必须开启on
    --max_allowed_packet=128M 传输数据包较大时使用

    从mysqldump 全备中获取库和表的备份

    1、获得表结构
    *sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE zabbix/!d;q' full.sql>createtable.sql
    2、获得insert into 语句,用于数据的恢复
    *grep -i 'INSERT INTO zabbix' full.sql>data.sql &
    3、获取单库的备份
    *sed -n '/^-- Current Database: world/,/^-- Current Database: `/p' all.sql>world.sql

  • 相关阅读:
    设置div内的内容不能被选中
    js中!和!!的区别及用法
    echars自定义提示框位置
    数组排序
    查询一个表的不同数据,显示到一个表
    document.body
    设置fixed,横向滚动条失效
    scrollTop
    JS 数组
    JS 数学函数
  • 原文地址:https://www.cnblogs.com/plefan/p/14345714.html
Copyright © 2011-2022 走看看