实验环境
- 操作系统:CentOS 8 或其他使用
systemd
和LVM
的 Linux 发行版。 - MySQL 版本:MySQL 8.0
实验步骤
1. 准备 LVM 卷
- 首先,确保你已经有一个存储 MySQL 数据的逻辑卷。如果没有,可以按照以下步骤创建一个:
# 检查磁盘信息
fdisk -l# 假设使用 /dev/sda 磁盘,创建物理卷
pvcreate /dev/sda# 创建卷组
vgcreate vg_mysql /dev/sda# 创建逻辑卷
lvcreate -n lv_mysql -L 4G vg_mysql# 格式化逻辑卷为 ext4 文件系统
mkfs.ext4 /dev/vg_mysql/lv_mysql# 创建挂载点
mkdir /var/lib/mysql# 挂载逻辑卷
mount /dev/vg_mysql/lv_mysql /var/lib/mysql# 确保开机自动挂载,添加到 /etc/fstab 文件
echo "/dev/vg_mysql/lv_mysql /var/lib/mysql ext4 defaults 0 0" >> /etc/fstab
2. 安装和配置 MySQL (安装在了lvm卷中 )
- 安装 MySQL 并将数据存储在
/var/lib/mysql
中:
dnf install mysql-server -y
systemctl start mysqld
systemctl enable mysqld
3. 创建测试数据
- 登录 MySQL 并创建一些测试数据:
mysql -u root -p
- 输入密码,然后在 MySQL 中执行以下 SQL 语句:
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),email VARCHAR(100)
);
INSERT INTO test_table (name, email) VALUES ('Alice', 'alice@example.com'), ('Bob', 'bob@example.com');
4. 创建 LVM 快照
- 创建一个 LVM 快照,用于备份:
# 刷新表锁,创建快照,解锁表
mysql -u root -p -e "flush tables with read lock; system lvcreate -n lv_mysql_snapshot -L 1G -s /dev/vg_mysql/lv_mysql; unlock tables;"# 创建挂载点
mkdir /mnt/mysql_snapshot# 挂载快照
mount /dev/vg_mysql/lv_mysql_snapshot /mnt/mysql_snapshot
5. 备份数据
- 使用
rsync
或tar
备份数据:
# 使用 rsync 备份
rsync -avz /mnt/mysql_snapshot/ /backup/mysql_snapshot_$(date +%Y%m%d)/# 或者使用 tar 备份
tar czf /backup/mysql_snapshot_$(date +%Y%m%d).tar.gz /mnt/mysql_snapshot
6. 清理快照
- 完成备份后,清理快照:
# 卸载快照
umount /mnt/mysql_snapshot# 删除快照
lvremove -f /dev/vg_mysql/lv_mysql_snapshot
7. 恢复数据(可选)
- 假设你需要恢复数据,你可以使用之前的备份文件:
# 假设使用 tar 备份,先解压
tar xzf /backup/mysql_snapshot_20250117.tar.gz -C /tmp/restore# 停止 MySQL 服务
systemctl stop mysqld# 清空当前数据目录
rm -rf /var/lib/mysql/*# 复制备份数据到数据目录
cp -r /tmp/restore/mnt/mysql_snapshot/* /var/lib/mysql/# 更改权限
chown mysql:mysql -R /var/lib/mysql# 启动 MySQL 服务
systemctl start mysqld
实验总结
- 步骤 1:创建 LVM 逻辑卷,将其格式化为 ext4 并挂载到
/var/lib/mysql
,用于存储 MySQL 数据。 - 步骤 2:安装和启动 MySQL 服务。
- 步骤 3:创建测试数据,验证 MySQL 数据库的正常使用。
- 步骤 4:使用
flush tables with read lock
锁定表,创建 LVM 快照,解锁表,然后挂载快照。 - 步骤 5:使用
rsync
或tar
备份快照中的数据。 - 步骤 6:卸载和删除快照,完成备份操作。
- 步骤 7:可选的恢复数据步骤,展示如何使用备份文件恢复数据。
注意事项
- 在创建快照时,确保快照的大小足够存储在创建快照期间发生变化的数据。
- 操作过程中,确保有足够的权限,通常需要使用
root
权限或sudo
。 - 备份的频率和时间应该根据实际情况确定,以确保数据的安全性和可恢复性。
通过上述实验,你可以实现一个简单的 LVM 快照备份 MySQL 数据库的过程,以保护数据免受意外数据丢失或损坏的影响。
以下是上述实验的脚本形式,你可以将其保存为 lvm_snapshot_backup.sh
并运行:
#!/bin/bash# 刷新表锁,创建快照,解锁表
mysql -u root -p -e "flush tables with read lock; system lvcreate -n lv_mysql_snapshot -L 1G -s /dev/vg_mysql/lv_mysql; unlock tables;"# 创建挂载点
mkdir -p /mnt/mysql_snapshot# 挂载快照
mount /dev/vg_mysql/lv_mysql_snapshot /mnt/mysql_snapshot# 使用 rsync 备份
rsync -avz /mnt/mysql_snapshot/ /backup/mysql_snapshot_$(date +%Y%m%d)/# 或者使用 tar 备份
# tar czf /backup/mysql_snapshot_$(date +%Y%m%d).tar.gz /mnt/mysql_snapshot# 卸载快照
umount /mnt/mysql_snapshot# 删除快照
lvremove -f /dev/vg_mysql/lv_mysql_snapshot
你可以使用以下方式运行该脚本:
chmod +x lvm_snapshot_backup.sh
./lvm_snapshot_backup.sh
这个实验可以帮助你了解如何使用 LVM 快照备份 MySQL 数据库,并且在需要时可以使用备份文件恢复数据,确保数据的安全和完整性。请根据实际情况调整用户名、密码、设备名称、备份目录等信息。