如何使用CentOS 7上的Percona XtraBackup创建MySQL数据库的热备份

介绍

使用活动数据库系统时遇到的一个很常见的挑战是执行热备份,即在不停止数据库服务或将其设置为只读的情况下创建备份。简单地复制活动数据库的数据文件通常会导致内部不一致的数据库副本,即它将无法使用或者将在复制期间丢失。另一方面,停止数据库以进行计划备份会使应用程序的数据库相关部分变为不可用。Percona XtraBackup是一个开源实用程序,可用于解决此问题,并为运行MySQL,MariaDB和Percona Server数据库(也称为热备份)创建一致的完整备份或增量备份。

与mysqldump等实用程序生成的逻辑备份相反,XtraBackup会创建数据库文件的物理备份 - 它会复制数据文件。然后,它将事务日志(也称为重做日志)应用于物理备份,以回填在创建备份期间未完成的任何活动事务,从而实现正在运行的数据库的一致备份。然后,可以使用rsync,像Bacula之类的备份系统将生成的数据库备份再备份到远程位置。

本教程将向您展示如何使用CentOS 7上的Percona XtraBackup对MySQL或MariaDB数据库执行完整的热备份。还介绍了从备份还原数据库的过程。

先决条件

要学习本教程,您必须具备以下条件:

  • CentOS 7系统的超级用户权限,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器
  • 运行MySQL或MariaDB数据库,我建议您可以使用腾讯的云关系型数据库,腾讯云关系型数据库提供 MySQL、SQL Server、MariaDB、PostgreSQL 数据库引擎,并针对数据库引擎的性能进行了优化。
  • 访问数据库的管理员用户(root)。

此外,要执行数据库的热备份,数据库系统必须使用InnoDB存储引擎。这是因为XtraBackup依赖于InnoDB维护的事务日志。如果您的数据库使用MyISAM存储引擎,您仍然可以使用XtraBackup,但数据库将在备份结束时短时间内被锁定。

检查存储引擎

如果您不确定数据库使用哪个存储引擎,可以通过各种方法查找。一种方法是使用MySQL控制台选择有问题的数据库,然后输出每个表的状态。

首先,进入MySQL控制台:

mysql -u root -p

然后输入您的MySQL root密码。

在MySQL提示符下,选择要检查的数据库。请务必在此处替换您自己的数据库名称:

USE database_name;

然后打印其表状态:

SHOW TABLE STATUS\G;

应为数据库中的每一行指示引擎:

Example Output:...
*************************** 11. row ***************************
           Name: wp_users
         Engine: InnoDB
...

完成后,离开控制台:

exit

我们安装Percona XtraBackup。

安装Percona XtraBackup

安装Percona XtraBackup的最简单方法是使用yum,因为Percona的存储库提供了RPM。

sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

然后,您可以运行此命令来安装XtraBackup:

sudo yum install percona-xtrabackup

接受任何确认提示以完成安装。

XtraBackup主要包括XtraBackup程序和innobackupexPerl脚本,我们将使用它来创建数据库备份。

第一次准备

在第一次使用XtraBackup之前,我们需要准备XtraBackup将使用的系统和MySQL用户。本节介绍初始准备工作。

系统用户

除非您计划使用系统root用户,否则必须执行一些基本准备工作以确保XtraBackup可以正确执行。我们假设您以将运行XtraBackup的用户身份登录,并且它具有超级用户权限。

将您的系统用户添加到“mysql”组(替换为您的实际用户名):

sudo gpasswd -a username mysql

在我们处理它时,让我们创建一个目录,用于存储XtraBackup创建的备份:

sudo mkdir -p /data/backups
sudo chown -R username: /data

chown命令确保用户能够写入备份目录。

MySQL用户

XtraBackup需要一个在创建备份时使用MySQL的用户。我们现在创建一个。

使用以下命令进入MySQL控制台:

mysql -u root -p

提供MySQL root密码。

在MySQL提示符下,创建一个新的MySQL用户并为其分配密码。在此示例中,用户名为“bkpuser”,密码为“bkppassword”。将这两者更改为安全的东西:

CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'bkppassword';

接下来,为所有数据库授予新的MySQL用户重新加载,锁定和复制权限:

GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
FLUSH PRIVILEGES;

这些是XtraBackup创建数据库完整备份所需的最低权限。

完成后,退出MySQL控制台:

exit

现在我们已准备好创建数据库的完整备份。

执行完全热备份

本节介绍使用XtraBackup创建MySQL数据库的完整热备份所需的步骤。确保数据库文件权限正确后,我们将使用XtraBackup 创建备份,然后进行准备

更新Datadir权限

在CentOS 7上,MySQL的数据文件存储在/var/lib/mysql其中,有时也称为datadir。默认情况下,对datadir的访问仅限于mysql用户。XtraBackup需要访问这个目录来创建它的备份,所以让我们运行一些命令来确保我们之前设置的系统用户 - 作为mysql组的成员 - 具有适当的权限:

sudo chown -R mysql: /var/lib/mysql
sudo find /var/lib/mysql -type d -exec chmod 775 "{}" \;

这些命令确保mysql组可以访问datadir中的所有目录,并且应该在每次备份之前运行。

如果在你同一个会话中将用户添加到mysql组,则需要再次登录,以便更改组成员关系。

创建备份

现在我们准备创建备份了。运行MySQL数据库后,使用该innobackupex实用程序执行此操作。更新用户和密码后运行此命令以匹配MySQL用户的登录名:

