mysqlbinlog命令介绍(远程拉取binlog日志)

从MySQL5.6开始,mysqlbinlog支持将远程服务器上的binlog实时复制到本地服务器上。

mysqlbinlog的实时二进制复制功能并非简单的将远程服务器的日志复制过来,它是通过MySQL 5.6公布的Replication API实时获取二进制事件。本质上,就相当于MySQL的从服务器。与普通服务器类似,主服务器发生事件后,一般都会在0.5~1秒内进行备份。

下面主要介绍mysqlbinlog的远程拉取日志命令及主要参数:

命令示例:mysqlbinlog -v --base64-output=DECODE-ROWS --read-from-remote-server --raw --host=x.x.x.x --port=3306 --user=root --password=123456 --stop-never mysql-bin.000001

--read-from-remote-server:用于备份远程服务器的binlog。如果不指定该选项,则会查找本地的binlog。

--raw:binlog日志会以二进制格式存储在磁盘中,如果不指定该选项,则会以文本形式保存,文本方式需要指定文件名称,否则打印在控制台。

--user:复制的MySQL用户,只需要授予REPLICATION SLAVE权限。

--stop-never:mysqlbinlog可以只从远程服务器获取指定的几个binlog,
也可将不断生成的binlog保存到本地。指定此选项,代表只要远程服务器不关闭或者连接未断开,
mysqlbinlog就会不断的复制远程服务器上的binlog。

mysql-bin.000001:代表从哪个binlog开始复制,只有结合--stop-never才可以按顺序复制没有出现在命令行的文件(比如mysql-bin.000002,mysql-bin.000003等, 如果只是想拉取指定的几个文件,多个文件之间用空格间隔即可)。

-v --base64-output=DECODE-ROWS 命令用于二进制日志文件sql命令base64的解码

--database 指定数据库名称

除了以上选项外,还有以下几个选项需要注意:

--stop-never-slave-server-id:在备份远程服务器的binlog时,mysqlbinlog本质上就相当于一个从服务器,
该选项就是用来指定从服务器的server-id的。默认为-1。

--to-last-log:代表mysqlbinlog不仅能够获取指定的binlog,还能获取其后生成的binlog,
获取完了,才终止。如果指定了--stop-never选项则会隐式打开--to-last-log选项。

--result-file:用于设置远程服务器的binlog,保存到本地的前缀(如果没有--row,则为文件名)。譬如对于mysql-bin.000001,
如果指定--result-file=/test/backup-,则保存到本地后的文件名为/test/backup-mysql-bin.000001。
注意:如果将--result-file设置为目录,则一定要带上目录分隔符“/”。譬如--result-file=/test/,
而不是--result-file=/test,不然保存到本地的文件名为/testmysql-bin.000001

--raw不支持--database,--start-datetime,--end-datetime,--end-position

--stop-never出现时,才是从目标文件(mysql-bin.000001)开始持续复制后续文件,否则只拉取目标文件

下面再展示一下命令

mysqlbinlog -v --base64-output=DECODE-ROWS  mysql-bin.000002

