• binlogserver搭建


    在MySQL 5.7.x版本中,mysqlbinlog工具解析任何一个本地的binlog或relay log时,都不会在mysqlbinlog命令执行结束时追加rollback语句,

    但在MySQL 5.6.x版本中,mysqlbinlog工具解析每一个本地binlog和relay log时在mysqlbinlog命令退出时都会加rollback语句
     
    binlog是增量备份必备之一,在有些场景下,实时或定期备份binlog是有必要的。
    其实官方mysqlbinlog自带这个功能。
    MySQL Binlog Server:是利用某个工具,把线上活跃的库的日志拉取到本地进行备份。在MySQL 5.6以后,可以利用mysqlbinlog这个命令去把远程机器的日志备份到本地目录,从而达到增量或是日志安全方面的备份。

    常用的参数:
    -R | --read-from-remote-server 表示开启binlog备份,在对应的主节点上请求binlog到本地。
    --raw 被复制过来的binlog以二进制的格式存放,如果不加该参数则为text格式。
    -r | --result-file 指定目录或文件名:若指定了--raw参数,-r的值指定binlog的存放目录和文件名前缀;若没有指定--raw参数,-r的值指定文本存放的目录和文件名。
    -t 这个选项代表从指定的binlog开始拉取,直到当前主节点上binlog的最后一个。
    --stop-never 持续连续从主节点拉取binlog,持续备份到当前最后一个,并继续下去。该参数包含-t
    --stop-never-slave-server-id 默认值65535,用于在多个mysqlbinlog进程或者从服务器的情况下,避免ID冲突。
     
    mysqlbinlog开启备份后,直到连接关闭或者被强制kill才会结束。
    可通过ps查看到已经开启的备份进程。
    用法示例:完整并保持原样的将远程server的binlog拉到本地,并存放在/data/backup_binlog目录中。
    注意,-r指定的目录必须写完整,否则会被放在/data目录下,并以"backup_binlog"为前缀命名binlog
    如:-r /data/backup_binlog 则会显示为 /data/backup_binlog/mysql-bin.000008
     
    mkdir -p /data/backup_binlog
    mysqlbinlog -h$ip -P$port -u$user -p$password -R --raw --stop-never mysql-bin.000008 -r /data/backup_binlog/ &
     

    # cat bakbinlog.sh
    #!/bin/bash
    MBL=/usr/local/mysql/bin/mysqlbinlog
    MYB=/usr/local/mysql/bin/mysql
    MYSQLHOST=192.168.1.101
    MYSQLPORT=3306
    MYSQLUSER=dba_user
    MYSQLPASS=msds007
    BACKUPDIR=/data/backup_binlog/$MYSQLHOST/
    RESPAWN=10
    FIRSTBINLOG=`$MYB -u$MYSQLUSER -p$MYSQLPASS -h$MYSQLHOST -P$MYSQLPORT -e "show master status;" | grep bin | awk '{print $1}'`
    mkdir -p $BACKUPDIR
    while :
    do
        if [ `ls -A "$BACKUPDIR" | wc -l` -eq 0 ];then
            LASTFILE=$FIRSTBINLOG
        else
            LASTFILE=`ls -al "$BACKUPDIR" | tail -n 1 | awk '{print $9}'`
        fi
        echo 'Starting live binlog backup'
        $MBL -h$MYSQLHOST -P$MYSQLPORT -u$MYSQLUSER -p$MYSQLPASS -R --raw --stop-never $LASTFILE -r $BACKUPDIR
        echo 'mysqlbinlog exited with $? trying to reconnect in $RESPAWN seconds'
        sleep $RESPAWN
    done
     
    # sh bakbinlog.sh > mybakbinlog.log 2>&1 &
     

    用Python开发MySQL增强半同步BinlogServer

    项目地址为:

    https://github.com/alvinzane/py-mysql-binlogserver

    主要特性如下:

    全Python标准模块开发,无第三方库依赖,减少学习成本

    独立Dumper进程,用于同步保存Binlog event

    支持半同步协议,数据零丢失

    独立Server进程,支持Failover时Change master to来补数据

    支持GTID,方便切换Master

    暂不支持级联复制模式

    仅在MySQL官方版5.7+下测试通过

    仅支持Python3, 不兼容Python2

    目录结构:

    1. py-mysql-binlogserver

    2. ├── README.doc

    3. ├── doc

    4. │   ├── T1基础篇-用Python开发MySQL增强半同步BinlogServer.md

    5. │   ├── T2通信篇-用Python开发MySQL增强半同步BinlogServer.md

    6. │   ├── T3实战篇-用Python开发MySQL增强半同步BinlogServer.md

    7. │   ├── T4架构篇-用Python开发MySQL增强半同步BinlogServer.md

    8. │   └── readme.md

    9. └── py_mysql_binlogserver

    10.     ├── __init__.py

    11.     ├── _playground                             # 练习场,随便玩

    12.     │   ├── __init__.py

    13.     │   ├── socket_client.py

    14.     │   ├── socket_client_semi-repl.py

    15.     │   └── test_slave.py

    16.     ├── _tutorial                               # 教程实例代码

    17.     │   ├── __init__.py

    18.     │   ├── learn_bin1_charset.py

    19.     │   ├── learn_bin2_binlog.py

    20.     │   ├── learn_packet1_greeting.py

    21.     │   ├── learn_packet2_auth.py

    22.     │   ├── learn_packet3_query.py

    23.     │   ├── learn_packet4_dump.py

    24.     │   ├── learn_packet4_dump2.py

    25.     │   ├── learn_packet5_dump_with_semi_ack.py

    26.     │   ├── learn_socket1_client.py

    27.     │   ├── learn_socket2_server.py

    28.     │   ├── learn_socket3_server_mulit_thread.py

    29.     │   └── learn_socket4_server_mulit_thread.py

    30.     ├── binlogs                                 # Binlog文件保存目录

    31.     │   ├── mysql-bin.000014

    32.     │   ├── mysql-bin.gtid.index

    33.     │   └── mysql-bin.index

    34.     ├── cap

    35.     ├── constants

    36.     │   ├── EVENT_TYPE.py

    37.     │   └── FIELD_TYPE.py

    38.     ├── dump

    39.     │   └── readme.md

    40.     ├── packet

    41.     │   ├── __init__.py

    42.     │   ├── binlog_event.py

    43.     │   ├── challenge.py

    44.     │   ├── dump_gtid.py

    45.     │   ├── dump_pos.py

    46.     │   ├── event_header.py

    47.     │   ├── gtid_event.py

    48.     │   ├── query.py

    49.     │   ├── response.py

    50.     │   ├── semiack.py

    51.     │   └── slave.py

    52.     ├── protocol

    53.     │   ├── Flags.py

    54.     │   ├── __init__.py

    55.     │   ├── err.py

    56.     │   ├── gtid.py

    57.     │   ├── ok.py

    58.     │   ├── packet.py

    59.     │   └── proto.py

    60.     └── tests                               # 单元测试

    61.     │   ├── __init__.py

    62.     │   └── test_packet.py

    63.     ├── proxy.py                            # 简单代理,用于观察和保存MySQL Packet

    64.     ├── server.py                           # 实现Master协议

    65.     ├── dumper.py                           # Binlog Dumper,相当于IO Thread

    66.     ├── example.conf                        # 配置文件

    67.     └─── example.py                         # 同时启动 Server&Dumper

  • 相关阅读:
    搭建VueMint-ui框架
    vue项目创建
    jQuery选择器总结
    位运算
    Hash哈希
    并发编程(六)并发容器
    并发编程(五)AQS
    并发编程(四)显示锁
    Java中的几种代码块
    并发编程(三)原子操作CAS
  • 原文地址:https://www.cnblogs.com/allenhu320/p/11365659.html
Copyright © 2020-2023  润新知