OceanBase教程FG072-OceanBase Binlog使用实战
本文档风哥主要介绍OceanBase数据库Binlog使用相关知识,包括OceanBase Binlog概念、OceanBase Binlog格式、OceanBase Binlog与Clog区别、OceanBase Binlog规划、OceanBase Binlog启用、OceanBase Binlog配置、OceanBase Binlog操作等内容,风哥教程参考OceanBase官方文档Binlog、数据同步等内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 OceanBase Binlog概念
OceanBase Binlog是兼容MySQL Binlog的日志系统,用于记录数据库的变更操作,支持数据同步、数据恢复等场景。更多视频教程www.fgedu.net.cn
- MySQL兼容:完全兼容MySQL Binlog协议
- 按需开启:默认关闭,需要时手动开启
- 独立服务:由OBLogProxy提供Binlog服务
- 格式支持:支持ROW/STATEMENT/MIXED格式
- 事务支持:完整支持事务Binlog
1.2 OceanBase Binlog格式
1. ROW格式
– 记录每行数据变更
– 数据完整,易于解析
– 日志量大
– 推荐用于数据同步
2. STATEMENT格式
– 记录SQL语句
– 日志量小
– 某些场景可能不一致
– 不推荐用于数据同步
3. MIXED格式
– 混合使用ROW和STATEMENT
– 自动选择最优格式
– 平衡日志大小和一致性
4. 格式对比
┌─────────────────┬──────────┬──────────┬─────────────────┐
│ 格式 │ 日志大小 │ 一致性 │ 适用场景 │
├─────────────────┼──────────┼──────────┼─────────────────┤
│ ROW │ 大 │ 高 │ 数据同步 │
│ STATEMENT │ 小 │ 低 │ 简单场景 │
│ MIXED │ 中 │ 中 │ 通用场景 │
└─────────────────┴──────────┴──────────┴─────────────────┘
1.3 OceanBase Binlog与Clog区别
1. 功能定位
┌─────────────────┬─────────────────────┬─────────────────────┐
│ 特性 │ Clog │ Binlog │
├─────────────────┼─────────────────────┼─────────────────────┤
│ 用途 │ 内部事务持久化 │ 外部数据同步 │
│ 协议 │ OceanBase私有 │ MySQL兼容 │
│ 默认状态 │ 开启 │ 关闭 │
│ 服务对象 │ OceanBase内部 │ 外部系统 │
└─────────────────┴─────────────────────┴─────────────────────┘
2. 数据内容
– Clog:物理日志,记录数据块变更
– Binlog:逻辑日志,记录SQL操作
3. 性能影响
– Clog:必须开启,影响小
– Binlog:可选开启,有一定开销
4. 使用场景
– Clog:内部恢复、主备同步
– Binlog:外部同步、数据订阅
Part02-生产环境规划与建议
2.1 OceanBase Binlog规划
1. 开启评估
– 是否需要MySQL生态集成
– 是否需要数据订阅
– 性能影响评估
2. 租户规划
– 按租户开启Binlog
– 不同租户不同策略
– 核心业务租户优先
3. 格式选择
– 数据同步:ROW格式
– 简单场景:MIXED格式
– 日志敏感:STATEMENT格式
4. 并发规划
– Binlog Dump线程数
– 消费端并发数
– 网络带宽评估
2.2 OceanBase存储规划
1. Binlog存储
– 默认存储在OBLogProxy
– 可配置独立存储
– SSD推荐
2. 存储容量
– 估算日产生量
– 预留7-15天存储
– 监控存储使用
3. 存储路径
– 默认:/ob/logproxy/log
– 可自定义路径
– 独立磁盘推荐,风哥提示:。
4. 存储配置
$ cat /ob/app/oblogproxy/conf/conf.json
{
“binlog_path”: “/ob/logproxy/log”,
“max_binlog_size”: 1073741824,
“expire_logs_days”: 7
}
2.3 OceanBase保留策略
1. 保留时间
– 最小:1天
– 推荐:7天
– 最大:30天
2. 清理策略
– 自动清理过期Binlog
– 手动清理(谨慎)
– 保留策略配置
3. 监控告警
– 存储空间监控
– 过期告警
– 清理失败告警
4. 配置示例,学习交流加群风哥微信: itpux-com。
$ obclient -e ”
— 设置Binlog保留时间
ALTER SYSTEM SET binlog_expire_logs_seconds = 604800;
— 设置Binlog最大大小
ALTER SYSTEM SET max_binlog_size = 1073741824;
”
Part03-生产环境项目实施方案
3.1 OceanBase Binlog启用
1. 部署OBLogProxy
$ cd /ob/app/oblogproxy
$ ./bin/logproxy -f ./conf/conf.json
# 检查进程
$ ps aux | grep logproxy
root 10001 0.5 1.2 1000000 50000 ? Sl 10:00 0:10 ./bin/logproxy
2. 开启租户Binlog
$ obclient -h192.168.1.101 -P2881 -uroot@sys -p -e ”
— 开启租户Binlog
ALTER SYSTEM SET ob_binlog_enabled = ‘true’ TENANT = ‘fgedu_tenant’;
— 验证开启状态
SHOW PARAMETERS LIKE ‘ob_binlog_enabled’ TENANT = ‘fgedu_tenant’;
”
3. 配置Binlog格式
$ obclient -h192.168.1.101 -P2883 -uroot@fgedu_tenant -p -e ”
— 设置Binlog格式,学习交流加群风哥QQ113257174。
SET GLOBAL binlog_format = ‘ROW’;
— 验证格式
SHOW VARIABLES LIKE ‘binlog_format’;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| binlog_format | ROW |
+—————–+——-+
”
4. 验证Binlog
$ mysqlbinlog -h192.168.1.101 -P2983 -ufgedu -p \
–read-from-remote-server mysql-bin.000001 | head -50
# 查看Binlog事件
$ obclient -e “SHOW BINLOG EVENTS LIMIT 10;”
+——————+—–+—————-+———–+————-+————————————–+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+——————+—–+—————-+———–+————-+————————————–+
| mysql-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.25-OceanBase-v4.2.0 |
| mysql-bin.000001 | 123 | Previous_gtids | 1 | 194 | |
| mysql-bin.000001 | 194 | Gtid | 1 | 259 | SET @@SESSION.GTID_NEXT=… |
+——————+—–+—————-+———–+————-+————————————–+
3.2 OceanBase Binlog配置
1. 基本配置
$ obclient -e ”
— 开启Binlog
SET GLOBAL binlog_enable = ON;
— 设置Binlog格式
SET GLOBAL binlog_format = ‘ROW’;
— 设置Binlog过期时间(秒),更多视频教程www.fgedu.net.cn。
SET GLOBAL binlog_expire_logs_seconds = 604800;
— 设置Binlog最大大小(字节)
SET GLOBAL max_binlog_size = 1073741824;
”
2. 高级配置
$ obclient -e ”
— 设置Binlog行图像
SET GLOBAL binlog_row_image = ‘FULL’;
— 设置Binlog缓存大小
SET GLOBAL binlog_cache_size = 32768;
— 设置Binlog同步模式
SET GLOBAL sync_binlog = 1;
— 设置事务提交模式
SET GLOBAL innodb_flush_log_at_trx_commit = 1;
”
3. 查看配置
$ obclient -e ”
SHOW VARIABLES LIKE ‘binlog%’;
SHOW VARIABLES LIKE ‘%log_bin%’;
— 查看Binlog状态
SHOW MASTER STATUS;
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000001 | 1234 | | | |
+——————+———-+————–+——————+——————-+
”
3.3 OceanBase Binlog操作
1. 查看Binlog列表
$ obclient -e ”
SHOW BINARY LOGS;
+——————+———–+———–+
| Log_name | File_size | Encrypted |
+——————+———–+———–+
| mysql-bin.000001 | 1073741824| No |
| mysql-bin.000002 | 500000000| No |
| mysql-bin.000003 | 100000000| No |
+——————+———–+———–+
”
2. 查看Binlog事件
$ obclient -e ”
SHOW BINLOG EVENTS IN ‘mysql-bin.000001’ FROM 4 LIMIT 10;
”
3. 清理Binlog
$ obclient -e ”
— 清理指定Binlog之前的所有Binlog
PURGE BINARY LOGS TO ‘mysql-bin.000003’;
— 清理指定时间之前的Binlog
PURGE BINARY LOGS BEFORE ‘2024-01-20 00:00:00′;
— 查看清理结果
SHOW BINARY LOGS;
“,from DB视频:www.itpux.com。
4. Binlog解析
$ mysqlbinlog /ob/logproxy/log/mysql-bin.000001 | head -100
# 解析特定位置
$ mysqlbinlog /ob/logproxy/log/mysql-bin.000001 \
–start-position=194 \
–stop-position=10000
# 解析特定时间
$ mysqlbinlog /ob/logproxy/log/mysql-bin.000001 \
–start-datetime=’2024-01-20 10:00:00′ \
–stop-datetime=’2024-01-20 11:00:00’
Part04-生产案例与实战讲解
4.1 OceanBase同步MySQL案例
– OceanBase作为主库
– MySQL作为从库
– 实时数据同步
# 实施方案
1. OceanBase配置
$ obclient -e ”
— 开启Binlog
SET GLOBAL binlog_enable = ON;
SET GLOBAL binlog_format = ‘ROW’;
— 创建同步用户
CREATE USER ‘repl’@’%’ IDENTIFIED BY ‘password’;
GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’;
— 查看Binlog位置
SHOW MASTER STATUS;
”
2. MySQL配置
$ mysql -e ”
— 配置主库信息
CHANGE MASTER TO
MASTER_HOST=’192.168.1.101′,
MASTER_PORT=2983,
MASTER_USER=’repl’,
MASTER_PASSWORD=’password’,
MASTER_LOG_FILE=’mysql-bin.000001′,
MASTER_LOG_POS=1234;
— 启动从库
START SLAVE;
— 查看同步状态
SHOW SLAVE STATUS\G
”
3. 验证同步
$ obclient -e ”
INSERT INTO fgedudb.fgedu_test VALUES (1, ‘test’);
”
$ mysql -e ”
SELECT * FROM fgedudb.fgedu_test;
+—-+——+
| id | name |
+—-+——+
| 1 | test |
+—-+——+
”
# 同步成功
4.2 OceanBase数据恢复案例
– 误删除数据
– 需要恢复
– 使用Binlog恢复
# 恢复方案
1. 确定删除时间
$ obclient -e ”
— 查看Binlog事件
SHOW BINLOG EVENTS IN ‘mysql-bin.000001′;
— 找到DELETE事件位置
”
2. 导出Binlog
$ mysqlbinlog /ob/logproxy/log/mysql-bin.000001 \
–start-datetime=’2024-01-20 10:00:00′ \
–stop-datetime=’2024-01-20 10:30:00’ \
–base64-output=DECODE-ROWS -v \
> /tmp/binlog_decode.sql
3. 生成恢复SQL
#!/bin/bash
# generate_recovery_sql.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# 从Binlog提取INSERT语句
# 将DELETE转换为INSERT
grep -A 10 “DELETE FROM” /tmp/binlog_decode.sql | \
sed ‘s/DELETE FROM/INSERT INTO/g’ | \
sed ‘s/WHERE/VALUES/g’ \
> /tmp/recovery.sql
4. 执行恢复
$ obclient -e ”
— 执行恢复SQL
SOURCE /tmp/recovery.sql;
— 验证恢复
SELECT COUNT(*) FROM fgedudb.fgedu_order;
”
# 恢复完成
4.3 OceanBase审计案例
– 需要审计数据变更
– 追踪数据修改
– 合规要求
# 审计方案
1. Binlog审计脚本
#!/bin/bash
# binlog_audit.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
LOG_FILE=”/var/log/ob_binlog_audit.log”
DATE=$(date +%Y%m%d)
# 解析当日Binlog
mysqlbinlog /ob/logproxy/log/mysql-bin.*${DATE}* \
–base64-output=DECODE-ROWS -v \
| grep -E “(INSERT|UPDATE|DELETE)” \
| while read line; do
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $line” >> $LOG_FILE
done
2. 审计分析
#!/bin/bash
# audit_analysis.sh
echo “=== Binlog Audit Analysis ===”
echo “Date: $(date)”
echo “”
# 统计DML操作
echo “DML Statistics:”
grep -c “INSERT” /var/log/ob_binlog_audit.log
echo ” INSERT: $(grep -c ‘INSERT’ /var/log/ob_binlog_audit.log)”
echo ” UPDATE: $(grep -c ‘UPDATE’ /var/log/ob_binlog_audit.log)”
echo ” DELETE: $(grep -c ‘DELETE’ /var/log/ob_binlog_audit.log)”
# 统计表操作
echo “”
echo “Table Statistics:”
grep -oP ‘FROM \K\w+\.\w+’ /var/log/ob_binlog_audit.log | sort | uniq -c | sort -rn | head -10
3. 审计报告
# 每日生成审计报告
0 1 * * * /ob/scripts/audit_analysis.sh | mail -s “Daily Audit Report” audit@fgedu.net.cn
Part05-风哥经验总结与分享
5.1 OceanBase Binlog最佳实践
1. 开启策略
– 按需开启,避免不必要的开销
– 核心业务租户优先开启
– 评估性能影响
2. 格式选择
– 数据同步场景使用ROW格式
– 审计场景使用ROW格式
– 简单场景可使用MIXED
3. 存储管理
– 独立磁盘存储
– 设置合理的保留期
– 监控存储空间
4. 同步管理
– 监控同步延迟
– 配置断点续传
– 定期检查一致性
5. 安全管理
– 限制Binlog访问权限
– 加密敏感Binlog
– 定期审计Binlog访问
5.2 OceanBase Binlog性能优化
1. 参数优化
$ obclient -e ”
— 优化Binlog缓存
SET GLOBAL binlog_cache_size = 65536;
— 优化Binlog同步
SET GLOBAL sync_binlog = 100;
— 优化事务提交
SET GLOBAL innodb_flush_log_at_trx_commit = 2;
— 优化行图像
SET GLOBAL binlog_row_image = ‘MINIMAL’;
”
2. 架构优化
– OBLogProxy独立部署
– 使用SSD存储Binlog
– 网络带宽保障
3. 监控指标
#!/bin/bash
# binlog_performance.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
echo “=== Binlog Performance ===”
# Binlog生成速率
BINLOG_SIZE=$(du -sb /ob/logproxy/log/*.000* | awk ‘{sum+=$1} END {print sum}’)
echo “Binlog Size: $BINLOG_SIZE bytes”
# Binlog文件数
BINLOG_COUNT=$(ls /ob/logproxy/log/*.000* | wc -l)
echo “Binlog Files: $BINLOG_COUNT”
echo “===========================”
5.3 OceanBase Binlog问题排查
1. Binlog未生成
– 检查Binlog是否开启
– 检查OBLogProxy状态
– 检查租户配置
2. 同步延迟
– 检查网络带宽
– 检查消费端性能
– 检查Binlog生成速率
3. Binlog损坏
– 检查磁盘健康
– 检查文件系统
– 恢复备份Binlog
4. 常见问题
Q: Binlog开启后性能下降?
A: 优化Binlog参数,使用MINIMAL格式,独立部署OBLogProxy
Q: Binlog同步中断?
A: 检查网络连通性,查看错误日志,重新建立同步连接
Q: Binlog空间占用大?
A: 缩短保留期,使用STATEMENT格式,定期清理
Q: 如何查看Binlog内容?
A: 使用mysqlbinlog工具解析
Q: Binlog和Clog的关系?
A: Binlog基于Clog生成,是Clog的逻辑表示
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
