fixed md preview

This commit is contained in:
wangxiantong.wxt 2023-12-01 19:24:53 +08:00
parent 2a05fbc3be
commit 6f023f175d
1 changed files with 142 additions and 82 deletions

View File

@ -1,19 +1,28 @@
# 基本架构
- **obproxy**: ob 代理服务sql 和 binlog 都将通过 obproxy 作为统一入口来访问 ob其中的 binlog 包含了 binlog 相关的命令show binlog events;、binlog replication即binlog复制协议
- **obproxy**: ob 代理服务sql 和 binlog 都将通过 obproxy 作为统一入口来访问 ob其中的 binlog 包含了 binlog 相关的命令show
binlog events;、binlog replication即binlog复制协议
- **oblogproxy**: ob 日志代理服务,提供了 mysql binlog 的兼容能力(包含了 binlog 相关命令和 binlog replication)
- **bc**: oblogproxy 中 binlog converter 子进程,通过 libobcdc 拉取和解析 clog转换为 binlog 文件
- **bd**: oblogproxy 中 binlog dumper 子进程对下游canal or flinkcdc or ... binlog dump 请求提供 binlog events 订阅服务
- **bcm**: oblogproxy 中 bc 进程的管理模块
- **bdm**: oblogproxy 中 bd 进程的管理模块
binlog service 是 oblogproxy 提供的一种模式,当 binlog_mode = true 时,则提供兼容原生 mysql binlog 的服务包含相关sql、binlog文件生成及binlog dump服务
binlog service 是 oblogproxy 提供的一种模式,当 binlog_mode = true 时,则提供兼容原生 mysql binlog
的服务包含相关sql、binlog文件生成及binlog dump服务
![binlog.png](./binlog.png)
## bc
![bc.png](./bc.png)
## bd
![bd.png](./bd.png)
# 版本要求
> **observer版本>= 4.2.1**
> **obproxy版本 >= 4.2.1**
@ -28,11 +37,15 @@ binlog service 是 oblogproxy 提供的一种模式,当 binlog_mode = true 时
- **ob针对enum、set所实现的拓展语义不支持比如set定义数支持超过64个、支持重复、enum支持插入未定义数据(比如'')等**
- **varchar(65536)定义不支持**
- **不支持gis类型**
# 功能说明
## 支持范围
### mysql binlog 相关命令
| ** 命令 ** | 是否支持 |
| --- | --- |
| **命令** | 是否支持 |
|---------------------------------------------------------------------------------------|----------------------------------|
| [show master status](https://dev.mysql.com/doc/refman/5.7/en/show-master-status.html) | 支持 |
| [show binary logs](https://dev.mysql.com/doc/refman/5.7/en/show-binary-logs.html) | 支持 |
| [show binlog events](https://dev.mysql.com/doc/refman/5.7/en/show-binlog-events.html) | 支持 |
@ -41,15 +54,17 @@ binlog service 是 oblogproxy 提供的一种模式,当 binlog_mode = true 时
| show binlog server | 支持 |
### mysql binlog replication 协议
| 协议 | **是否支持** |
| --- | --- |
|------------------------------------------------------------------------------------------|----------|
| [com_binlog _dump](https://dev.mysql.com/doc/internals/en/com-binlog-dump.html) | 支持 |
| [com_binlog_dump_gtid](https://dev.mysql.com/doc/internals/en/com-binlog-dump-gtid.html) | 支持 |
| com_register_slave | 支持 |
### mysql 相关系统变量
| ** 系统变量 ** | **observer 实现说明** |
| --- | --- |
| **系统变量** | **observer 实现说明** |
|------------------------------------------------------------------------------------------------------------------------------------------|---------------------|
| [binlog_format](https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_binlog_format) | row |
| [binlog_row_image](https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_binlog_row_image) | full |
| [binlog_checksum](https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_binlog_checksum) | crc32 |
@ -59,19 +74,29 @@ binlog service 是 oblogproxy 提供的一种模式,当 binlog_mode = true 时
| [server_uuid](https://dev.mysql.com/doc/refman/5.7/en/replication-options.html#sysvar_server_uuid) | 租户创建后该值应保持不变 |
## 限制说明
### sql兼容性
ob的ddl语法与mysql ddl语法存在一定的差异性即ob有自己的一些拓展语法因此有部分ddl语法可能无法解析。
> 为解决这种问题observer做了兼容性支持建议obproxy设置 init_sql 开启`_show_ddl_in_compat_mode`开启后observer `show create table`输出会完全兼容mysql的语法建议设置为租户级别。
> 为解决这种问题observer做了兼容性支持建议obproxy设置 init_sql 开启`_show_ddl_in_compat_mode`
> 开启后observer `show create table`输出会完全兼容mysql的语法建议设置为租户级别。
# 使用步骤
## 准备工作
### 版本要求
> **observer版本>= 4.2.1**
> **obproxy版本 >= 4.2.1**
> **oblogproxy版本>= 2.0.0**
### obproxy参数配置
从基本架构可以看出binlog 下游订阅服务实际交互时是与 obproxy 直接交互的(这点跟 mysql 需保持一致,否则就无法做到兼容 mysql binlog不感知 oblogproxy真正提供的 binlog service 服务的组件),下游的请求是由 obproxy 转发给 observer 或 oblogproxy因此在 obproxy 需配置 oblogproxy 的服务地址。
从基本架构可以看出binlog 下游订阅服务实际交互时是与 obproxy 直接交互的(这点跟 mysql 需保持一致,否则就无法做到兼容 mysql
binlog不感知 oblogproxy真正提供的 binlog service 服务的组件),下游的请求是由 obproxy 转发给 observer 或 oblogproxy因此在
obproxy 需配置 oblogproxy 的服务地址。
```sql
-- 1.用sys账号连接到obproxy
mysql -h xxx.xxx.xxx.xxx -P 2883 -uroot@sys#xxx -D oceanbase -A -p'password'
@ -86,18 +111,21 @@ MySQL [oceanbase]> show proxyconfig like 'binlog_service_ip';
1 row in set (0.00 sec)
--3.配置binlog server 地址,地址形式为ip:port
mysql> alter proxyconfig set binlog_service_ip='ip:port';
mysql > alter proxyconfig set binlog_service_ip='ip:port';
--4.开启binlog服务的转发
mysql> alter proxyconfig set enable_binlog_service='True';
mysql > alter proxyconfig set enable_binlog_service='True';
--5.设置init_sql,可以设置通过该obproxy的session链接都在session级别设置一些系统变量
mysql> alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';
mysql > alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';
```
### oblogproxy参数配置
#### 参数说明
| 字段 | 默认值 | 说明 |
| --- | --- | --- |
|------------------------------------|--------------------------------------------------------------|-----------------------------------------------------------------------------------------|
| service_port | 2983 | 服务端口 |
| encode_threadpool_size | 8 | 编码线程池初始化大小 |
| encode_queue_size | 20000 | 编码线程队列长度 |
@ -148,10 +176,12 @@ mysql> alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';
| binlog_max_file_size_bytes | 524288000 | 单个binlog文件的大小 |
| binlog_convert_timeout_us | 10000 | 转换超时时间 |
| binlog_checksum | true | 是否开启binlog checksum |
| binlog_heartbeat_interval_us | 1000000 | 心跳事件发送周期 |
| binlog_heartbeat_interval_us | 1000000 | 心跳事件发送周期 |
#### 示例
参数配置在 conf/conf.json 配置文件中,如下:
```json
{
"service_port": 2983,
@ -221,9 +251,14 @@ mysql> alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';
"binlog_recover_backup": true
}
```
# 部署启动
oblogproxy现提供rpm包可以从[github](https://github.com/oceanbase/oblogproxy/releases)进行下载,也可从[oceanbase社区](https://www.oceanbase.com/softwarecenter)进行下载
oblogproxy现提供rpm包可以从[github](https://github.com/oceanbase/oblogproxy/releases)
进行下载,也可从[oceanbase社区](https://www.oceanbase.com/softwarecenter)进行下载
### 部署服务
```shell
rpm -i oblogproxy-xxxxx.el7.x86_64.rpm
@ -245,8 +280,11 @@ vim conf/conf.json
# start 启动 oblogproxy 服务进程
./run.sh start
```
### binlog开启
#### 语法说明
```sql
CREATE BINLOG [IF NOT EXISTS] FOR TENANT `cluster`.`tenant` [TO USER `user` PASSWORD `pwd`] [FROM <timestamp>] WITH CLUSTER URL `<cluster url>`[, INITIAL_TRX_XID `ob_txn_id`, INITIAL_TRX_GTID_SEQ `gtid_seq`];
@ -261,10 +299,14 @@ CREATE BINLOG [IF NOT EXISTS] FOR TENANT `cluster`.`tenant` [TO USER `user` PASS
-- 示例:
CREATE BINLOG FOR TENANT `cluster`.`tenant` TO USER `user` PASSWORD `pwd` FROM 1668339370000000 WITH CLUSTER URL 'cluster_url', SERVER UUID '2340778c-7464-11ed-a721-7cd30abc99b4', INITIAL_TRX_XID '97984179', INITIAL_TRX_GTID_SEQ '31';
```
#### 使用说明
**注意binlog 开启 sql 要直连 logproxy 服务执行。**
由于`CREATE BINLOG`并不是 mysql sql因此该 sql 仅支持直连 logproxy 服务执行。
#### 示例
```sql
-- 127.0.0.1 2983 是 oblogproxy ip + port
mysql -A -c -h 127.0.0.1 -P 2983
@ -275,27 +317,40 @@ CREATE BINLOG FOR TENANT `test_cluster`.`test_tenant` WITH CLUSTER URL `clustet_
-- 指定起始时间戳创建 binlog 服务, 微妙级时间戳
CREATE BINLOG FOR TENANT `test_cluster`.`test_tenant` FROM 1668339370000000 WITH CLUSTER URL `clustet_url`,SERVER UUID `xxxxx`;
```
### 其他运维操作
#### 创建binlog服务
```sql
CREATE BINLOG [IF NOT EXISTS] FOR TENANT `cluster`.`tenant` [FROM <timestamp>] WITH CLUSTER URL `<cluster url>`;
```
#### 释放binlog服务
```sql
DROP BINLOG [IF EXISTS] FOR TENANT `cluster`.`tenant`;
```
#### 获取binlog服务状态
查询当前租户下的磁盘占用及服务状态指定租户时返回该租户对应的信息。不指定租户时则返回当前集群所有binlog 服务状态。
```sql
SHOW BINLOG STATUS [FOR TENANT `cluster`.`tenant`];
```
#### 清理binlog日志
```sql
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26' [FOR TENANT `cluster`.`tenant`];
PURGE BINARY LOGS TO 'mysql-bin.000001' [FOR TENANT `cluster`.`tenant`];
```
### binlog相关命令
#### show binary logs
```sql
MySQL [(none)]> show binary logs;
+------------------+-----------+
@ -305,7 +360,9 @@ MySQL [(none)]> show binary logs;
+------------------+-----------+
1 row in set (0.08 sec)
```
#### show master status
```sql
MySQL [(none)]> show master status;
+------------------+-----------+--------------+------------------+--------------------------------------------+
@ -315,8 +372,11 @@ MySQL [(none)]> show master status;
+------------------+-----------+--------------+------------------+--------------------------------------------+
1 row in set (0.00 sec)
```
#### show binlog events
```sql
MySQL [(none)]> show binlog events;
```
展示太多,此处略