innobackupex --user=bkpuser  --password=bkppassword --no-timestamp /data/backups/new_backup

这将在指定的位置/data/backups/new_backup中创建数据库的备份,:

innobackupex output
innobackupex: Backup created in directory '/data/backups/new_backup'
150420 13:50:10  innobackupex: Connection to database server closed
150420 13:50:10  innobackupex: completed OK!

或者,您可以省略--no-timestamp,然后让XtraBackup根据当前时间戳创建备份目录,如下所示:

innobackupex --user=bkpuser  --password=bkppassword /data/backups

这将在自动生成的子目录中创建数据库的备份,如下所示:

innobackupex output — no timestamp
innobackupex: Backup created in directory '/data/backups/2015-04-20_13-50-07'
150420 13:50:10  innobackupex: Connection to database server closed
150420 13:50:10  innobackupex: completed OK!

你决定的任何一种方法都应该输出“innobackupex:completedOK!” 在其输出的最后一行。成功备份将生成数据库datadir的副本,必须先准备好它才能使用。

准备备份

使用XtraBackup创建热备份的最后一步是准备它。这涉及“重放”事务日志以将任何未提交的事务应用于备份。准备备份将使其数据保持一致,并可用于还原。

按照我们的示例,我们将准备在/data/backups/new_backup中创建的备份。将其替换为实际备份的路径:

innobackupex --apply-log /data/backups/new_backup

再一次,你应该看到“innobackupex:completedOK!” 作为最后一行输出。

您的数据库备份已创建,可以用来还原数据库。此外,如果您有文件备份系统,例如Bacula,则应将此数据库备份作为备份选择的一部分包含在内。

下一节将介绍如何从我们刚刚创建的备份中恢复数据库。

执行备份恢复

使用XtraBackup还原数据库要求数据库已停止运行,并且其datadir为空。

使用以下命令停止MySQL服务:

sudo systemctl stop mariadb

然后移动或删除datadir(/var/lib/mysql)中的内容。在我们的示例中,我们只需将其移动到临时位置:

mkdir /tmp/mysql
mv /var/lib/mysql/* /tmp/mysql/

现在我们可以从备份“new_backup”中恢复数据库:

innobackupex --copy-back /data/backups/new_backup

如果成功,最后一行输出应该说“innobackupex:completedOK!”

datadir中恢复的文件可能属于您运行还原过程的用户。将所有权更改回mysql,以便MySQL可以读取和写入文件:

sudo chown -R mysql: /var/lib/mysql

现在我们准备启动MySQL了:

sudo systemctl start mariadb

而已!您恢复的MySQL数据库应该已启动并正在运行。

结论

当您现在可以使用Percona XtraBackup创建MySQL数据库的热备份时,那么您应该考虑设置这几个方面。

首先,建议自动化该过程,以便根据计划创建备份。其次,如果数据库服务器出现问题,您应该使用rsync和网络文件备份系统(如Bacula)类似的工具制作备份的远程副本。之后,您将需要考虑轮换备份(按计划删除旧备份)和创建增量备份(使用XtraBackup)以节省磁盘空间。

更多CentOS教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Create Hot Backups of MySQL Databases with Percona XtraBackup on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何使用CentOS 7上的Bottle Micro Framework部署Python Web应用程序

由于其灵活性和高级功能,Python是一种优秀的Web编程语言。Web框架可以使编程Web应用程序更加简单,因为它们连接了强大的Web界面所需的许多组件。

2233
来自专栏一个爱吃西瓜的程序员

学习SQL【1】-搭建SQL的学习环境

最近我在学习SQL,现在就开始记录我的学习过程吧,加油!如果你也想学SQL,希望我的学习记录能对你有所帮助。 PostgreSQL是对象关系型数据库管理系统...

3456
来自专栏我是攻城师

ElasticSearch的一些删除用法笔记

3547
来自专栏数据和云

性能优化:调整 I/O 相关的等待

编辑手记:对Oracle数据库进行调整优化,基本上最终都可以归结到I/O调整上,因此,了解如何来优化Oracle数据库的I/O对于一个DBA来说就显得至关重要。...

2513
来自专栏pangguoming

Centos7 Mysql 双机热备实现数据库高可用

mysql双主热备,也称主主互备,目的是mysql数据库高可用,只支持双机,原因是mysql的复制是一主多从,但一个从服务器只能有一个主服务器。

3612
来自专栏Laoqi's Linux运维专列

MySQL调优

4419
来自专栏云计算教程系列

# 如何在Ubuntu 14.04上使用Bottle Micro Framework部署Python Web应用程序 ##

由于其灵活性和高级功能,Python是一种优秀的Web编程语言。Web框架可以使编程Web应用程序更加简单,因为它们连接了强大的Web界面所需的许多组件。

1681
来自专栏aoho求索

基于可靠消息方案的分布式事务(三):Lottor使用

前面两篇文章介绍了笔者关于可靠消息方案的分布式事务的实现思路以及Java中的事务概念,奈何工作抽不出时间,如今时隔已久,分布式事务系列拖了很久,一直没能好好把项...

851
来自专栏乐沙弥的世界

Oracle实例和Oracle数据库(Oracle体系结构)

--==========================================

1162
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Percona XtraBackup创建MySQL数据库的热备份

使用活动数据库系统时遇到的一个非常常见的挑战是执行热备份,即在不停止数据库服务或将其设置为只读的情况下创建备份。简单地复制活动数据库的数据文件通常会导致内部不一...

1240

扫码关注云+社区

领取腾讯云代金券