使用ubuntu上的percona xtrabackup设置mysql的热备份
备份数据库时,通常不希望停止数据库。
因为如果我们停止它,应用程序将无法使用。
但是如果我们不停止它,由于已备份的一半完成事务,备份可能会结束不一致和无用。
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