 Hello everyone. My name is Tyler Duzan. I'm going to talk to you today about Percona Extra Backup. So who am I? I'm the product manager for MySQL software and cloud software at Percona. I used to be an engineer before I went into management and I've been active in open source for a really long time doing volunteer stuff on the side and very happy to be able to work on it as a career now. So what is Extra Backup? For those of you that don't know, this is an enterprise grade backup tool, hot backup tool for MySQL. It supports MyRocs. It's cloud integrated as of recently. It's entirely free and open source software. It's like all the other software that Percona provides. And it's made up of four binary utilities. There's the main one, which is called Extra Backup, that actually performs backups and restores. There's XB Stream, which basically is a utility to stream backups across a network that's used internally in some of our software for a process called SST, Snapshot State Transfers. But it also includes some compression. There's XB Crypt, which is a XB Stream-compatible way to do encryption. And there's XB Cloud, which is an XB Stream-compatible way to send your backups up to a cloud provider. And we currently support anything that's compatible with the Amazon S3 API as well as OpenStack Swift. And I want to kind of talk through the current state and then I'm going to go into some of the things we have planned. So a big question a lot of folks have is like one of the things we recently did was we released a version for MySQL 8.0. People ask why did we split the binaries? Basically, in MySQL 8.0, there is an introduction of a new data dictionary format and a new redo log format, which has a bunch of advantages. However, because of that, there's no compatibility between the data dictionary that exists in 5.7 and the data dictionary that exists in 8.0. So you can't have the same backup utility work on both unless you put an extraordinary amount of effort into essentially shipping kind of an engine for both, which was outside the scope of what we could do with this project currently. And so because of that, Oracle also upstream split their MySQL Enterprise backup utility for basically similar reasons, but we're still actively developing both series. So we have the 2.4 release series, which is actively developed for the 5x family of MySQL. And we have the 8.0 PXB, which is developed for the 8.0 series of MySQL. Another thing that's a recent development is we added support for multiple engine consistent backups. And so the engine we added support for first is MyRocks. There's the ability to add other engines in the future. But one of the things that we did this for was again, because in 8.0, the new data dictionary format in 8.0 relies on NODB. So your system tables are actually stored in an NODB table. So even if you have a database where all of your databases are based on MyRocks, you're in a situation where you still have to back up the system tables from NODB. So you have to have a backup that's consistent to a point in time with both NODB and MyRocks together. And so to do this, we added the capability to do checkpointing into MyRocks, which is based on the internal function in RocksDB that essentially creates a snapshot of the on-disk SST files. And we use that combined with some hooks we added in that essentially let you grab a specific point in time like LSN within the wall log for MyRocks. And at the exact same moment we grab the same consistent point in time in the MySQL binary log for NODB. And so this allows us to have a single point in time where backups are consistent to when you finish your prepare step and extra backup. And it works really good. It's actually quite fast on MyRocks because the files on disk essentially just have to be copied similarly to how we work with NODB. And then another thing we just recently added was support for streaming cloud object stores. So as I mentioned earlier, we have support in XbCloud for OpenStack Swift and S3. One of the really cool things about it is that you can actually do a backup to the cloud without having to write anything to disk at all. So when you execute the backup, you can actually stream it with XbCloud directly into S3 or anything that supports the S3 API like MinIO. And it allows you to really make use of this environment like Kubernetes. That's one of the reasons we added it is because we also have an operator for Kubernetes for running some of our database software. And we needed a backup utility that was able to be run kind of in a native way in Kubernetes that could do this. And so that's why we did this. Pretty cool feature. And then I'm going to just go real quick over an overview of some of the things coming up in our roadmap. So a big piece of this is we want to do a bunch of improvements for security. One of the things that we've got as a strategy generally across all of our software at Precona is we want to improve the security of our software or improve the way that people can use the software to secure themselves. We see this as kind of being like a critical factor for enterprises to actually make use of open source as they need to have enterprise-grade security features. So we actually have just finished this first item. So for PXC 80, we're going to have support for data and rest encryption. And in order to support that, we have to have this concept called transition keys because every member of a cluster could actually have a different key on disk that it uses to encrypt itself. But the extra backup tool is actually used for the SST process. So it still needs to be able to transfer data successfully. So what we do is we actually do re-encryption in-stream. We call this transition keys. We're working on doing tighter integration with HasherCorp Vault so that you can make use of it to have unique keys that are stored by Vault to actually encrypt your backups before they go across the network. Obviously today, if you put something in S3, you can configure your S3 bucket so it's encrypted and it's using HTTPS to send it so it's encrypted on the wire, but you're relying on the cloud provider's encryption only. You don't have a way to enforce your own encryption as well unless you write it into like a script extra. This provides a path to do that. We're also going to add support for our key rotation features. When they become GA, they're experimental right now within Prokona server. We've got some performance improvements we've been working through. So one thing is we've got a new flag that will help you to auto-tune the use memory setting and extra backup which determines basically what the size of the buffer pool is when extra backup is running. And this has a pretty significant impact on the speed of a backup. And so we're going to basically analyze the redo log to understand how many pages are present and are needed in memory and set the size. We're going to do adjustable chunk sizing in xbstream at some point. And when we do that, it will be supported in xbcloud as well. We're going to also do chunk level support for dash dash parallel. Today this is on a file level, but we want to do it at a chunk level so you can have single large databases and still get a speedup. And we want to add exponential backoff into the xbcloud API wrappers because today retries can be kind of expensive. So if the API becomes unavailable for your cloud provider for any reason, whether it's a network issue or whatever, it can be painful. And then we're going to do some additional integration. So a lot of this is in xbcloud. We want to add native support for Google Cloud Storage. Today you can use it through the S3 API integration, but we'd like to be native to Google Cloud. Same thing, we'd like to support azure blob. We're going to add an incremental backup function for my rocks. And then we would like to support doing restoration via tar ball from xbcloud. So right now, you know, extra backup expects to go to a place on disk, and when you use xbcloud it expects that the bucket basically contains the contents of what would be in the place on disk. We want to support tar balls to simplify some of this. And then we're going to add support for imrolls in S3, so there's the ability to kind of make use of those integrations and set up roles and things like that for backup users. And with that, I went really quick because I wanted to give time for questions. And here's my contact information. So if you've got questions, I'm happy to address whatever your questions are. Yes? What is the problem with the option? That's a good question. So I don't have a good answer for you that right now, for that right now. Typically, we're doing all of our new feature development into the most recent branch. Some things we choose to backport. We have backported some features, like the xbcloud features are actually backported into 2.4, for instance. But I don't have a decision point on that yet. But it'll go into 8.0 first, for sure. Replication, well, replications. Oh, okay, restoring from backup. Yeah, I mean, well, basically, we're going to have to add support for Azure Blob into the tool before you could probably do that. There is a way, Azure actually has instructions on their documentation on how to set menio up in front of it as like a proxy, so you can still use an s3-compatible layer to talk to Azure Blob. But as long as you have the ability to just hit the public API and get a backup, there's no reason why you couldn't execute xbcloud and say AWS and grab a backup off of Azure and restore it. So, yeah, you could cross boundaries. Yeah, differential backups. No, not currently. Any other questions? Cool. All right. Well, I'm within my time, so thank you all. And come check us out. Check out some of our software.