#通过mysqlbinlog查看binglog日志,结果生产到1.sql文件
#base64-output,可以控制输出语句输出base64编码的BINLOG语句;decode-rows:配合--verbose选项一起使用解码行事件到带注释的伪SQL语句
#-v, --verbose 重新构建伪SQL语句的行信息输出,-v -v会增加列类型的注释信息。
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000657 > 1.sql
#查找包含表名同时包含INSERT得行,并获取前面一行-B1,后面n+2,n为表得字段个数-A19
grep sys_operation_log 1.sql -B1 -A19|grep INSERT -B1 -A19 >2.sql
#根据日期过滤211028得数据,-A20上一条命令-A19+1
grep 211028 2.sql -A20 >3.sql
#删除带有211028得行
sed -i "/211028/d" 3.sql
#将#替换为空
sed -i "s/#//g" 3.sql
#将at xxx替换为);
sed -i "s/at .*/);/g" 3.sql
#将SET替换为values(
sed -i "s/SET/values(/g" 3.sql
#将@xx=替换为,
sed -i "s/@[0-9]*=/,/g" 3.sql
#将values得下一行的,替换为空,结果追加到4.sql,得到的结果就是可以直接执行的sql语句
sed '/values/{n; s/,//; }' 3.sql > 4.sql
附录:
1.版本号不同:
# /usr/local/mysql57/bin/mysqlbinlog --version
/usr/local/mysql57/bin/mysqlbinlog Ver 3.4 for linux-glibc2.12 at x86_64
# /usr/local/mysql80/bin/mysqlbinlog --version
/usr/local/mysql80/bin/mysqlbinlog Ver 8.0.12 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)
2.新增参数:
--server-public-key-path=name
--get-server-public-key
--ssl-fips-mode=name
--print-table-metadata
新增TLS的版本支持TLSv1.2
3.剔除参数:
--secure-auth
--ssl 使用参数替代--ssl-mode
--ssl-verify-server-cert 使用参数--ssl-mode=VERIFY_IDENTITY替代
4.mysqlbinlog参数说明:
--base64-output=name binlog输出语句的base64解码 分为三类:
默认是值auto ,仅打印base64编码的需要的信息,如row-based 事件和事件的描述信息。
never 仅适用于不是row-based的事件
decode-rows 配合--verbose选项一起使用解码行事件到带注释的伪SQL语句
--bind-address=name 要绑定的IP地址
--character-sets-dir=name 指定字符集的路径
--set-charset=name 将“SET NAMES character_set”添加到输出中,用于改变binlog的字符集。
-d, --database=name 列出数据库的名称(仅限binlog文件存储在本地)
--rewrite-db=name 将binlog中的事件信息重定向到新的数据库
--调试信息相关:
-#, --debug[=#] 非调试版本,获取调试信息并退出
--debug-check 非调试版本,获取调试信息并退出
--debug-info 非调试版本,获取调试信息并退出
--default-auth=name 默认使用的客户端认证插件
-D, --disable-log-bin 禁用binlog日志,若开启--to-last-log并发送输出文件到相同的mysql server。这种方式避免无限循环。
在规避数据库奔溃恢复数据的时候有用。注意:需要super权限来使用此选项。
-F, --force-if-open 强制开启binlog,若binlog非正常关闭,默认是on可使用--skip-force-if-open关闭。
-f, --force-read 强制读取未知的binlog事件
-H, --hexdump 使用十六进制和ASCII码转储输出的信息
-h, --host=name 获取binlog的服务器IP地址或者域名
-i, --idempotent 通知服务器使用幂等模式应用行事件
-l, --local-load=name 准备LOAD DATA INFILE的本地临时文件指定目录。
-o, --offset=# 跳过前N个条目
-p, --password[=name] 连接远程服务器的密码
--plugin-dir=name 客户端插件的目录。
-P, --port=# 用于连接的端口,0表示默认值。端口使用的优先级:my.cnf,$ MYSQL_TCP_PORT,/etc/services,内置默认值(3306)
--protocol=name 用于连接的协议(tcp,socket,pipe,memory)
-R, --read-from-remote-server 从MySQL远程服务器读取二进制日志,是read-from-remote-master = BINLOG-DUMP-NON-GTIDS的别名。
--read-from-remote-master=name
--raw 配合参数-R一起使用,输出原始的binlog数据而不是SQL语句
-r, --result-file=name 输出指定的文件,和--row一起使用,此时是数据文件的前缀。
-t, --to-last-log 配合-R一起使用
--server-id=# 仅提取服务器创建的binlog条目
给定的id。
--server-id-bits=# 设置server-id中的有效位数。
-s, --short-form 仅适用于常规查询,没有额外的信息和row-based事件信息。仅用于测试,不使用于生产环境。
如果你想抑制base64-output,考虑使用--base64-output = never代替。
-S, --socket=name 使用socket文件连接。
---SSL相关的参数:
--server-public-key-path=name PEM格式的RSA 秘钥
--get-server-public-key 服务器的公钥
--ssl-mode=name SSL连接的模式
--ssl-ca=name PEM格式的CA文件
--ssl-capath=name CA路径
--ssl-cert=name PEM格式的X509证书
--ssl-cipher=name 使用的SSL密码
--ssl-key=name PEM格式的X509密钥
me PEM格式的X509证书
–ssl-cipher=name 使用的SSL密码
–ssl-key=name PEM格式的X509密钥