在Ubuntu 16.04上使用Percona XtraBackup执行MySQL数据库的热备份

Percona XtraBackup是一个用于MySQL的开源备份实用程序。它支持所有MySQL风格,如Percona Server,MariaDB和(Oracle)MySQL。 Percon ...

Percona XtraBackup是MySQL的开源备份工具。 它支持所有的MySQL风格,如Percona Server,MariaDB和(Oracle)MySQL。 Percona Xtrabackup执行MySQL的热备份。 热备份意味着在运行时没有停机时创建MySQL服务器的备份。

在本教程中,我将介绍如何使用Ubuntu 16.04(Xenial Xerus)上的OpenSource工具Percona XtraBackup创建一个热MySQL数据库备份。 我将使用MariaDB作为数据库服务器来执行备份,但同样的安装程序也适用于MySQL服务器。

前提条件

  • Ubuntu服务器16.04 - (Xenial Xerus)
  • MySQL或MariaDB服务器
  • 根特权

第1步 - 安装Percona XtraBackup

第一步是在我们的Ubuntu服务器上安装最新的Percona XtraBackup软件。 通过SSH(或在控制台)登录到您的服务器:

ssh root@192.168.1.15
TYPE YOUR PASSWORD

Percona XtraBackup在Ubuntu存储库中可用,但是我们要使用Percona存储库中的最新版本。

通过从web下载deb包并使用dpkg命令安装Percona存储库:

wget https://repo.percona.com/apt/percona-release_0.1-3.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_0.1-3.$(lsb_release -sc)_all.deb

接下来,更新存储库并安装Ppercona XtraBackup 2.4(目前的最新版本):

sudo apt-get update
sudo apt-get install percona-xtrabackup-24

安装了Percona XtraBackup。

第2步 - 配置用户和备份目录

要执行热备份,我们需要创建一个具有特权和权限的新的mysql用户。 在本教程中,我将使用MariaDB 10.0作为数据库服务器。 如果您尚未安装MySQL兼容数据库,那么可以使用以下命令安装:

sudo apt-get install mariadb-server mariadb-client

使用此命令为root用户设置安全密码:

mysql_secure_installation

如果安装了MariaDB,请以root用户身份使用mysql client命令访问MariaDB / MySQL shell:

mysql -u root -p
TYPE MySQL PASSWORD

创建一个名为' bekupuser '的新用户,密码为' mypassword '(为您的服务器选择安全密码!):

CREATE USER 'bekupuser'@'localhost' IDENTIFIED BY 'mypassword';

授予用户以下权限:“RELOAD,PROCESS,LOCK TABLES,REPLICATION CLIENT”。

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

接下来,创建一个新的目录来存储MySQL备份文件:

mkdir -p /data/backups/mysql/

已创建新的备份用户和备份目录。

第3步 - 使用Innobackupex执行备份

Innobackupex是xtrabackup程序的Perl脚本包装器。 它是由oracle提供的innobackup脚本的修补版本,与InnoDB Backup工具一起分发。 Innobackupex为整个MySQL数据库实例提供备份,使用xtrabackup与xbstream和xbcrypt组合。

在此步骤中,我们将为MySQL实例创建并准备完整备份。

A.使用Innobackupex创建备份

在第2步中,我们为备份创建了一个新的目录,并添加了一个新的mysql备份用户。 我们现在将使用它们来创建一个带有innobackupex命令的备份。

使用innobackupex创建MySQL备份到新目录'/ data / backups / my_backup':

innobackupex --user=bekupuser  --password=mypassword --no-timestamp /data/backups/my_backup

注意:

--user =具有必需备份权限的用户(第2步)。

--password =备份用户的密码。

--no-timestamp =禁用在备份根目录中创建新的带时间戳的子目录。

/ data / backups / my_backup =备份目录,它将在备份过程中自动创建。 如果目录存在,您将收到一条错误消息。

使用Percona XtraBackup创建备份

另一个选择:

mkdir -p /data/backups/my_backup2

innobackupex --user=bekupuser --password=mypassword /data/backups/my_backup2

or

innobackupex --user=bekupuser --password=mypassword /data/backups/

注意:

如果没有目录' my_backup2 ',您将根据“ 时间戳 ”格式获取您的目录。

结果:

替代备份命令的结果。

B.使用Innobackupex准备完整备份

创建新的备份后,数据还没有准备好进行还原。 还有一个步骤,所以数据准备好恢复。 我们需要“准备阶段”,以便可以恢复数据。

使用innobackupex使用选项--apply-log准备备份到备份目录'/ data / backups / my_backup ':

innobackupex --apply-log /data/backups/my_backup

在继续之前,请确保该过程完整无误。

准备完整备份

如果你有足够的内存和大的数据库,那么你可以使用--use-memory = memorynumber选项来告诉innobackupex它可能使用多少内存:

innobackupex --apply-log --use-memory=4G /data/backups/my_backup

数据准备好恢复了。 我们可以在同一台服务器或运行MariaDB的另一台服务器上进行恢复。

第4步 - 使用Innobackupex恢复完全备份

在这一步中,我们将使用innobackupex恢复MySQL实例。

在恢复MySQL实例之前,我们需要使用systemctl命令停止MySQL进程(MariaDB进程名为mysql):

systemctl stop mysql

备份旧的MySQL数据目录:

mkdir ~/mysql_old/
mv /var/lib/mysql/* ~/mysql_old/

接下来,使用innobackupex从完整备份恢复mysql实例:

innobackupex --copy-back /data/backups/my_backup

当您看到结果“ innobackupex:completed OK ”时,您已经成功恢复了MySQL实例。

现在将MySQL数据目录的所有者更改为mysql用户并重新启动服务:

chown -R mysql:mysql /var/lib/mysql
systemctl start mysql

恢复备份

MySQL实例已经使用percona-xtrabackup成功恢复。

参考