mysqlbinlog读取远程机器binlog


拿本机的mysql做测试



语句:

mysqlbinlog -uroot -proot -h127.0.0.1 -P3306 --read-from-remote-server mysql-bin.000001 --base64-output=decode-rows -v > 1

-u 用户名

-p 密码

-h 远程mysql实例host

- P 端口

--read-from-remote-server  -R

从MySQL服务器读二进制日志。如果未给出该选项,任何连接参数选项将被忽略。

--base64-output=decode-rows   

表示解析row模式的binlog(二进制)为可读的文本


-v 参数的解释,引用http://blog.csdn.net/zyz511919766/article/details/38089393

输出内容会因日志文件的格式以及mysqlbinlog工具使用的选项不同而略不同。二进制日志文件中具体内容的含义以及mysqlbinlog的可用选项可参考相关手册。这里就一些需要特别注意的情况进行说明。

二进制日志文件的格式包含行模式、语句模式和混合模式(也即有服务器决定在什么情况下记录什么类型的日志),基于语句的日志中事件信息包含执行的语句等,基于行的日志中事件信息包含的是行的变化信息等。混合模式的日志中两种类型的事件信息都会记录。为了便于查看记录了行变化信息的事件在当时具体执行了什么样的SQL语句可以使用mysqlbinlog工具的-v(--verbose)选项,该选项会将行事件重构成被注释掉的伪SQL语句,如果想看到更详细的信息可

以将该选项给两次如-vv,这样可以包含一些数据类型和元信息的注释内容,如

mysqlbinlog -v  

mysqlbinlog -vv  

下面是例子

SET TIMESTAMP=1457620539/*!*/;
BEGIN
/*!*/;
# at 287621
# at 287706
#160310 22:35:39 server id 2573978858  end_log_pos 287706       Table_map: `_scd_0001`.`sc_schedule_log_0245` mapped to number 208596582
#160310 22:35:39 server id 2573978858  end_log_pos 288155       Write_rows: table id 208596582 flags: STMT_END_F
# at 288155
#160310 22:35:39 server id 2573978858  end_log_pos 288182       Xid = 29942407656
COMMIT/*!*/;
# at 288182
#160310 22:35:44 server id 2573978858  end_log_pos 288250       Query   thread_id=14495814      exec_time=0     error_code=0
SET TIMESTAMP=1457620544/*!*/;

增加-v 参数选项后,打印出sql(伪sql)

SET TIMESTAMP=1457620539/*!*/;
BEGIN
/*!*/;
# at 287621
# at 287706
#160310 22:35:39 server id 2573978858  end_log_pos 287706       Table_map: `_scd_0001`.`sc_schedule_log_0245` mapped to number 208596582
#160310 22:35:39 server id 2573978858  end_log_pos 288155       Write_rows: table id 208596582 flags: STMT_END_F
### INSERT INTO _scd_0001.sc_schedule_log_0245
### SET
###   @1=107560820
###   @2=2016-03-10 22:35:39
###   @3=2016-03-10 22:35:39
###   @4=245
###   @5=2
###   @6='CYCLE'
###   @7='ServiceIp:null;ClientIp:10.125.198.99;==>>java.lang.reflect.UndeclaredThrowableException <br/> null at: [$Proxy27.execute(Unknown Source)] <br/> Caused by: HSFServiceAddressNotFoundException-[HSF-Consumer] δĿַ at: [com.taobao.hsf.scm.plugin.SCMEnvironmentAddressSelect.constructException(SCMEnvironmentAddressSelect.java:90)]'
###   @8=2
###   @9=1
###   @10=8076739
# at 288155
#160310 22:35:39 server id 2573978858  end_log_pos 288182       Xid = 29942407656
COMMIT/*!*/;
# at 288182
#160310 22:35:44 server id 2573978858  end_log_pos 288250       Query   thread_id=14495814      exec_time=0     error_code=0
SET TIMESTAMP=1457620544/*!*/;

两个v 使用-vv参数后,效果是

