其实官方mysqlbinlog自带这个功能。
〇 常用的参数:
-R | --read-from-remote-server 表示开启binlog备份,在对应的主节点上请求binlog到本地。
--raw 被复制过来的binlog以二进制的格式存放,如果不加该参数则为text格式。
-r | --result-file 指定目录或文件名:
若指定了--raw参数,-r的值指定binlog的存放目录和文件名前缀;若没有指定--raw参数,-r的值指定文本存放的目录和文件名。
-t 这个选项代表从指定的binlog开始拉取,直到当前主节点上binlog的最后一个。
--stop-never 持续连续从主节点拉取binlog,持续备份到当前最后一个,并继续下去。该参数包含-t
--stop-never-slave-server-id 默认值65535,用于在多个mysqlbinlog进程或者从服务器的情况下,避免ID冲突。
mysqlbinlog开启备份后,直到连接关闭或者被强制kill才会结束。
可通过ps查看到已经开启的备份进程。
用法示例:完整并保持原样的将远程server的binlog拉到本地,并存放在/data/backup_binlog目录中。
注意,-r指定的目录必须写完整,否则会被放在/data目录下,并以"backup_binlog"为前缀命名binlog
如:-r /data/backup_binlog 则会显示为 /data/backup_binlogmysql-bin.000008
-
mkdir -p /data/backup_binlog
- mysqlbinlog -h$ip -P$port -u$user -p$password -R --raw --stop-never mysql-bin.000008 -r /data/backup_binlog/ &
- [root@sAno1y backup_binlog]# mysql -h$ip -P$port -u$user -p$password -e "SHOW BINARY LOGS"
-
mysql: [Warning] Using a password on the command line interface can be insecure.
-
+------------------+------------+
-
| Log_name | File_size |
-
+------------------+------------+
-
| mysql-bin.000008 | 1073742873 |
-
| mysql-bin.000009 | 284594590 |
-
| mysql-bin.000010 | 396303459 |
-
| mysql-bin.000011 | 154 |
-
| mysql-bin.000012 | 154 |
-
| mysql-bin.000013 | 154 |
-
+------------------+------------+
-
-
-
检查拉取过来的binlog,与show binary logs结果一致。
-
[root@sAno1y backup_binlog]# ll
-
total 1713580
-
-rw-r----- 1 root root 1073742873 Aug 22 17:12 mysql-bin.000008
-
-rw-r----- 1 root root 284594590 Aug 22 17:13 mysql-bin.000009
-
-rw-r----- 1 root root 396303459 Aug 22 17:13 mysql-bin.000010
-
-rw-r----- 1 root root 154 Aug 22 17:13 mysql-bin.000011
-
-rw-r----- 1 root root 154 Aug 22 17:13 mysql-bin.000012
- -rw-r----- 1 root root 154 Aug 22 17:13 mysql-bin.000013
在source实例提交了事务之后,因为加了--stop-never参数,故会持续拉取最新的binlog到本地。
作为DBA,有全备+binlog的副本,感觉睡觉都香了许多。
〇 参考文档:
MySQL 5.7 Reference Manual - MySQL Programs - mysqlbinlog — Utility for Processing Binary Log Files
http://wubx.net/mysql-binlog-server/
作者微信公众号(持续更新)
