使用 mysqlbinlog 命令解析查看 kundb binlog 日志

  使用配置
内容纲要

概要描述


kundb的binlog_format是ROW,所以我们可以通过解析binlog的方式,获取sql的执行历史。

本文我们以tds元数据库kundb为例,排查什么时间对一个任务流做了删除操作。

详细说明


测试环境:kundb-2.1.8-final

这里,我们对TDS中一个workflow任务流testlkw01 执行删除操作。

1. 确认kundb主节点

可以点击任意一个 KunGate 角色后面的查看链接,鼠标悬停到MASTER的节点后面的Tablet信息,可以看到https://kv4:15006,主节点也就是kv4节点

file

file

file

2. 进入主节点所在pod,执行解析操作

# 获取所有kundb的pod
[root@kv2~]# kubectl get pods -owide |grep kundb1
kundb-kungate-kundb1-646f87f668-4llht                       1/1     Running            0          41h     172.22.23.3   kv3               
kundb-kungate-kundb1-646f87f668-ffqnt                       1/1     Running            0          41h     172.22.23.2   kv2               
kundb-kungate-kundb1-646f87f668-sqnjw                       1/1     Running            0          41h     172.22.23.4   kv4               

# 进入主节点kv4的pod
[root@kv2~]# kubectl exec -it kundb-kungate-kundb1-646f87f668-sqnjw bash
root@kv4:/vt/manager# ps -ef |grep mysql
root          27       1  0 Jul10 ?        00:01:51 /vt/bin/mysqlctld -grpc_auth_mode=none -log_file=/vdir/var/log/kundb1/vt_0000000003/mysqlctld.INFO -tablet_dir=kundbdata -port=15008 -mysql_port=15006 -replication_group_local_address_port=15005 -init_db_sql_file=/vt/config/init_db.sql:/vt/config/init_db_clone.sql:/vt/config/init_db_keyring.sql:/vt/config/init_db_validate_password.sql:/vt/config/init_password.sql:/vt/config/init_db_super_system_admin.sql -db-config-app-uname vt_app -db-config-app-charset utf8mb4 -report_hostname=kv4 -socket_file=/tmp/mysqlctld.sock -tablet_uid=3 -init_keyspace=kundb1 -init_shard=0 -init_tablet_type=replica -wait_tablet_online_num=3 -tso_host=multi:///kv2:15004,kv3:15004,kv4:15004
root          30       1  0 Jul10 ?        00:09:44 /vt/bin/vtgate -dbtopo_address=kv2:15006,kv3:15006,kv4:15006 -tso_host=multi:///kv2:15004,kv3:15004,kv4:15004 -log_file=/vdir/var/log/kundb1/kungate/public/vtgate.INFO -audit_log_file=/vdir/var/log/kundb1/kungate/public/audit/vtgate.audit.INFO -port=15001 -grpc_max_message_size=1073741824 -mysql_server_port=15307 -audit_sqls=0 -snowflake_id 3 -tablet_types_to_wait=MASTER -gateway_implementation=discoverygateway -audit_filter= -pid_file=/vdir/var/log/kundb1/kungate/public/vtgate.pid -lower_case_table_names=true -add_lockshare_seri=true -conn_count=2 -skip_peak_log=false -skip_kungate_join=true -skip_scatter_view=true -enable_new_optimizer=true -enable_access_control=true -ip_filter_config_file=/etc/kundb1/conf/ip_config.json -grpc_auth_static_client_creds=/etc/kundb1/conf/grpc_static_client_auth.json -mysql_auth_server_impl=mysql_native_password -mysql_dynamic_auth=true -enable_dac_on_gate=false -kundb_enable_sql_monitor=false -kundb_enable_proxy_mode=false -kundb_enable_analyze_check=false -enable_mysql_statistic=false -kundb_set_isolation=true -mysql_server_version=8.0.33-KunDB -web_protocol=https -web_cert=/etc/kundb1/conf/kungate.server.cert.pem -web_key=/etc/kundb1/conf/kungate.server.key.pem -db-config-app-uname vt_app -db-config-app-charset utf8mb4
root          65      27  0 Jul10 ?        00:00:00 /bin/sh /usr/local/mysql80-org/bin/mysqld_safe --defaults-file=/vdir/mnt/disk1/kundb1/kundbdata/my.cnf --user=root
root        1561      65 13 Jul10 ?        05:34:54 /usr/local/mysql80-org/bin/mysqld --defaults-file=/vdir/mnt/disk1/kundb1/kundbdata/my.cnf --basedir=/usr/local/mysql80-org --datadir=/vdir/mnt/disk1/kundb1/kundbdata/data --plugin-dir=/usr/local/mysql80-org/lib/plugin --user=root --log-error=/vdir/mnt/disk1/kundb1/kundbdata/error.log --pid-file=/vdir/mnt/disk1/kundb1/kundbdata/mysql.pid --socket=/vdir/mnt/disk1/kundb1/kundbdata/mysql.sock --port=15006
root      205047  205026  0 10:24 pts/0    00:00:00 grep mysql

