mysqlbinlog 远程拉取是什么
mysqlbinlog 通常用来解析本机 binlog 文件,但它也能直接连到运行中的实例拉 binlog:--read-from-remote-server 走复制协议取数据,不需要登录服务器拷文件,因此不受文件权限与目录路径限制。两种典型用法:加 --raw 按原始格式落盘做归档;加 --stop-never 变成常驻进程持续搬运新生成的 binlog。解析成可读 SQL 时配 --base64-output=DECODE-ROWS -v 才能看到行事件的伪 SQL。
基本信息
| 连接参数 | --read-from-remote-server --host --port --user --password |
|---|---|
| 原始拉取 | --raw 按二进制原格式保存,适合归档 |
| 持续拉取 | --stop-never 拉完已有文件后继续等新文件 |
| 可读解析 | --base64-output=DECODE-ROWS -v 显示行事件伪 SQL |
| 权限要求 | REPLICATION SLAVE(8.0 中即 REPLICATION SLAVE 静态权限) |
典型使用场景
- 异地归档:把主库 binlog 持续搬到备份存储,应对实例磁盘写满或误删
- 远程分析:不进服务器就能看某段时间的行级变更,适合无登录权限的场景
- 误操作回溯:按时间窗口解析出具体 UPDATE/DELETE 语句,确认被改动的行
- 复制问题排查:对比源端 binlog 事件与从库执行结果,定位跳过的位置
- 迁移前预演:在测试机拉取生产 binlog 重放到影子库,验证变更影响
拉取与解析
拉取与解析
# 直接读远端 binlog 并解析成可读事件(取前 50 行看格式)
mysqlbinlog --read-from-remote-server --host=10.0.0.10 \
--user=binlog_ro --password='***' \
--base64-output=DECODE-ROWS -v \
mysql-bin.000046 | head -50
# 原始格式归档:保持二进制,恢复时可直接给从库使用
mysqlbinlog --read-from-remote-server --raw --stop-never \
--host=10.0.0.10 --user=binlog_ro --password='***' \
--result-file=/data/binlog_archive/ \
mysql-bin.000046
# 查看当前实例有哪些 binlog 文件与位点
mysql -h10.0.0.10 -ubinlog_ro -p -e 'SHOW BINARY LOGS;'参数读法
| 参数 | 作用 | 使用注意 |
|---|---|---|
| --read-from-remote-server | 从远端实例读取而非本地文件 | 必须配合 --host 等连接参数 |
| --raw | 保持原始二进制格式写文件 | 归档后可直接被从库读取 |
| --stop-never | 等价于持续复制,进程常驻 | 断线不会自动恢复,需守护进程拉起 |
| --base64-output=DECODE-ROWS | 解码行事件为可读形式 | 只用于查看,不要用来恢复 |
| --result-file | 输出到指定文件或目录 | 不带该参数时输出到标准输出 |
远程拉取走复制协议,比直接拷贝数据目录更安全:不依赖操作系统文件权限,也不需要登录主机。代价是解析会消耗源库的读取带宽与复制线程资源。
用 --stop-never 做长期归档时,进程断线不会自己重连:必须配守护机制与断点记录,否则归档会出现空洞,等到需要恢复时才发现在最关键的时间段缺文件。