执行后的示例结果(其中mysql-bin.000002为本地文件)

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#220720 15:07:06 server id 1  end_log_pos 0 CRC32 0xfc718567    Start: binlog v 4, server v 5.7.30-log created 220720 15:07:06
# at 123
#220720 17:19:00 server id 1  end_log_pos 1071 CRC32 0xe3719127         Anonymous_GTID  last_committed=3        sequence_number=4       rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 188
#220720 17:19:00 server id 1  end_log_pos 1151 CRC32 0x4fbd6189         Query   thread_id=47    exec_time=0     error_code=0
SET TIMESTAMP=1658308740/*!*/;
SET @@session.pseudo_thread_id=47/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549120/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=45/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 268
#220720 17:19:00 server id 1  end_log_pos 1214 CRC32 0x58b5cbd4         Table_map: `mysql_shiyan`.`employee` mapped to number 110
# at 331
#220720 17:19:00 server id 1  end_log_pos 1259 CRC32 0xa71b0d0e         Write_rows: table id 110 flags: STMT_END_F
### INSERT INTO `mysql_shiyan`.`employee`
### SET
###   @1=5
###   @2='Dog7'
###   @3=NULL
# at 376
#220720 17:19:00 server id 1  end_log_pos 1290 CRC32 0x49c4796a         Xid = 305
COMMIT/*!*/;
# at 407
#220720 17:24:41 server id 1  end_log_pos 1355 CRC32 0x21f52f84         Anonymous_GTID  last_committed=4        sequence_number=5       rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 472
#220720 17:24:41 server id 1  end_log_pos 1435 CRC32 0x4f39b2d6         Query   thread_id=47    exec_time=0     error_code=0
SET TIMESTAMP=1658309081/*!*/;
BEGIN
/*!*/;
# at 552
#220720 17:24:41 server id 1  end_log_pos 1498 CRC32 0x04b33e43         Table_map: `mysql_shiyan`.`employee` mapped to number 110
# at 615
#220720 17:24:41 server id 1  end_log_pos 1639 CRC32 0x86990db1         Update_rows: table id 110 flags: STMT_END_F
### UPDATE `mysql_shiyan`.`employee`
### WHERE
###   @1=5
###   @2='Dog5'
###   @3=NULL
### SET
###   @1=5
###   @2='Dog77'
###   @3=NULL
### UPDATE `mysql_shiyan`.`employee`
### WHERE
###   @1=5
###   @2='Dog5'
###   @3=NULL
### SET
###   @1=5
###   @2='Dog77'
###   @3=NULL
### UPDATE `mysql_shiyan`.`employee`
### WHERE
###   @1=5
###   @2='Dog5'
###   @3=NULL
### SET
###   @1=5
###   @2='Dog77'
###   @3=NULL
### UPDATE `mysql_shiyan`.`employee`
### WHERE
###   @1=5
###   @2='Dog6'
###   @3=NULL
### SET
###   @1=5
###   @2='Dog77'
###   @3=NULL
### UPDATE `mysql_shiyan`.`employee`
### WHERE
###   @1=5
###   @2='Dog7'
###   @3=NULL
### SET
###   @1=5
###   @2='Dog77'
###   @3=NULL
# at 756
#220720 17:24:41 server id 1  end_log_pos 1670 CRC32 0x0dce8341         Xid = 361
COMMIT/*!*/;
# at 787
#220720 17:26:09 server id 1  end_log_pos 1735 CRC32 0xe778776d         Anonymous_GTID  last_committed=5        sequence_number=6       rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 852
#220720 17:26:09 server id 1  end_log_pos 1815 CRC32 0xb766cc4f         Query   thread_id=47    exec_time=0     error_code=0
SET TIMESTAMP=1658309169/*!*/;
BEGIN
/*!*/;
# at 932
#220720 17:26:09 server id 1  end_log_pos 1878 CRC32 0x83f37203         Table_map: `mysql_shiyan`.`employee` mapped to number 110
# at 995
#220720 17:26:09 server id 1  end_log_pos 1968 CRC32 0xb3d7455c         Delete_rows: table id 110 flags: STMT_END_F
### DELETE FROM `mysql_shiyan`.`employee`
### WHERE
###   @1=5
###   @2='Dog77'
###   @3=NULL
### DELETE FROM `mysql_shiyan`.`employee`
### WHERE
###   @1=5
###   @2='Dog77'
###   @3=NULL
### DELETE FROM `mysql_shiyan`.`employee`
### WHERE
###   @1=5
###   @2='Dog77'
###   @3=NULL
### DELETE FROM `mysql_shiyan`.`employee`
### WHERE
###   @1=5
###   @2='Dog77'
###   @3=NULL
### DELETE FROM `mysql_shiyan`.`employee`
### WHERE
###   @1=5
###   @2='Dog77'
###   @3=NULL
# at 1085
#220720 17:26:09 server id 1  end_log_pos 1999 CRC32 0xf3a5f5f8         Xid = 377
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

从上面可以看到无论是增,删和改操作,binglog中都存储了相关记录的所有数据,其中@1,@2,@3为字段序号。

最后提醒一下,拉取日志的一方不需要安装mysql,只需要有mysqlbinlog执行文件(在已经安装mysql的bin目录下获取)即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值