当前位置: 首页 > 科技观察

Xtrabackup8.0.x版本对MySQL的支持分析

时间:2023-03-12 06:18:06 科技观察

本文转载自微信公众号《DBA闲思杂想》,作者潇湘隐士。转载本文请联系DBA杂念公众号。我们知道从MySQL8.0.x开始,必须使用PerconaXtrabackup8.0.x进行备份。之前的PerconaXtraBackup2.4不支持MySQL8.x备份。并且PerconaXtrabackup8.0.x不支持备份前的MySQL5.6/MySQL5.7。但是具体的PerconaXtrabackup版本支持哪些MySQL版本我们知之甚少,官方文档也没有很详细的介绍。下面我们来看一个案例。最近安装了一个MySQL环境。MySQL版本是最新的MySQL8.0.28版本,PerconaXtraBackup版本也是最新的8.0.27-19版本。MySQL版本:8.0.28MySQLCommunityServer-GPLXtrabackup版本:8.0.27-19mysql>selectversion();+------------+|版本()|+------------+|8.0.28|+------------+1行在集合中(0.00秒)mysql>$xtrabackup--versionxtrabackup:已识别的服务器参数:--datadir=/var/lib/mysqlxtrabackup版本8.0。27-19基于MySQLserver8.0.27Linux(x86_64)(revisionid:50dbc8dadda)使用PerconaXtrabackup8.0.27备份MySQL8.0.28的时候报错,如下所示:xtrabackup:recognizedserverarguments:--datadir=/data/mysql/data--tmpdir=/data/mysql/mysql_temp--innodb_buffer_pool_size=8G--server-id=1--log_bin=/data/mysql/bin_logs/mysql_binlogxtrabackup:已识别的客户端参数:--port=3306--socket=/tmp/mysql.sock--user=bkuser--password=*--host=127.0.0.1--port=3306--backup=1--target-dir=/mysql_backup/db_backup/backup_cycle_2022_02_06/full_backup_2022_02_12_08_57_02/usr/bin/xtrabackup版本8.0.27-19基于MySQL服务器8.0.27Linux(x86_64)(修订ID:50dbc8dadda)22021208:58:02version_check使用DSN'dbi:mysql:;mysql_read_default_group=xtrabackup;host=127.0.0.1;port=3306;mysql_socket=/tmp/mysql.sock'作为'bkuser'连接到MySQL服务器(使用密码:是)。22021208:58:02version_check连接到MySQL服务器22021208:58:02version_check正在对服务器执行版本检查...22021208:58:02version_check完成。:127.0.0.1,用户:bkuser,密码:set,端口:3306,套接字:/tmp/mysql.sockError:不支持的服务器版本8.0.28。如果有新版本可用,请升级PXB。要继续冒险,请使用选项--no-server-version-check。提示当前PerconaXtrabackup(8.0.27-19)不支持MySQL8.0.28。但是当前时间节点(2022-02-11),Percona官网,Xtrabackup的最新版本是percona-xtrabackup-80-8.0.27-19.1.el7.x86_64.rpm,MySQL官方最新版本是MySQL8.0.28。查看发布日期后,MySQL8.0.28于2021年9月28日发布。percona-xtrabackup8.0.27于2022年2月2日发布。也就是说percona-xtrabackup8.0.28还没有正式发布。不过根据官方文档,从PerconaXtraBackup8.0.21开始,增加了--no-server-version-check参数。该参数控制是否将源系统版本与PerconaXtraBackup版本进行比较。--no-server-version-check此选项允许在服务器版本大于(更新)于PXB支持的版本时继续备份关于这个参数,搜索了下官方资料,具体介绍如下所示PerconaXtraBackup8.0.21adds--no-server-version-check参数。此参数将源系统版本与PerconaXtraBackup版本进行比较。该参数检查以下情况:?源系统和PXB版本相同,备份继续?源系统低于PXB版本,备份继续?源系统大于PXB版本,参数未被覆盖,备份停止并返回错误信息?源系统大于PXB版本,参数被覆盖,备份继续显式添加--no-server-version-check参数,与示例一样,覆盖参数和备份收益。$xtrabackup--backup--no-server-version-check--target-dir=$mysql/backup1当您覆盖该参数时,可能会发生以下事件:备份失败创建损坏的备份备份成功该参数检查以下情况:源系统与PXB版本相同,并继续备份源系统低于PXB版本,继续备份源系统大于PXB版本,参数未被覆盖,停止备份并返回错误信息源系统大于PXB版本,参数被覆盖,备份继续所以如果我们使用参数--no-server-一个版本检查备份可能成功,失败,或者创建一个损坏的备份。xtrabackup--defaults-file=/data/mysql/my.cnf--login-path=dbbackup--backup--no-server-version-check--target-dir=/mysql_backup/db_backup搜索相关资料时,我也看到其他人也遇到过类似的问题。详情见链接:xtrabackup-8.0.26-18什么时候发布[1]关于PerconaXtrabackup8.0.x的版本支持和限制,其实之前很少了解这方面的内容,Percona官方也没有详细信息,Xtrabackup8.0.x是否支持向后兼容?比如Xtrabackup8.0.27-19是支持MySQL8.0.26还是支持MySQL8.0.26下的MySQL8。至于x.x版本,我简单测试了一下。我安装了一个MySQL8.0.26,然后安装了Xtrabackup8.0.27-19,测试验证是否可以备份成功。貌似Xtrabackup8.0.x应该是向下兼容的(当然Xtrabackup8.0.x只能向下兼容MySQL8.0.x)后来搜索相关资料的时候也看到了官方的一篇博客,只是简单介绍了一下8.0.12之前的PerconaXtraBackup版本不支持MySQL8.0.20或更高版本的备份。因为此版本包含对InnoDB重做日志格式的更改,这打破了与所有当前发布的PerconaXtraBackup8.x系列版本的兼容性。参见PerconaXtraBackup8.x和MySQL8.0.20[2]更新:PerconaXtraBackup8.0.12现在支持MySQL8.x版本的备份和恢复处理;以前版本的PerconaXtraBackup不适用于MySQL8.0.20及更高版本。更多信息2020年4月27日星期一,甲骨文发布了备受期待的MySQL数据库服务器8.0.20版本。此版本包含对InnoDB重做日志格式的更改,它破坏了与所有当前发布的PerconaXtraBackupx系列版本的兼容性。目前,没有已知的解决方法可以让任何版本的PerconaXtraBackup8.x与MySQL8.0.20一起正常运行。我们已经确定了问题的具体原因,并正在努力开发一个新版本,尽快安全地解决这个问题。感谢您的耐心等待。看来MySQL8.0.x的变化太快了,PerconaXtrabackup8.0.x的发展有点不合拍。开源和免费产品在版本更新和发布方面肯定不如商业软件高效。这也是开源软件的一些缺陷,没有办法绕过。参考[1]xtrabackup-8.0.26-18什么时候发布:https://forums.percona.com/t/when-will-xtrabackup-8-0-26-18-release/11944[2]PerconaXtraBackup8.x和MySQL8.0.20:https://www.percona.com/blog/2020/04/28/percona-xtrabackup-8-x-and-mysql-8-0-20/