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 =备份目录,它将在备份过程中自动创建。 如果目录存在,您将收到一条错误消息。
另一个选择:
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成功恢复。