使用lvm-snapshot备份mysql数据库

MySQL快照备份与恢复
本文详细介绍了一种MySQL数据库的备份方法,通过施加读锁、日志回滚及使用LVM快照技术来实现数据的一致性备份,并介绍了如何通过二进制日志进行数据恢复。

前提要求:

事务日志跟数据文件必须在同一个卷上;

创建快照卷之前,要请求MySQL的全局锁;在快照创建完成之后手动释放锁;

请求全局锁完成之后,做一次日志滚动;做二进制日志文件及位置标记(手动进行);


1、为数据施加读锁,滚动二进制日志文件并记录当前二进制文件起始时间段:

wKioL1RvSi_D4vfuAAFtKk5G1DY490.jpg

2、做快照;

wKiom1RvSoDiv_mdAABmlT0HCyc181.jpg

3、释放读锁:

wKioL1RvSx7D11F2AAAutnKi6FY453.jpg

4、挂载快照,将快照里面的数据复制出来,并删除快照:

[root@localhost mydata]# mount /dev/VG/mysql  /mnt/ -o ro

[root@localhost mydata]# mkdir /mysqlback

[root@localhost mydata]# cp -a /mnt/ /mysqlback/20141121

[root@localhost mydata]# umount /mnt/

[root@localhost mydata]# lvremove  /dev/VG/mysql

Do you really want to remove active logical volume mysql? [y/n]: y

  Logical volume "mysql" successfully removed


5、向一个表插入数据是数据发生改变,要在最后使用二进制日志恢复此信息。

mysql> INSERT INTo  newtb values('jack');

Query OK, 1 row affected (0.01 sec)

mysql> select * from newtb;

+------+

| Name |

+------+

| tom  |

| jack |

+------+

2 rows in set (0.00 sec)

6、结合之前记录的二进制日志开始时间导出成一个文件

[root@localhost mydata]# mysqlbinlog  --start-position=107  mysql-bin.000011  > /tmp/20141121.sql

7、将数据库停止,删除数据,尝试恢复数据

wKiom1RvTj2gy3E0AAJsJ4-Pw4g601.jpg

8、启动mysql服务并查看数据是否恢复:

wKiom1RvTrjR7p6fAAM4fDuE2lU178.jpg

9、使用二进制日志恢复后来创建的用户:

mysql> source /tmp/20141121.sql;

wKioL1RvUK7zh8yUAAA5lIuAUOw949.jpg


总结:

备份过程:

1、对MySQL数据库了施加读锁,防止在备份过程中有用户插入数据而导致备份后的数据不一致

2、回滚日志,使当前状态的数据做一个完整的备份,之后的数据用二进制日志恢复

3、使用SHOW MASTER STATUS命令记录日志的开始时间

4、使用lvcreate命令对lv做快照

5、去除读锁


恢复过程:

6、将创建好的lv快照挂载到目录,并将里面的数据复制出来

7、卸载快照、再删除快照

8、将从快照复制出来的数据复制到/data/mydata

9、使用mysqlbinlog结合之前记录的开始时间点导出需要的二进制数据为一个xx.sql文件

10、将sql文件导入数据库即完成整改恢复过程

欢迎大家访问我的个人网站 萌萌的IT人
### MySQL 数据库物理迁移方法 对于MySQL数据库的物理迁移,通常涉及将数据文件直接从一个服务器传输到另一个服务器。这种方法不仅快速而且高效,因为不需要解析SQL语句或重新创建表结构[^1]。 #### 使用 `mysqldump` 进行逻辑备份再恢复的方式不是物理迁移 尽管 `mysqldump` 是一种常用的工具来导出整个数据库的内容以便于移植,但这属于逻辑迁移而非物理迁移。此过程会生成一系列 SQL 命令用于重建源数据库中的对象及其数据,在目标环境中执行这些命令可以实现数据转移的目的,但它并不适用于追求速度和效率的场景下完成真正的物理迁移任务[^2]。 #### 利用 LVM 快照进行在线热迁移 Linux 环境下的 Logical Volume Manager (LVM) 提供了一种机制叫做快照(snapshot),这使得可以在不影响现有业务运行的情况下制作磁盘卷的一致性副本。通过先暂停 MySQL 的写入操作、创建 LVM 快照并立即解锁 I/O 操作,之后就可以安全地复制该快照至新位置作为新的启动介质的一部分[^3]。 ```bash # 创建 LVM 快照前需确保已安装配置好 LVM 并且有足够的空间可用 lvcreate --size 10G --snapshot --name mysqldata-snap /dev/vg/mysql-data-lv ``` #### 复制原始数据目录 如果两台机器的操作系统版本相同,并且都使用相同的存储引擎(例如 InnoDB),那么可以直接停止服务端进程(`mysql`)并将 `/var/lib/mysql/` 下的数据文件夹完整拷贝过去;重启目的地上相应的实例即可让其识别刚迁过来的新资料集[^4]。 ```bash # 关闭 MySQL 服务 sudo systemctl stop mysql.service # 将旧主机上的 MySQL 数据目录打包压缩后传送到新主机上解压覆盖同名路径下的内容 tar czf - /var/lib/mysql | ssh user@newhost "cd /var/lib && tar xzf -" ``` #### 使用 Percona XtraBackup 实现无停机时间迁移 Percona XtraBackup 是一款专为 Innodb 存储引擎设计的支持增量备份与即时恢复特性的开源软件包。借助它能够做到几乎零宕机时间内完成大型生产环境里复杂关系型数据库系统的整体搬迁工作。XtraBackup 可以在不锁定表格的前提下获取一致性的全量备份镜像,非常适合那些对连续性和性能有严格要求的应用场合[^5]。 ```bash # 安装 Percona XtraBackup yum install percona-xtrabackup-24 # 对应 CentOS/RHEL 用户 apt-get install percona-xtrabackup-24 # 针对 Debian/Ubuntu 发行版 # 执行完全备份 innobackupex --user=root --password=secret --no-timestamp /path/to/backupdir/ # 准备备份以供恢复 innobackupex --apply-log /path/to/backupdir/ ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值