InnoDB keeps hot data in memory on its buffer named InnoDB Buffer Pool. For a long time, when a MySQL instance needed to bounce, this hot cached data was lost and the instance required a warm-up period to perform as well as it did before the service restart.
That is not the case anymore. Newer versions of MySQL/MariaDB allow users to save the state of this buffer by dumping tablespace ID’s and page ID’s to a file on disk that will be loaded automatically on startup, making the newly started server buffer pool as it was prior the restart.
Details about the MySQL implementation can be found at https://dev.mysql.com/doc/refman/5.7/en/innodb-preload-buffer-pool.html
With that in mind, Percona XtraBackup versions 2.4.13 can now instruct MySQL to dump the content of buffer pool while taking a backup. This means you can restore the backup on a new server and make MySQL perform just like the other instance in terms of InnoDB Buffer Pool data.
How it works
The buffer pool dump happens at the beginning of backup if --dump-innodb-buffer-pool
is set.
The user can choose to change the default innodb_buffer_pool_dump_pct
. If --dump-innodb-buffer-pool-pct
is set, it stores the current MySQL innodb_buffer_pool_dump_pct
value, then it changes it to the desired percentage. After the end of the backup, original values is restored back.
The actual file copy happens at the end of the backup.
Percona XtraDB Cluster
A very good use case is PXC/Galera. When a node initiates SST, we would like the joiner to have a copy of InnoDB Buffer Pool from the donor. We can configure PXC nodes to do that:
[xtrabackup] dump-innodb-buffer-pool dump-innodb-buffer-pool-pct=100
Here is an example of a PXC node that just received SST:
Before PXB-1548:
[root@marcelo-altmann-pxb-pxc-3 ~]# systemctl stop mysql && rm -rf /var/lib/mysql/* && systemctl start mysql && mysql -psekret -e "SHOW ENGINE INNODB STATUS\G" | grep 'Database pages' mysql: [Warning] Using a password on the command line interface can be insecure. Database pages 311
Joiner started with a cold buffer pool.
After adding dump-innodb-buffer-pool
and dump-innodb-buffer-pool-pct=100
to my.cnf :
[root@marcelo-altmann-pxb-pxc-3 ~]# systemctl stop mysql && rm -rf /var/lib/mysql/* && systemctl start mysql && mysql -psekret -e "SHOW ENGINE INNODB STATUS\G" | grep 'Database pages' mysql: [Warning] Using a password on the command line interface can be insecure. Database pages 30970
Joiner started with a copy of the buffer pool from the donor, which will reduce the joiner warm-up period.
Conclusion
The new version of Percona XtraBackup can help to minimize the time a newly restored backup will take to perform like source server
—
Photo by Jametlene Reskp on Unsplash