{"id":3619,"date":"2026-09-10T08:14:25","date_gmt":"2026-09-10T08:14:25","guid":{"rendered":"https:\/\/kedar.nitty-witty.com\/blog\/?p=3619"},"modified":"2026-09-10T08:17:48","modified_gmt":"2026-09-10T08:17:48","slug":"how-to-setup-and-use-percona-binlog-server-pbs","status":"publish","type":"post","link":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs","title":{"rendered":"How to setup and use Percona Binlog Server (PBS)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Earlier last week I was working with <strong>Percona Binlog Server<\/strong>, Percona&#8217;s tool for archiving the MySQL binary log (binlog) outside of a traditional replica and exploring what it can do. In this post I&#8217;ll share my hands-on experience setting it up with Docker against a MySQL 8.4 source: the config, the two replication modes it supports (<code>position<\/code> and <code>GTID<\/code>), and the commands that make it useful day to day.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Percona Binlog Server Lab setup:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li style=\"font-style:normal;font-weight:300;line-height:1.5\">A MySQL 8.4 source<\/li>\n\n\n\n<li style=\"font-style:normal;font-weight:300;line-height:1.5\">Docker on my local machine (a Mac)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What Is Percona Binlog Server?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Percona Binary Log Server (<code>binlog_server<\/code>) is a command-line utility that connects to a remote MySQL or Percona server as a replication client to stream and archive binary log events. It can stream the binary log off to durable storage of your choice. Point it at a file backend, an S3 bucket, whatever you need, and it&#8217;ll keep pulling continuously, surviving reconnects, and letting you search what it&#8217;s collected later by timestamp or by GTID.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Percona Binlog Server (PBS) - Introduction\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/cMHTLhNJ2Ek?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Trying out PBS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I am using the details available on Percona&#8217;s PBS github repo: <a href=\"https:\/\/github.com\/Percona-Lab\/percona-binlog-server\" target=\"_blank\" rel=\"noopener nofollow\" title=\"\">https:\/\/github.com\/Percona-Lab\/percona-binlog-server<\/a>. Following are my steps to setup and use PBS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I have docker configured on my mac and I could start setting-up the percona-binlog-server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker pull perconalab\/percona-binlog-server:latest\ndocker run --rm perconalab\/percona-binlog-server:latest binlog_server version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Version resolved to <code>0.4.1<\/code> at the time of writing, <code>latest<\/code> is a moving target, so worth checking each time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preparing the MySQL Source Server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I have a MySQL 8.4 instance, with binlog already on. We also have gtid_mode and enforice_gtid_consistency configured ON. Before pointing Percona Binlog Server at it, I confirmed the basics:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SHOW VARIABLES LIKE 'log_bin';\nSHOW VARIABLES LIKE 'gtid_mode';\nSHOW VARIABLES LIKE 'enforce_gtid_consistency';\nSHOW VARIABLES LIKE 'server_id';<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Created a dedicated replication account, since <code>binlog_server<\/code> talks to the source exactly like a replica would:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE USER 'rpl_user'@'%' IDENTIFIED BY '&lt;password>';\nGRANT REPLICATION SLAVE ON *.* TO 'rpl_user'@'%';\nFLUSH PRIVILEGES;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Setting Up Percona Binlog Server with Docker on macOS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prepare folders to hold data and config for PBS<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/binlog-server\/data\nmkdir -p ~\/binlog-server\/logs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The config.json file<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"logger\": { \"level\": \"info\", \"file\": \"\" },\n  \"connection\": {\n    \"host\": \"10.30.50.220\",\n    \"port\": 3306,\n    \"user\": \"rpl_user\",\n    \"password\": \"&lt;redacted>\",\n    \"connect_timeout\": 20,\n    \"read_timeout\": 60,\n    \"write_timeout\": 60\n  },\n  \"replication\": {\n    \"server_id\": 9001,\n    \"idle_time\": 30,\n    \"verify_checksum\": true,\n    \"mode\": \"position\"\n  },\n  \"storage\": {\n    \"backend\": \"file\",\n    \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\"\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s it, once the directories and config is ready we can do a test run for PBS to collect binary logs onetime:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm \\\n  -v ~\/binlog-server\/config.json:\/etc\/binlog-server\/config.json:ro \\\n  -v ~\/binlog-server\/data:\/var\/lib\/binlog-server\/data \\\n  -v ~\/binlog-server\/logs:\/var\/log\/binlog-server \\\n  perconalab\/percona-binlog-server:latest \\\n  binlog_server fetch \/etc\/binlog-server\/config.json<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>$ docker run --rm \\\n>   -v ~\/binlog-server\/config.json:\/etc\/binlog-server\/config.json:ro \\\n>   -v ~\/binlog-server\/data:\/var\/lib\/binlog-server\/data \\\n>   -v ~\/binlog-server\/logs:\/var\/log\/binlog-server \\\n>   perconalab\/percona-binlog-server:latest \\\n>   binlog_server fetch \/etc\/binlog-server\/config.json\n\n &#91;       ] \"binlog_server\" started with the following command line arguments:\n &#91;       ] \"fetch\" \"\/etc\/binlog-server\/config.json\"\n &#91;       ] reading configuration from the JSON file.\n &#91;       ] logging level set to \"info\"\n &#91;       ] application version: 0.4.1\n &#91;       ] 'fetch' operation mode specified\n &#91;   info] set custom handlers for SIGINT and SIGTERM signals\n &#91;   info] keyring configuration options are not specified\n &#91;   info] binlog storage backend type: file\n &#91;   info] binlog storage backend URI (masked): file:\/\/\/var\/lib\/binlog-server\/data\n &#91;   info] mysql connection string: rpl_user@10.30.50.220:3306 (password ***hidden***)\n &#91;   info] mysql connect timeout (seconds): 20\n &#91;   info] mysql read timeout (seconds): 60\n &#91;   info] mysql write timeout (seconds): 60\n &#91;   info] mysql replication server id: 9001\n &#91;   info] mysql replication idle time (seconds): 30\n &#91;   info] mysql replication checksum verification: true\n &#91;   info] mysql replication mode: position\n &#91;   info] created binlog storage with the following backend: local filesystem - \/var\/lib\/binlog-server\/data\n &#91;   info] binlog storage initialized in position mode\n &#91;   info] binlog storage initialized on an empty directory\n &#91;   info] storage keyring status: keyring is not initialized\n &#91;   info] storage active KEK: active KEK is not set\n &#91;   info] storage encryption format: encryption format is not set\n &#91;   info] initialized mysql client library\n &#91;   info] mysql client version: 8.4.10-10\n &#91;   info] established connection to mysql server\n &#91;   info] mysql server version: 8.4.11-11\n &#91;   info] mysql protocol version: 10\n &#91;   info] mysql server connection info: 10.30.50.220 via TCP\/IP\n &#91;   info] mysql connection character set: utf8mb4\n &#91;   info] switched to replication (checksum enabled, position mode)\n &#91;   info] replication info (server id 9001, non-blocking, starting from the very beginning)\n &#91;   info] event  : rotate (artificial)\n &#91;   info] event  : &#91;info_only] - will not be written to the binary log file\n &#91;   info] storage: created a new binlog file: mysql-bin.000001\n &#91;   info] event  : format_description\n &#91;   info] event  : previous_gtids_log (ignorable)\n &#91;   info] event  : gtid_log\n &#91;   info] event  : query\n &#91;   info] event  : &#91;end_of_transaction] 7021a5ff-ac64-11f1-bc37-bc24112b899e:1\n &#91;   info] event  : gtid_log\n &#91;   info] event  : query\n &#91;   info] event  : &#91;end_of_transaction] 7021a5ff-ac64-11f1-bc37-bc24112b899e:2\n &#91;   info] event  : gtid_log\n &#91;   info] event  : query\n &#91;   info] event  : &#91;end_of_transaction] 7021a5ff-ac64-11f1-bc37-bc24112b899e:3\n &#91;   info] fetched everything and disconnected\n &#91;   info] successfully shut down after finishing the requested operation<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We can see that both binlog and related metadata files are present and fetched.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ls -lhtr ~\/binlog-server\/data\/\n total 32\n -rw-r--r--  1 pbs  mysql    31B  9 Sep 22:56 metadata.json\n -rw-r--r--  1 pbs  mysql    19B  9 Sep 22:56 binlog.index\n -rw-r--r--  1 pbs  mysql   866B  9 Sep 22:56 mysql-bin.000001\n -rw-r--r--  1 pbs  mysql   125B  9 Sep 22:56 mysql-bin.000001.json<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now that we verified everything works, let&#8217;s start the Percona Binlog Server in PULL mode to continuously fetch the binlogs.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -d --name binlog-server \\\n  --restart unless-stopped \\\n  --stop-signal SIGTERM \\\n  --stop-timeout 120 \\\n  -v ~\/binlog-server\/config.json:\/etc\/binlog-server\/config.json:ro \\\n  -v ~\/binlog-server\/data:\/var\/lib\/binlog-server\/data \\\n  -v ~\/binlog-server\/logs:\/var\/log\/binlog-server \\\n  perconalab\/percona-binlog-server:latest \\\n  binlog_server pull \/etc\/binlog-server\/config.json<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A few minutes later, data folder had binlog files sitting in it:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ls -lhtr\ntotal 589888\n-rw-r--r--  1 pbs   mysql   31B  9 Sep 22:56 metadata.json\n-rw-r--r--  1 pbs   mysql  101M  9 Sep 23:02 mysql-bin.000001\n-rw-r--r--  1 pbs   mysql  134B  9 Sep 23:02 mysql-bin.000001.json\n-rw-r--r--  1 pbs   mysql  161M  9 Sep 23:03 mysql-bin.000002\n-rw-r--r--  1 pbs   mysql  131B  9 Sep 23:03 mysql-bin.000002.json\n-rw-r--r--  1 pbs   mysql    4B  9 Sep 23:03 mysql-bin.000003\n-rw-r--r--  1 pbs   mysql  123B  9 Sep 23:03 mysql-bin.000003.json\n-rw-r--r--  1 pbs   mysql   57B  9 Sep 23:03 binlog.index<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The docker status shows that the binlog server is running<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CONTAINER ID   IMAGE                                     COMMAND                  CREATED         STATUS                       PORTS                                                                                                                                  NAMES\n0f73436929f1   perconalab\/percona-binlog-server:latest   \"binlog_server pull \u2026\"   14 hours ago    Up 13 hours                                                                                                                                                         binlog-server<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Percona Binlog Server Commands<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beyond <code>fetch<\/code> (one-shot) and <code>pull<\/code> (continuous, what I&#8217;m running), there&#8217;s <code>list<\/code>, to see everything collected so far, and a couple of search commands that make the whole exercise worthwhile. Finding <em>which<\/em> binlog file covers a moment or a transaction you care about, without grepping through gigabytes by hand. These functions help during recovery practices.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">binlog_server list<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm \\\n  -v ~\/binlog-server\/config.json:\/etc\/binlog-server\/config.json:ro \\\n  -v ~\/binlog-server\/data:\/var\/lib\/binlog-server\/data:ro \\\n  perconalab\/percona-binlog-server:latest \\\n  binlog_server list \/etc\/binlog-server\/config.json | jq\n\n{\n  \"version\": 1,\n  \"status\": \"success\",\n  \"result\": &#91;\n    {\n      \"name\": \"mysql-bin.000001\",\n      \"size\": 105825820,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000001\",\n      \"min_timestamp\": \"2026-09-09T15:39:08\",\n      \"max_timestamp\": \"2026-09-09T17:32:14\"\n    },\n    {\n      \"name\": \"mysql-bin.000002\",\n      \"size\": 169304503,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000002\",\n      \"min_timestamp\": \"2026-09-09T17:32:14\",\n      \"max_timestamp\": \"2026-09-09T17:32:51\"\n    },\n    {\n      \"name\": \"mysql-bin.000003\",\n      \"size\": 169304257,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000003\",\n      \"min_timestamp\": \"2026-09-09T17:32:51\",\n      \"max_timestamp\": \"2026-09-09T17:33:02\"\n    },\n    {\n      \"name\": \"mysql-bin.000004\",\n      \"size\": 274547106,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000004\",\n      \"min_timestamp\": \"2026-09-09T17:33:02\",\n      \"max_timestamp\": \"2026-09-09T17:44:35\"\n    },\n    {\n      \"name\": \"mysql-bin.000005\",\n      \"size\": 12557,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000005\",\n      \"min_timestamp\": \"2026-09-09T17:44:35\",\n      \"max_timestamp\": \"2026-09-09T18:27:32\"\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">binlog_server search_by_timestamp<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This PBS command helps identify binary log information at specified timestamp<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm \\\n  -v ~\/binlog-server\/config.json:\/etc\/binlog-server\/config.json:ro \\\n  -v ~\/binlog-server\/data:\/var\/lib\/binlog-server\/data:ro \\\n  perconalab\/percona-binlog-server:latest \\\n  binlog_server search_by_timestamp \/etc\/binlog-server\/config.json 2026-09-09T22:56:00<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">binlog_server search_by_gtid_set<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">This PBS command helps identify binary log providing the searched gtid-set.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm \\\n  -v ~\/binlog-server\/config-gtid.json:\/etc\/binlog-server\/config.json:ro \\\n  -v ~\/binlog-server\/data-gtid:\/var\/lib\/binlog-server\/data:ro \\\n  perconalab\/percona-binlog-server:latest \\\n  binlog_server search_by_gtid_set \/etc\/binlog-server\/config.json \\\n  7021a5ff-ac64-11f1-bc37-bc24112b899e:2117 | jq\n\n{\"version\":1,\"status\":\"error\",\"message\":\"GTID set search is not supported in storages created in position-based replication mode\"}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">oops! We hit the road block here! As the error log clearly says, we cannot search GTID if the replication mode is &#8220;position based&#8221;. If you note the configuration file created above we had the setting: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    \"mode\": \"position\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Starting PBS with GTID<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s start PBS with GTID and redo the functions that stopped us earlier \ud83d\ude42<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Setting up PBS config<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"logger\": { \"level\": \"info\", \"file\": \"\" },\n  \"connection\": {\n    \"host\": \"10.30.50.220\",\n    \"port\": 3306,\n    \"user\": \"rpl_user\",\n    \"password\": \"&lt;redacted>\",\n    \"connect_timeout\": 20,\n    \"read_timeout\": 60,\n    \"write_timeout\": 60\n  },\n  \"replication\": {\n<strong>    \"server_id\": 9002,<\/strong>\n    \"idle_time\": 30,\n    \"verify_checksum\": true,\n<strong>    \"mode\": \"gtid\"<\/strong>\n  },\n  \"storage\": {\n    \"backend\": \"file\",\n    \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\"\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Note that in the config file we have wwo changes from the original: <code>\"mode\": \"gtid\"<\/code> instead of <code>\"position\"<\/code>, and a different <code>server_id<\/code> (<code>9002<\/code>); since this is a second replication client connecting to the same source at the same time as the original collector, and each one needs its own unique ID.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Starting PBS GTID pull<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -d --name binlog-server-gtid \\\n  --restart unless-stopped \\\n  --stop-signal SIGTERM \\\n  --stop-timeout 120 \\\n  -v ~\/binlog-server\/config-gtid.json:\/etc\/binlog-server\/config.json:ro \\\n  -v ~\/binlog-server\/data-gtid:\/var\/lib\/binlog-server\/data \\\n  -v ~\/binlog-server\/logs:\/var\/log\/binlog-server \\\n  perconalab\/percona-binlog-server:latest \\\n  binlog_server pull \/etc\/binlog-server\/config.json<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can see the status of both the docker containers running percona binlog server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On Source:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysql> show processlist;\n+-----+-----------------+--------------------+------+------------------+-------+-----------------------------------------------------------------+------------------+----------+-----------+---------------+\n| Id  | User            | Host               | db   | Command          | Time  | State                                                           | Info             | Time_ms  | Rows_sent | Rows_examined |\n+-----+-----------------+--------------------+------+------------------+-------+-----------------------------------------------------------------+------------------+----------+-----------+---------------+\n|   6 | event_scheduler | localhost          | NULL | Daemon           | 10134 | Waiting on empty queue                                          | NULL             | 10133872 |         0 |             0 |\n|  25 | root            | localhost          | test | Query            |     0 | init                                                            | show processlist |        2 |         0 |             0 |\n| 222 | rpl_user        | 10.222.20.99:62850 | NULL | Binlog Dump      |    73 | Source has sent all binlog to replica; waiting for more updates | NULL             |    73678 |         0 |             0 |\n| 223 | rpl_user        | 10.222.20.99:62856 | NULL | Binlog Dump GTID |    49 | Source has sent all binlog to replica; waiting for more updates | NULL             |    49704 |         0 |             0 |\n+-----+-----------------+--------------------+------+------------------+-------+-----------------------------------------------------------------+------------------+----------+-----------+---------------+<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Docker status<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ docker ps -a\nCONTAINER ID   IMAGE                                     COMMAND                  CREATED         STATUS                       PORTS                                                                                                                                  NAMES\na7cfdbe091bd   perconalab\/percona-binlog-server:latest   \"binlog_server pull \u2026\"   13 hours ago    Up 13 hours                                                                                                                                                         binlog-server-gtid\n0f73436929f1   perconalab\/percona-binlog-server:latest   \"binlog_server pull \u2026\"   14 hours ago    Up 13 hours                                                                                                                                                         binlog-server<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">binlog_server list<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Now, let&#8217;s redo the gtid search but before that let me first show you the difference of &#8220;list&#8221;&#8230; See that the metadata has more information regarding GTID:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm \\\n  -v ~\/binlog-server\/config-gtid.json:\/etc\/binlog-server\/config.json:ro \\\n  -v ~\/binlog-server\/data-gtid:\/var\/lib\/binlog-server\/data:ro \\\n  perconalab\/percona-binlog-server:latest \\\n  binlog_server list \/etc\/binlog-server\/config.json | jq\n{\n  \"version\": 1,\n  \"status\": \"success\",\n  \"result\": &#91;\n    {\n      \"name\": \"mysql-bin.000001\",\n      \"size\": 105825820,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000001\",\n      \"previous_gtids\": \"\",\n      \"added_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:1-2114\",\n      \"min_timestamp\": \"2026-09-09T15:39:08\",\n      \"max_timestamp\": \"2026-09-09T17:32:14\"\n    },\n    {\n      \"name\": \"mysql-bin.000002\",\n      \"size\": 169304503,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000002\",\n      \"previous_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:1-2114\",\n      \"added_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:2115-2116\",\n      \"min_timestamp\": \"2026-09-09T17:32:14\",\n      \"max_timestamp\": \"2026-09-09T17:32:51\"\n    },\n    {\n      \"name\": \"mysql-bin.000003\",\n      \"size\": 169304257,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000003\",\n      \"previous_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:1-2116\",\n      \"added_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:2117\",\n      \"min_timestamp\": \"2026-09-09T17:32:51\",\n      \"max_timestamp\": \"2026-09-09T17:33:02\"\n    },\n    {\n      \"name\": \"mysql-bin.000004\",\n      \"size\": 274547106,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000004\",\n      \"previous_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:1-2117\",\n      \"added_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:2118\",\n      \"min_timestamp\": \"2026-09-09T17:33:02\",\n      \"max_timestamp\": \"2026-09-09T17:44:35\"\n    },\n    {\n      \"name\": \"mysql-bin.000005\",\n      \"size\": 12557,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000005\",\n      \"previous_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:1-2118\",\n      \"added_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:2119-2120\",\n      \"min_timestamp\": \"2026-09-09T17:44:35\",\n      \"max_timestamp\": \"2026-09-09T18:27:32\"\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">binlog_server search_by_gtid_set<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm \\\n  -v ~\/binlog-server\/config-gtid.json:\/etc\/binlog-server\/config.json:ro \\\n  -v ~\/binlog-server\/data-gtid:\/var\/lib\/binlog-server\/data:ro \\\n  perconalab\/percona-binlog-server:latest \\\n  binlog_server search_by_gtid_set \/etc\/binlog-server\/config.json \\\n  7021a5ff-ac64-11f1-bc37-bc24112b899e:2117 | jq\n{\n  \"version\": 1,\n  \"status\": \"success\",\n  \"result\": &#91;\n    {\n      \"name\": \"mysql-bin.000003\",\n      \"size\": 169304257,\n      \"uri\": \"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000003\",\n      \"previous_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:1-2116\",\n      \"added_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:2117\",\n      \"min_timestamp\": \"2026-09-09T17:32:51\",\n      \"max_timestamp\": \"2026-09-09T17:33:02\"\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">One file, instantly identified. What makes that possible is sitting right next to each binlog a json file. This is my favourite feature.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cat data-gtid\/mysql-bin.000003.json | jq\n{\n  \"version\": 1,\n  \"size\": 169304257,\n  \"previous_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:1-2116\",\n  \"added_gtids\": \"7021a5ff-ac64-11f1-bc37-bc24112b899e:2117\",\n  \"min_timestamp\": \"2026-09-09T17:32:51\",\n  \"max_timestamp\": \"2026-09-09T17:33:02\",\n  \"last_sequence_number\": 1\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">binlog_server purge_binlogs<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm \\\n  -v ~\/binlog-server\/config.json:\/etc\/binlog-server\/config.json:ro \\\n  -v ~\/binlog-server\/data:\/var\/lib\/binlog-server\/data \\\n  perconalab\/percona-binlog-server:latest \\\n  binlog_server purge_binlogs \/etc\/binlog-server\/config.json mysql-bin.000001\n{\"version\":1,\"status\":\"success\",\"result\":&#91;{\"name\":\"mysql-bin.000001\",\"size\":105825820,\"uri\":\"file:\/\/\/var\/lib\/binlog-server\/data\/mysql-bin.000001\",\"min_timestamp\":\"2026-09-09T15:39:08\",\"max_timestamp\":\"2026-09-09T17:32:14\"}]}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If we search the getid from binlog.000001, the error returned is<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\"version\":1,\"status\":\"error\",\"message\":\"The specified GTID set cannot be covered\"}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Overall, PBS (Percona Binlog Server) is a promising tool with some genuinely interesting features and functions. I am particularly impressed by the usability of <code>search_by_timestamp<\/code>, <code>search_by_gtid_set<\/code>. I&#8217;m looking forward to seeing where it goes as it heads toward a full server release.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re working with MySQL binlogs and haven&#8217;t looked at PBS yet, I&#8217;d encourage you to give it a try and use it. Let me know if you need a hand in the setup or directly reach out to Percona via forum.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"Earlier last week I was working with Percona Binlog Server, Percona&#8217;s tool for archiving the MySQL binary log (binlog) outside of a traditional replica and exploring what it can do.&hellip;\n","protected":false},"author":1,"featured_media":3621,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[8,870],"tags":[15,1235,1234,1233,427,1237,1232,1231,1236],"class_list":["post-3619","post","type-post","status-publish","format-standard","has-post-thumbnail","category-mysql","category-mysql-tools","tag-backup","tag-binary-log-server","tag-binlog","tag-binlog-server","tag-mysql","tag-mysql-binlog-server","tag-pbs","tag-percona-binlog-server","tag-point-in-time-recovery"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Setting up Percona Binlog Server with Docker against a real MySQL 8.4 source - covering position and GTID replication modes, and functions provided by binlog_server\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Kedar\"\/>\n\t<meta name=\"google-site-verification\" content=\"_Bu1h5r0PxIC0D2jBVdmYN45RTeG9ogcX85XLkbG1qA\" \/>\n\t<meta name=\"msvalidate.01\" content=\"116B62074CBCA1BA99B8CCE09CCF2FB8\" \/>\n\t<meta name=\"keywords\" content=\"backup,binary log server,binlog,binlog server,mysql,mysql binlog server,pbs,percona binlog server,point in time recovery\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Change Is Inevitable | Kedar Vaijanapurkar&#039;s Blog for MySQL, technology and various subjects\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"How to setup and use Percona Binlog Server (PBS) | Change Is Inevitable\" \/>\n\t\t<meta property=\"og:description\" content=\"Setting up Percona Binlog Server with Docker against a real MySQL 8.4 source - covering position and GTID replication modes, and functions provided by binlog_server\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-10T08:14:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-10T08:17:48+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"How to setup and use Percona Binlog Server (PBS) | Change Is Inevitable\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Setting up Percona Binlog Server with Docker against a real MySQL 8.4 source - covering position and GTID replication modes, and functions provided by binlog_server\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#article\",\"name\":\"How to setup and use Percona Binlog Server (PBS) | Change Is Inevitable\",\"headline\":\"How to setup and use Percona Binlog Server (PBS)\",\"author\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/author\\\/admin#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/percona-binlog-server.avif\",\"width\":1536,\"height\":1024,\"caption\":\"Percona Binlog Server\"},\"datePublished\":\"2026-09-10T08:14:25+00:00\",\"dateModified\":\"2026-09-10T08:17:48+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#webpage\"},\"articleSection\":\"MySQL, MySQL tools, backup, binary log server, binlog, Binlog Server, MySQL, mysql binlog server, PBS, Percona Binlog Server, point in time recovery\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql#listItem\",\"name\":\"MySQL\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql#listItem\",\"position\":2,\"name\":\"MySQL\",\"item\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql\\\/mysql-tools#listItem\",\"name\":\"MySQL tools\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql\\\/mysql-tools#listItem\",\"position\":3,\"name\":\"MySQL tools\",\"item\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql\\\/mysql-tools\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#listItem\",\"name\":\"How to setup and use Percona Binlog Server (PBS)\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql#listItem\",\"name\":\"MySQL\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#listItem\",\"position\":4,\"name\":\"How to setup and use Percona Binlog Server (PBS)\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/category\\\/mysql\\\/mysql-tools#listItem\",\"name\":\"MySQL tools\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/#person\",\"name\":\"Kedar\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/be1f7021485c325d92cc4c5d961accb9c1af72b1b11281a790f7f4f066ef10d3?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Kedar\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/author\\\/admin#author\",\"url\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/author\\\/admin\",\"name\":\"Kedar\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/be1f7021485c325d92cc4c5d961accb9c1af72b1b11281a790f7f4f066ef10d3?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Kedar\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#webpage\",\"url\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs\",\"name\":\"How to setup and use Percona Binlog Server (PBS) | Change Is Inevitable\",\"description\":\"Setting up Percona Binlog Server with Docker against a real MySQL 8.4 source - covering position and GTID replication modes, and functions provided by binlog_server\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/author\\\/admin#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/author\\\/admin#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/percona-binlog-server.avif\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs\\\/#mainImage\",\"width\":1536,\"height\":1024,\"caption\":\"Percona Binlog Server\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/how-to-setup-and-use-percona-binlog-server-pbs#mainImage\"},\"datePublished\":\"2026-09-10T08:14:25+00:00\",\"dateModified\":\"2026-09-10T08:17:48+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/\",\"name\":\"..::CHANGE is INEVITABLE::..\",\"description\":\"Kedar Vaijanapurkar's Blog for MySQL, technology and various subjects\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/kedar.nitty-witty.com\\\/blog\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"How to setup and use Percona Binlog Server (PBS) | Change Is Inevitable","description":"Setting up Percona Binlog Server with Docker against a real MySQL 8.4 source - covering position and GTID replication modes, and functions provided by binlog_server","canonical_url":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs","robots":"max-image-preview:large","keywords":"backup,binary log server,binlog,binlog server,mysql,mysql binlog server,pbs,percona binlog server,point in time recovery","webmasterTools":{"google-site-verification":"_Bu1h5r0PxIC0D2jBVdmYN45RTeG9ogcX85XLkbG1qA","msvalidate.01":"116B62074CBCA1BA99B8CCE09CCF2FB8","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#article","name":"How to setup and use Percona Binlog Server (PBS) | Change Is Inevitable","headline":"How to setup and use Percona Binlog Server (PBS)","author":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/author\/admin#author"},"publisher":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/kedar.nitty-witty.com\/blog\/wp-content\/uploads\/2026\/09\/percona-binlog-server.avif","width":1536,"height":1024,"caption":"Percona Binlog Server"},"datePublished":"2026-09-10T08:14:25+00:00","dateModified":"2026-09-10T08:17:48+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#webpage"},"isPartOf":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#webpage"},"articleSection":"MySQL, MySQL tools, backup, binary log server, binlog, Binlog Server, MySQL, mysql binlog server, PBS, Percona Binlog Server, point in time recovery"},{"@type":"BreadcrumbList","@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/kedar.nitty-witty.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql#listItem","name":"MySQL"}},{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql#listItem","position":2,"name":"MySQL","item":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql","nextItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-tools#listItem","name":"MySQL tools"},"previousItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-tools#listItem","position":3,"name":"MySQL tools","item":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-tools","nextItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#listItem","name":"How to setup and use Percona Binlog Server (PBS)"},"previousItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql#listItem","name":"MySQL"}},{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#listItem","position":4,"name":"How to setup and use Percona Binlog Server (PBS)","previousItem":{"@type":"ListItem","@id":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-tools#listItem","name":"MySQL tools"}}]},{"@type":"Person","@id":"https:\/\/kedar.nitty-witty.com\/blog\/#person","name":"Kedar","image":{"@type":"ImageObject","@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/be1f7021485c325d92cc4c5d961accb9c1af72b1b11281a790f7f4f066ef10d3?s=96&d=mm&r=g","width":96,"height":96,"caption":"Kedar"}},{"@type":"Person","@id":"https:\/\/kedar.nitty-witty.com\/blog\/author\/admin#author","url":"https:\/\/kedar.nitty-witty.com\/blog\/author\/admin","name":"Kedar","image":{"@type":"ImageObject","@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/be1f7021485c325d92cc4c5d961accb9c1af72b1b11281a790f7f4f066ef10d3?s=96&d=mm&r=g","width":96,"height":96,"caption":"Kedar"}},{"@type":"WebPage","@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#webpage","url":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs","name":"How to setup and use Percona Binlog Server (PBS) | Change Is Inevitable","description":"Setting up Percona Binlog Server with Docker against a real MySQL 8.4 source - covering position and GTID replication modes, and functions provided by binlog_server","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#breadcrumblist"},"author":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/author\/admin#author"},"creator":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/author\/admin#author"},"image":{"@type":"ImageObject","url":"https:\/\/kedar.nitty-witty.com\/blog\/wp-content\/uploads\/2026\/09\/percona-binlog-server.avif","@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs\/#mainImage","width":1536,"height":1024,"caption":"Percona Binlog Server"},"primaryImageOfPage":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs#mainImage"},"datePublished":"2026-09-10T08:14:25+00:00","dateModified":"2026-09-10T08:17:48+00:00"},{"@type":"WebSite","@id":"https:\/\/kedar.nitty-witty.com\/blog\/#website","url":"https:\/\/kedar.nitty-witty.com\/blog\/","name":"..::CHANGE is INEVITABLE::..","description":"Kedar Vaijanapurkar's Blog for MySQL, technology and various subjects","inLanguage":"en-US","publisher":{"@id":"https:\/\/kedar.nitty-witty.com\/blog\/#person"}}]},"og:locale":"en_US","og:site_name":"Change Is Inevitable | Kedar Vaijanapurkar's Blog for MySQL, technology and various subjects","og:type":"article","og:title":"How to setup and use Percona Binlog Server (PBS) | Change Is Inevitable","og:description":"Setting up Percona Binlog Server with Docker against a real MySQL 8.4 source - covering position and GTID replication modes, and functions provided by binlog_server","og:url":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs","article:published_time":"2026-09-10T08:14:25+00:00","article:modified_time":"2026-09-10T08:17:48+00:00","twitter:card":"summary","twitter:title":"How to setup and use Percona Binlog Server (PBS) | Change Is Inevitable","twitter:description":"Setting up Percona Binlog Server with Docker against a real MySQL 8.4 source - covering position and GTID replication modes, and functions provided by binlog_server"},"aioseo_meta_data":{"post_id":"3619","title":null,"description":"Setting up Percona Binlog Server with Docker against a real MySQL 8.4 source - covering position and GTID replication modes, and functions provided by binlog_server","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-09-10 06:49:09","updated":"2026-09-10 08:41:02","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kedar.nitty-witty.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\" title=\"MySQL\">MySQL<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-tools\" title=\"MySQL tools\">MySQL tools<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tHow to setup and use Percona Binlog Server (PBS)\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/kedar.nitty-witty.com\/blog"},{"label":"MySQL","link":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql"},{"label":"MySQL tools","link":"https:\/\/kedar.nitty-witty.com\/blog\/category\/mysql\/mysql-tools"},{"label":"How to setup and use Percona Binlog Server (PBS)","link":"https:\/\/kedar.nitty-witty.com\/blog\/how-to-setup-and-use-percona-binlog-server-pbs"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/posts\/3619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/comments?post=3619"}],"version-history":[{"count":4,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/posts\/3619\/revisions"}],"predecessor-version":[{"id":3624,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/posts\/3619\/revisions\/3624"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/media\/3621"}],"wp:attachment":[{"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/media?parent=3619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/categories?post=3619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kedar.nitty-witty.com\/blog\/wp-json\/wp\/v2\/tags?post=3619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}