SET TIMESTAMP=1457620539/*!*/;
BEGIN
/*!*/;
# at 287621
# at 287706
#160310 22:35:39 server id 2573978858  end_log_pos 287706       Table_map: `_scd_0001`.`sc_schedule_log_0245` mapped to number 208596582
#160310 22:35:39 server id 2573978858  end_log_pos 288155       Write_rows: table id 208596582 flags: STMT_END_F
### INSERT INTO _scd_0001.sc_schedule_log_0245
### SET
###   @1=107560820 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2=2016-03-10 22:35:39 /* DATETIME meta=0 nullable=0 is_null=0 */
###   @3=2016-03-10 22:35:39 /* DATETIME meta=0 nullable=0 is_null=0 */
###   @4=245 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @5=2 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @6='CYCLE' /* VARSTRING(512) meta=512 nullable=1 is_null=0 */
###   @7='ServiceIp:null;ClientIp:10.125.198.99;==>>java.lang.reflect.UndeclaredThrowableException <br/> null at: [$Proxy27.execute(Unknown Source)] <br/> Caused by: HSFServiceAddressNotFoundException-[HSF-Consumer] δĿַ at: [com.taobao.hsf.scm.plugin.SCMEnvironmentAddressSelect.constructException(SCMEnvironmentAddressSelect.java:90)]' /* VARSTRING(10000) meta=10000 nullable=1 is_null=0 */
###   @8=2 /* INT meta=0 nullable=0 is_null=0 */
###   @9=1 /* LONGINT meta=0 nullable=1 is_null=0 */
###   @10=8076739 /* INT meta=0 nullable=0 is_null=0 */
# at 288155
#160310 22:35:39 server id 2573978858  end_log_pos 288182       Xid = 29942407656
COMMIT/*!*/;
# at 288182
#160310 22:35:44 server id 2573978858  end_log_pos 288250       Query   thread_id=14495814      exec_time=0     error_code=0
SET TIMESTAMP=1457620544/*!*/;




### 如何实现 MySQL Binlog 实时读取与数据同步 为了实现实时读取 MySQL 的二进制日志 (Binlog) 并进行数据同步,可以采用多种方法和技术栈来确保高效率和可靠性。以下是具体的技术细节: #### 使用 MySQL 自带工具 `mysqlbinlog` `mysqlbinlog` 是一个用于处理 MySQL 服务器上的二进制日志文件的实用程序。此工具能够解析并显示二进制日志的内容,也可以用来将远程主机上产生的事件流复制到另一个地方。 ```bash mysqlbinlog --read-from-remote-server \ --host=localhost \ --port=3306 \ --user=root \ --stop-never \ /path/to/binlog.000001 ``` 上述命令会持续不断地从指定路径下的第一个二进制日志文件开始读取,并保持连接直到手动终止[^1]。 #### 利用第三方中间件 Canal 或 Maxwell 对于更复杂的场景,推荐使用专门为此目的开发的开源项目如阿里巴巴的 **Canal** 或者 Debezium 生态中的 **Maxwell**。这类软件通常作为独立的服务运行,在监听到来自主库的变化之后立即将其转发给目标存储系统或其他消息队列服务。 ##### 配置 Canal 进行实时捕获 安装完成后,编辑 canal.properties 文件设置源端口、用户名及密码等必要参数: ```properties canal.instance.master.address = localhost:3306 canal.instance.dbUsername = root canal.instance.dbPassword = your_password ... ``` 启动 Canal Server 后即可自动跟踪所选数据库实例内的所有变更活动,并通过插件机制支持多种下游系统的对接需求[^3]. #### 构建基于主从架构的数据管道 另一种常见的方式是在现有环境内构建一对或多对主从关系,利用内置的日志传输功能完成近似于即时性的数据分发任务。当发生任何 DML/DDL 操作时,它们会被记录至 master 节点对应的 binlog 中;随后 slave 方面负责定期轮询这些更新条目并通过 IO 和 SQL 线程组合将其应用到本地副本之上[^4]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值