使用ubuntu上的percona xtrabackup设置mysql的热备份

时间:2020-03-05 15:31:57  来源:igfitidea点击:

备份数据库时,通常不希望停止数据库。
因为如果我们停止它,应用程序将无法使用。
但是如果我们不停止它,由于已备份的一半完成事务,备份可能会结束不一致和无用。
Percona提出了运行MySQL实例的增量备份的良好解决方案。
它们的热备份解决方案称为Percona XtraBackup,可用于备份MySQL,MariaDB和Perconaserver。
我需要运行InnoDB存储引擎。
在本文中,我们将展示如何在Ubuntu 16.O4上安装MySQL(当前版本5.7),并在运行时使用XtraBackup备份。
为了恢复备份,必须停止数据库服务器,并将数据删除数据。

安装mysql.

MySQL存在于Ubuntu存储库中,我们可以使用简单的APT命令安装它:

sudo apt install mysql-server mysql-client

它将提示我们从NCURSES环境中获取root密码。
输入并完成安装过程。

完成后,我们需要运行脚本来保护MySQL安装。

sudo mysql_secure_installation

在这里我们可以更改以前输入的密码,可以禁用远程登录,我们可以删除测试数据库。

我们也需要将用户添加到MySQL GRUP中,此命令将执行此操作

sudo gpasswd -a ubuntu mysql

用户名是ubuntu,我们可以为自己更改它。
要检查安装是否成功,可以尝试登录

mysql -u root -p

然后,我们创建一个我们将使用后者使用的数据库

CREATE DATABASE dbtobackup;

允许为此数据库创建用户并授予权限

GRANT ALL ON dbtobackup.* TO 'miki' IDENTIFIED BY 'password';

我们需要填充数据库,所以我们创建的第一件事是这样的表:

USE dbtobackup;
CREATE TABLE theitroad_staff (id INT, name VARCHAR(12), nickname VARCHAR(28));

然后我们将数据放入表中

INSERT INTO theitroad_staff (id,name,nickname) VALUES(1,"Bobin","Bobby");
INSERT INTO theitroad_staff (id,name,nickname) VALUES(2,"Mihajlo","Miki");

并检查我们创建的内容

mysql> SELECT * FROM theitroad_staff;

接下来备份工作,我们需要将此用户提供一些我们可能创建的数据库的权限

GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'miki'@'localhost';

我们还需要授予进程:

GRANT SELECT, PROCESS ON *.* TO 'miki'@'localhost';

接下来,我们可以退出MySQL并移动到Percona XtraBackup的设置。

使用percona xtrabackup备份数据库

让我们获取percona存储库的Deb文件

wget https://www.percona.com/redir/downloads/percona-release/ubuntu/latest/percona-release_0.1-4.xenial_all.deb

接下来我们将安装它

sudo dpkg -i percona-release_0.1-4.xenial_all.deb

更新源列表:

sudo apt update

并安装percona xtrabackup

sudo apt install percona-xtrabackup-24

请注意,较旧的版本小于2.4不起作用。

我们需要将权限设置为MySQL数据目录,该数据库是存储数据库的位置

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

我们需要创建备份目录,即我们将存储备份的位置

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

接下来,我们可以备份数据库:

innobackupex --user=miki --password=password --no-timestamp /data/backups/first_backup

此命令将为我们提供相当详细的输出,并且当它完成执行时,我们应该得到这样的内容:

161109 17:04:51 [00] ...done
xtrabackup: Transaction log of lsn (2540757) to (2540766) was copied.
161109 17:04:51 completed OK!

对于备份始终保持一致并准备好恢复,我们需要将事务日志应用于它。
这将有助于一致性和避免腐败。

innobackupex --apply-log /data/backups/

此命令还应该完成完成确定!输出如果已成功完成。

从XtraBackup还原数据库

为了恢复备份,我们必须停止数据库服务器并清空数据。

sudo systemctl stop mysql.service

经过服务停止后,我们要做的是悖论。
我们备份备份不会成功的情况的数据目录。
我们无法跳过此过程,因为数据目录需要为空。
因此,如果我们不想备份,只需删除。
我们现在将移动/备份:

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

备份将恢复复制备份命令

innobackupex --copy-back /data/backups/first_backup

恢复备份时,我们需要更改lib目录的permissionsto新副本

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

接下来,我们可以重新开始数据库服务器

sudo systemctl start mysql.service