# 进入前面mysqld进程中 --datadir路径的上层
root@kv4:/vt/manager# cd /vdir/mnt/disk1/kundb1/kundbdata

# 按照时间排序,看最新的binlog文件是077结尾的
root@kv4:/vdir/mnt/disk1/kundb1/kundbdata/bin-logs# ls -lrth
total 3.5G
-rw-r----- 1 root root 1.1G Jul  4 18:16 vt-0000000003-bin.000071
-rw-r----- 1 root root 1.1G Jul  6 13:01 vt-0000000003-bin.000072
-rw-r----- 1 root root 956M Jul  9 10:14 vt-0000000003-bin.000073
-rw-r----- 1 root root  39M Jul 10 16:33 vt-0000000003-bin.000074
-rw-r----- 1 root root 8.0M Jul 10 16:36 vt-0000000003-bin.000075
-rw-r----- 1 root root 7.7M Jul 10 16:56 vt-0000000003-bin.000076
-rw-r----- 1 root root  469 Jul 10 16:56 vt-0000000003-bin.index
-rw-r----- 1 root root 463M Jul 12 10:24 vt-0000000003-bin.000077

# 通过如下命令进行解析,解析出来的binlog文件一般都有1G 以上,建议输出到文件中
# 我们也可以使用一些mysqlbinlog参数,限制返回的时间范围、pos范围、database范围
    --start-position=953                   起始pos点
    --stop-position=1437                   结束pos点
    --start-datetime="2013-11-29 13:18:54" 起始时间点
    --stop-datetime="2013-11-29 13:21:53"  结束时间点
    --database=zyyshop                     指定只恢复zyyshop数据库
root@kv4:/vdir/mnt/disk1/kundb1/kundbdata/bin-logs# mysqlbinlog -vv vt-0000000003-bin.000077 --result-file=07.sql

# 如果是 kundb 2.1.8 之前的版本,则使用如下命令:
root@kv4:/vdir/mnt/disk1/kundb1/kundbdata/bin-logs# mysqlbinlog --base64-output=decode-rows -vv vt-0000000003-bin.000077 --result-file=07.sql

日志文件较大,不建议直接在容器里vi操作,建议进行一些初步筛选后查看。

# 筛选testlkw01的delete操作,-C 20是为了看到前后的内容,现场根据实际需要调整
cat 07.sql|grep 'testlkw01' -C 20 > delete.sql

从日志中能看到,在10点25分,分别delete了下面4张表对应的数据。

workflow_workflow1.navigator_navigation
workflow_workflow1.workflow_flow_draft
workflow_workflow1.version_record_content
workflow_workflow1.workflow_flow

因日志较长,这里放一段delete数据的截图

file

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。