binlog学习笔记

登录mysql查看是否开启binlog
show variables like 'log_%'

window修改my.ini, Linux修改my.cnf
[mysqld]
server_id=2
log_bin=mysql-bin
binlog_format=ROW

查看binlog日志事件节点
show binlog events in 'binlog.000001'

查看binlog当前节点
show master status

终止当前binlog,并生成新的binlog
flush logs

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mysql恢复binlog数据
mysqlbinlog  -d wzn_census --start-position=219 --stop-position=517  mysql-bin.000001 | mysql -uroot -p123456
mysqlbinlog  -d wzn_census --start-datetime="2022-11-22 13:56:00" --stop-datetime="2022-11-22 13:58:00"  mysql-bin.000001 > bin.sql    [mysql -uroot -p123456 < bin.sql]
mysqlbinlog 运行过程中如果出现unknown variable 'default-character-set=utf8mb4'异常,可以再该命令后加--no-defaults参数解决:mysqlbinlog --no-defaults
导出可视化sql: mysqlbinlog mysql-bin.000001 -–base64-output=decode-rows -v > tmp.sql

=========================
binlog2sql恢复binlog数据  git clone https://github.com/danfengcao/binlog2sql.git
所需环境 Python 3.9.5 pip 22.0.4  
pip install -r requirements.txt

常见问题1:     Access denied for user 'root'@'localhost' (using password:YES)
update user set host = '%' where user = 'root';
flush privileges;

常见问题2:    python 连接 mysql 数据库出现 keyerror: 255
pip install --upgrade PyMySQL

常见问题3:    ModuleNotFoundError: No module named 'pymysql.util'
pip uninstall pymsql
pip install pymysql==0.9.3

常见问题4:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 39: invalid start byte
修改binlog2sql源码中的binlog2sql_util.py指定字符编码的代码 block.decode('utf-8','ignore')

**mysql连接配置**
mysql -h host -P port -u user -p password

**解析模式**
--stop-never 持续解析binlog。可选。默认False,同步至执行命令时最新的binlog位置。
-K, --no-primary-key 对INSERT语句去除主键。可选。默认False
-B, --flashback 生成回滚SQL,可解析大文件,不受内存限制。可选。默认False。与stop-never或no-primary-key不能同时添加。
--back-interval -B模式下,每打印一千行回滚SQL,加一句SLEEP多少秒,如不想加SLEEP,请设为0。可选。默认1.0。

**解析范围控制**
--start-file 起始解析文件,只需文件名,无需全路径 。必须。
--start-position/--start-pos 起始解析位置。可选。默认为start-file的起始位置。
--stop-file/--end-file 终止解析文件。可选。默认为start-file同一个文件。若解析模式为stop-never,此选项失效。
--stop-position/--end-pos 终止解析位置。可选。默认为stop-file的最末位置;若解析模式为stop-never,此选项失效。
--start-datetime 起始解析时间,格式'%Y-%m-%d %H:%M:%S'。可选。默认不过滤。
--stop-datetime 终止解析时间,格式'%Y-%m-%d %H:%M:%S'。可选。默认不过滤。

**对象过滤**
-d, --databases 只解析目标db的sql,多个库用空格隔开,如-d db1 db2。可选。默认为空。
-t, --tables 只解析目标table的sql,多张表用空格隔开,如-t tbl1 tbl2。可选。默认为空。
--only-dml 只解析dml,忽略ddl。可选。默认False。
--sql-type 只解析指定类型,支持INSERT, UPDATE, DELETE。多个类型用空格隔开,如--sql-type INSERT DELETE。可选。默认为增删改都解析。用了此参数但没填任何类型,则三者都不解析。

python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p123456 -d wzn_census -t sys_event_counts --start-file mysql-bin.000001 --start-position 219 --stop-position 517 -B > tmp.sql
python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p123456 -d wzn_census -t sys_house_info_import --start-file="mysql-bin.000001" --start-datetime="2022-11-22 13:56:00" --stop-datetime="2022-11-22 13:58:00" -B | mysql -uroot -p123456

======================
MyFlash恢复binlog数据  git clone https://github.com/Meituan-Dianping/MyFlash.git
安装依赖:  
yum install gcc*  pkg-config glib2 libgnomeui-devel -y

开始安装:  cd MyFlash   
gcc -w  `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c  -o binary/flashback

配置环境变量:  
vim /etc/profile
# 在文件最后一行添加
alias flashback=/home/MyFlash/binary/flashback
# 生效环境配置
source /etc/profile
查看安装成功:
./flashback --help
操作命令:
Application Options:
  --databaseNames             databaseName to apply. if multiple, seperate by comma(,)   指定需要回滚的数据库名。多个数据库可以用“,”隔开。如果不指定该参数,相当于指定了所有数据库。
  --tableNames                tableName to apply. if multiple, seperate by comma(,)   指定需要回滚的表名。多个表可以用“,”隔开。如果不指定该参数,相当于指定了所有表。
  --start-position            start position    指定回滚开始的位置。如不指定,从文件的开始处回滚。请指定正确的有效的位置,否则无法回滚
  --stop-position             stop position        指定回滚结束的位置。如不指定,回滚到文件结尾。请指定正确的有效的位置,否则无法回滚
  --start-datetime            start time (format %Y-%m-%d %H:%M:%S)    指定回滚的开始时间。注意格式必须是 %Y-%m-%d %H:%M:%S。 如不指定,则不限定时间
  --stop-datetime             stop time (format %Y-%m-%d %H:%M:%S)    指定回滚的结束时间。注意格式必须是 %Y-%m-%d %H:%M:%S。 如不指定,则不限定时间
  --sqlTypes                  sql type to filter . support INSERT, UPDATE ,DELETE. if multiple, seperate by comma(,) 指定需要回滚的sql类型。目前支持的过滤类型是INSERT, UPDATE ,DELETE。多个类型可以用“,”隔开。
  --maxSplitSize              max file size after split, the uint is M    一旦指定该参数,对文件进行固定尺寸的分割(单位为M),过滤条件有效,但不进行回滚操作。该参数主要用来将大的binlog文件切割,防止单次应用的binlog尺寸过大,对线上造成压力
  --binlogFileNames           binlog files to process. if multiple, seperate by comma(,)    指定需要回滚的binlog文件,目前只支持单个文件,后续会增加多个文件支持
  --outBinlogFileNameBase     output binlog file name base    指定输出的binlog文件前缀,如不指定,则默认为binlog_output_base.flashback
  --logLevel                  log level, available option is debug,warning,error    仅供开发者使用,默认级别为error级别。在生产环境中不要修改这个级别,否则输出过多
  --include-gtids             gtids to process    指定需要回滚的gtid,支持gtid的单个和范围两种形式。
  --exclude-gtids             gtids to skip    指定不需要回滚的gtid,用法同include-gtids
 
生成回滚文件
./flashback --binlogFileNames=binlog.000003 --sqlTypes='UPDATE' --databaseNames=wzn_census --tableNames=sys_house_info_import --start-datetime='2022-11-22 13:56:00' --stop-datetime='2022-11-22 13:58:00'
切割大文件
./flashback --maxSplitSize=1 --binlogFileNames=binlog_output_base.flashback
回滚文件
mysqlbinlog binlog_output_base.flashback.000001 | mysql -h<host> -u<user> -p<password>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值