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

介绍

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

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

本教程将向您展示如何使用Uconntu 14.04上的Percona XtraBackup对MySQL或MariaDB数据库执行完整的热备份。还介绍了从备份还原数据库的过程。可以在此处找到本指南的CentOS 7版本。

先决条件

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

  • Ubuntu 14.04系统的超级用户权限
  • 运行MySQL或MariaDB数据库
  • 访问数据库的管理员用户(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最简单的方法是使用apt-get。

使用以下命令添加Percona存储库密钥:

  • sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

然后将Percona存储库添加到apt源:

  • sudo sh -c "echo 'deb http://repo.percona.com/apt trusty main' > /etc/apt/sources.list.d/percona.list"
  • sudo sh -c "echo 'deb-src http://repo.percona.com/apt trusty main' >> /etc/apt/sources.list.d/percona.list"

运行此命令以更新apt源:

  • sudo apt-get update

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

  • sudo apt-get 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权限

在Ubuntu 14.04上,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 770 "{}" \;

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

<span style="color:#3a3a3a"><code>If you added your user to the mysql group in the same session, you will need to login again for the group membership changes to take effect.</code></span>

创建备份

现在我们准备创建备份了。运行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:完成OK!” 在其输出的最后一行。成功备份将生成数据库datadir的副本,必须先准备好它才能使用。

准备备份

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

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

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

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

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

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

执行备份恢复

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

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

  • sudo service mysql stop

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

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

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

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

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

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

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

现在我们准备启动MySQL了:

  • sudo service mysql start

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

结论

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

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

祝好运!

原作者:米切尔·阿尼卡斯 转载来源:https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-ubuntu-14-04

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

  1. 如何在Ubuntu 14.04上安装MySQL

    如何在Ubuntu 14.04上安装MySQL 介绍 MySQL是一个开源数据库管理系统,通常作为流行的LAMP(Linux,Apache,MySQL,PHP / Python / Perl)堆栈的一 ...

  2. 如何在Ubuntu 14.04上安装轻量级的Budgie桌面

    如何在Ubuntu 14.04上安装轻量级的Budgie桌面(v8) 热度 3  评论 115 www.BkJia.Com  网友分享于:   2015-05-05 11:05:11     浏览数4 ...

  3. 如何在Ubuntu 16.04上使用ProxySQL缓存优化MySQL查询

    The author selected the Free Software Foundation to receive a donation as part of the Write for DOna ...

  4. 如何在Ubuntu 14.04上使用NSD——一套仅权威DNS服务器

    提供:ZStack云计算 系列教程 本教程为DNS管理介绍系列七篇中的第七篇. 内容介绍 即使对于经验丰富的管理员而言,设置一套DNS服务器以支持域名仍是一项相当复杂的任务.DNS区管理极为重要,然而 ...

  5. v8系统计算机怎么安装到桌面,如何在Ubuntu 14.04上安装轻量级的Budgie桌面(v8)

    Budgie是为Linux发行版定制的旗舰桌面,也是一个定制工程.为思想前卫的用户设计,致力于简单和简洁.它的一个巨大优势是它不是别的项目的fork版本,是从都到尾都独立的. Budgie桌面与GNO ...

  6. Ubuntu 14.04 上使用 Nginx 部署 Laravel 4.2

    http://laravel.lapland.name/post/102090021035/how-to-install-laravel-with-an-nginx-on-ubuntu-14-04 U ...

  7. go 写文件_如何在 Ubuntu 20.04 上安装 Go

    本文最先发布在: 如何在 Ubuntu 20.04 上安装 Go​www.itcoder.tech Go,通常被称为 golang,它是一门由 Google 创建的现代化的开源编程语言,它允许你构建实 ...

  8. 如何在 Ubuntu 14.04 里面配置 chroot 环境

    如何在 Ubuntu 14.04 里面配置 chroot 环境 你可能会有很多理由想要把一个应用.一个用户或者一个环境与你的 linux 系统隔离开来.不同的操作系统有不同的实现方式,而在 linux ...

  9. 关闭防火墙linux 16.04,如何在Ubuntu 16.04上配置和设置防火墙

    在本文中,我们将学习–如何在Ubuntu 16.04上配置和设置UFW(防火墙),UFW代表"不复杂的防火墙",它充当IPTABLES的接口,从而简化了防火墙的配置过程,对于防火墙 ...

最新文章

  1. python 集合set 的三大方法intersection union difference来处理文氏图
  2. 计算机运行游戏慢怎么办,电脑运行太慢了太卡了怎么办,台式电脑运行速度慢的解决方法...
  3. 001-supervisor
  4. 2014.12.10 OC基础复习
  5. MVC3 在提交表单以后 return View(model) 页面不会根据model的内容更新表单
  6. Bzoj1029 [JSOI2007]建筑抢修
  7. Lingo计算最优解
  8. pandas缺失值处理
  9. seaborn单变量/双变量/多变量绘图
  10. select、bash函数初识及rpm命令详解
  11. PAT 乙级 1037. 在霍格沃茨找零钱(20)Java版
  12. 深度学习入门——波士顿房价预测
  13. ICMPv6报文详解
  14. jBPM4.3+ssh+会签 整合配置及完整实例
  15. atitit. access token是什么??微信平台公众号开发access_token and Web session保持状态机制
  16. Android 银行账号
  17. 微软visio2013安装问题及解决过程
  18. 小米笔记本bios版本大全_RedmiBook 14笔记本评测:初来乍到却熟路轻辙
  19. java spring mvc json转对象,SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)......
  20. 视音频数据处理入门:颜色空间(二)---ffmpeg

热门文章

  1. Linux Shell脚本入门教程系列之(五)Shell字符串
  2. Magento批量生成优惠券
  3. 在Linux上将视频转换成动态gif图片 (附:ffmpeg和ImageMagick安装方法)
  4. CodeIgniter 的数据安全过滤全解析
  5. 数值计算方法(高斯消元以及LU分解)
  6. 改变 Gnome 应用程序 图标 大小
  7. 矩阵的旋转和翻转——Python
  8. leveldb——leveldb入门篇之Linux下编译配置和使用
  9. 【三维深度学习】多视角场景点云重建模型PointMVS
  10. 【Matlab】离散点拟合曲面