zoukankan      html  css  js  c++  java
  • mysql学习------二进制日志

    一.什么是二进制日志

    1.记录对数据发生或潜在发生更改的sql语句

    2.二进制格式保存

    3.用途广泛,包括

       a.查看数据库变更历史

       b.数据库增量备份

       c.数据库灾难恢复

       d.mysql replication

    二.不重启修改二进制日志配置

    1.set @@global.log_bin=1;

    2.set @@global.binlog_size=37268  (单位是bytes)

    3.其他参数通过以下命令查阅

       show variables like '%bin%';

    三.常用二进制日志相关参数

    修改以下配置后,需要重启数据库服务使其生效

    1.log-bin= 

       开启并指定二进制日志的保存路径及文件名,不设置则使用默认值,默认存放位置为数据库文件所在目录下,名称为hostname-bin.xxxx

    2.max-binlog-size=500m

       设置单个二进制日志文件的最大值,默认为1G,最大也为1G

    3.binlog-do-db与binlog-ignore-db

       指定二进制日志文件记录那些数据库操作,不记录那些数据库操作

    4.binlog-cache-size=100m

       设置二进制日志缓存大小

    5.sync-binlog=N

       每隔N秒将缓存中的二进制日志记录写回硬盘,默认为0,不过,你经常会陷入group commit函数与I/O之间的二选一矛盾,如果在replication环境中,由于考虑到耐久性及一致性,则需设置为1,同时还需要设置innodb-flush-log-at-trx-commit=1 及 innodb-support-xa=1(默认已开启) 

    三.二进制的操作及总结

    1.暂停二进制日志

       set sql_log_bin = {0|1}

    2.查看二进制日志

       mysqlbinlog master-bin.000001

       mysqlbinlog -v master-bin.000001

       mysqlbinlog -v master-bin.000001 > test.sql       #导出二进制日志到sql脚本

       mysqlbinlog -v master-bin.000001 >> test.sql     #追加二进制日志到sql脚本

    3.mysqlbinlog的命令参数

       

    Usage: mysqlbinlog [options] log-files
      -?, --help          Display this help and exit.
      --base64-output=name 
                          Determine when the output statements should be
                          base64-encoded BINLOG statements: 'never' disables it and
                          works only for binlogs without row-based events;
                          'decode-rows' decodes row events into commented
                          pseudo-SQL statements if the --verbose option is also
                          given; 'auto' prints base64 only when necessary (i.e.,
                          for row-based events and format description events).  If
                          no --base64-output[=name] option is given at all, the
                          default is 'auto'.
      --bind-address=name IP address to bind to.
      --character-sets-dir=name 
                          Directory for character set files.
      -d, --database=name List entries for just this database (local log only).
      --debug-check       Check memory and open file usage at exit .
      --debug-info        Print some debug info at exit.
      --default-auth=name Default authentication client-side plugin to use.
      -D, --disable-log-bin 
                          Disable binary log. This is useful, if you enabled
                          --to-last-log and are sending the output to the same
                          MySQL server. This way you could avoid an endless loop.
                          You would also like to use it when restoring after a
                          crash to avoid duplication of the statements you already
                          have. NOTE: you will need a SUPER privilege to use this
                          option.
      -F, --force-if-open Force if binlog was not closed properly.
                          (Defaults to on; use --skip-force-if-open to disable.)
      -f, --force-read    Force reading unknown binlog events.
      -H, --hexdump       Augment output with hexadecimal and ASCII event dump.
      -h, --host=name     Get the binlog from server.
      -l, --local-load=name 
                          Prepare local temporary files for LOAD DATA INFILE in the
                          specified directory.
      -o, --offset=#      Skip the first N entries.
      -p, --password[=name] 
                          Password to connect to remote server.
      --plugin-dir=name   Directory for client-side plugins.
      -P, --port=#        Port number to use for connection or 0 for default to, in
                          order of preference, my.cnf, $MYSQL_TCP_PORT,
                          /etc/services, built-in default (3306).
      --protocol=name     The protocol to use for connection (tcp, socket, pipe,
                          memory).
      -R, --read-from-remote-server 
                          Read binary logs from a MySQL server. This is an alias
                          for read-from-remote-master=BINLOG-DUMP-NON-GTIDS.
      --read-from-remote-master=name 
                          Read binary logs from a MySQL server through the
                          COM_BINLOG_DUMP or COM_BINLOG_DUMP_GTID commands by
                          setting the option to either BINLOG-DUMP-NON-GTIDS or
                          BINLOG-DUMP-GTIDS, respectively. If
                          --read-from-remote-master=BINLOG-DUMP-GTIDS is combined
                          with --exclude-gtids, transactions can be filtered out on
                          the master avoiding unnecessary network traffic.
      --raw               Requires -R. Output raw binlog data instead of SQL
                          statements, output is to log files.
      -r, --result-file=name 
                          Direct output to a given file. With --raw this is a
                          prefix for the file names.
      --secure-auth       Refuse client connecting to server if it uses old
                          (pre-4.1.1) protocol.
                          (Defaults to on; use --skip-secure-auth to disable.)
      --server-id=#       Extract only binlog entries created by the server having
                          the given id.
      --server-id-bits=#  Set number of significant bits in server-id
      --set-charset=name  Add 'SET NAMES character_set' to the output.
      -s, --short-form    Just show regular queries: no extra info and no row-based
                          events. This is for testing only, and should not be used
                          in production systems. If you want to suppress
                          base64-output, consider using --base64-output=never
                          instead.
      -S, --socket=name   The socket file to use for connection.
      --start-datetime=name 
                          Start reading the binlog at first event having a datetime
                          equal or posterior to the argument; the argument must be
                          a date and time in the local time zone, in any format
                          accepted by the MySQL server for DATETIME and TIMESTAMP
                          types, for example: 2004-12-25 11:25:56 (you should
                          probably use quotes for your shell to set it properly).
      -j, --start-position=# 
                          Start reading the binlog at position N. Applies to the
                          first binlog passed on the command line.
      --stop-datetime=name 
                          Stop reading the binlog at first event having a datetime
                          equal or posterior to the argument; the argument must be
                          a date and time in the local time zone, in any format
                          accepted by the MySQL server for DATETIME and TIMESTAMP
                          types, for example: 2004-12-25 11:25:56 (you should
                          probably use quotes for your shell to set it properly).
      --stop-never        Wait for more data from the server instead of stopping at
                          the end of the last log. Implicitly sets --to-last-log
                          but instead of stopping at the end of the last log it
                          continues to wait till the server disconnects.
      --stop-never-slave-server-id=# 
                          The slave server_id used for --read-from-remote-server
                          --stop-never.
      --stop-position=#   Stop reading the binlog at position N. Applies to the
                          last binlog passed on the command line.
      -t, --to-last-log   Requires -R. Will not stop at the end of the requested
                          binlog but rather continue printing until the end of the
                          last binlog of the MySQL server. If you send the output
                          to the same MySQL server, that may lead to an endless
                          loop.
      -u, --user=name     Connect to the remote server as username.
      -v, --verbose       Reconstruct pseudo-SQL statements out of row events. -v
                          -v adds comments on column data types.
      -V, --version       Print version and exit.
      --open-files-limit=# 
                          Used to reserve file descriptors for use by this program.
      -c, --verify-binlog-checksum 
                          Verify checksum binlog events.
      --binlog-row-event-max-size=# 
                          The maximum size of a row-based binary log event in
                          bytes. Rows will be grouped into events smaller than this
                          size if possible. This value must be a multiple of 256.
      --skip-gtids        Do not print Global Transaction Identifier information
                          (SET GTID_NEXT=... etc).
      --include-gtids=name 
                          Print events whose Global Transaction Identifiers were
                          provided.
      --exclude-gtids=name 
                          Print all events but those whose Global Transaction
                          Identifiers were provided.

    4.删除二进制日志

       a.二进制日志会不断的增长,并产生多个文件,因此需要制定备份计划和管理策略,无用的二进制日志要记得及时删除

       b.删除二进制日志有三种方法:

          1.操作系统命令直接删除

          2.reset master

          3.purge

             purge {master | binary} logs to 'log_name'

             purge {master | binary} logs before 'date'

    5.总结

       a.日志影响mysql的性能有大量的磁盘空间,因此,往往做采样分析时才打开

       b.即使做采样分析,也最好仅在一台测试机器上开启

       c.二进制日志由于用途广泛,大多数情况下会开启,需要制定合理的备份计划和管理策略

  • 相关阅读:
    Python 元类
    Rsync 基础配置
    linux shell find
    找最大的目录
    云主机的上下行带宽
    关于c3p0 ResourcePoolException: Attempted to use a closed or broken resource pool
    recover_file
    MegaCli 监控raid状态
    influxdb
    在Ubuntu 16.04如何安装Java使用apt-get的
  • 原文地址:https://www.cnblogs.com/Yongzhouunknown/p/4865762.html
Copyright © 2011-2022 走看看