热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL基于LVM快照的备份恢复(临时)

目录1、数据库全备份2、准备LVM卷3、数据恢复到LVM卷4、基于LVM快照备份数据5、数据灾难恢复6、总结

目录
1、数据库全备份
2、准备LVM卷
3、数据恢复到LVM卷
4、基于LVM快照备份数据
5、数据灾难恢复
6、总结



写在前面:
测试环境中已安装有mysql 5.5.36数据库,但数据目录没有存放在LVM卷,此次要演示基于LVM的数据备份和恢复,所以就把mysql的数据先迁移到LVM上再做快照卷的备份。
如果innodb表基于LVM来做备份,那事务日志文件和数据文件要在同一个LVM的逻辑卷上,因为在同一时刻我们只能对一个逻辑卷做快照,如果事务日志与数据文件不在同一卷上,那做快照后会导致事务日志的事件与真正数据中提交的事务会不一致。

1、数据库全备份
先把现有的数据利用mysqldum工具进行全备份:
[root@mariadb ~]# mysqldump -uroot -p123456 --lock-all-tables --flush-logs --events --routines --master-data=2 --all-databases /backup/data_dir/fulldata-`date +%F` .sql 
[root@mariadb ~]# ls /backup/data_dir/ 
fulldata-2015-04-14.sql 
[root@mariadb ~]# service mysqld stop  #停止mysql



2、准备LVM卷

事先准备好两个卷作为LVM的PV:
[root@mariadb ~]# fdisk -l 
Disk /dev/sda: 53.7 GB, 53687091200 bytes 
255 heads, 63 sectors/track, 6527 cylinders 
Units = cylinders of 16065 * 512 = 8225280 bytes 
Sector size (logical/physical): 512 bytes / 512 bytes 
I/O size (minimum/optimal): 512 bytes / 512 bytes 
Disk identifier: 0x000bf287 
  Device Boot      Start        End      Blocks  Id  System 
/dev/sda1  *          1          13      102400  83  Linux 
Partition 1 does not end on cylinder boundary. 
/dev/sda2              13        1926    15360000  83  Linux 
/dev/sda3            1926        2056    1048576  82  Linux swap / Solaris 
/dev/sda4            2056        6527    35916127+  5  Extended 
/dev/sda5            2056        2709    5248011  8e  Linux LVM 
/dev/sda6            2710        3363    5253223+  8e  Linux LVM

创建PV:
[root@mariadb ~]# pvcreate /dev/sda5 /dev/sda6 
  Physical volume "/dev/sda5" successfully created 
  Physical volume "/dev/sda6" successfully created

创建VG:
12 [root@mariadb ~]# vgcreate mygroup /dev/sda5 /dev/sda6 
  Volume group "mygroup" successfully created

创建LV:
[root@mariadb ~]# lvcreate -n mysqldata --size 3G mygroup  #大小设置为3GB 
  Logical volume "mysqldata" created

格式化LV并挂载:
[root@mariadb ~]# lvdisplay #显示逻辑卷的详细信息 
[root@mariadb ~]# mke2fs -t ext4 /dev/mygroup/mysqldata #格式化 
[root@mariadb ~]# blkid /dev/mygroup/mysqldata #获取UUID 
/dev/mygroup/mysqldata: UUID="f863e626-e34e-4207-b9cb-7fbb9c5b7f1e" TYPE="ext4"
[root@mariadb ~]# mkdir /mnt/mydata #创建挂载目录

在/etc/fstab文件中加入下边一行:
[root@mariadb ~]# vim /etc/fstab 
UUID=f863e626-e34e-4207-b9cb-7fbb9c5b7f1e /mnt/mydata  ext4  defaults 0 0 
[root@mariadb ~]# mount -a #重新挂载 
[root@mariadb ~]# mount 
/dev/sda2 on / type ext4 (rw) 
proc on /proc type proc (rw) 
sysfs on /sys type sysfs (rw) 
devpts on /dev/pts type devpts (rw,gid=5,mode=620) 
tmpfs on /dev/shm type tmpfs (rw) 
/dev/sda1 on /boot type ext4 (rw) 
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) 
/dev/mapper/mygroup-mysqldata on /mnt/mydata type ext4 (rw)

3、数据恢复到LVM卷

创建数据目录及权限设置:
[root@mariadb ~]# mkdir /mnt/mydata/data 
[root@mariadb ~]# chown -R mysql:mysql /mnt/mydata/data 
[root@mariadb ~]# vim /etc/my.cnf  #修改数据目录位置 
datadir = /mnt/mydata/data
[root@mariadb ~]# cd /opt/lamp/mysql55/ #切换到mysql的安装目录

初始化数据库:

[root@mariadb mysql55]# scripts/mysql_install_db --user=mysql --datadir=/mnt/mydata/data

修改datadir指向的目录:

[root@mariadb mysql55]# vim /etc/rc.d/init.d/mysqld 
datadir=/mnt/mydata/data

启动mysql,很奇怪,在我没有修改mysqld脚本文件中的datadir时也能正常启动:

[root@mariadb mysql55]# service mysqld start

接入mysql,修改接入密码导入备份数据:
mysql SET PASSWORD FOR ); 
mysql FLUSH PRIVILEGES; 
mysql source /backup/data_dir/fulldata-2015-04-14.sql 
mysql show databases;  #数据已恢复 
+--------------------+ 
| Database          | 
+--------------------+ 
| information_schema | 
| mydb1              | 
| mydb2              | 
| mysql              | 
| performance_schema | 
| test              | 
+--------------------+

4、备份数据库
4.1、准备备份目录
[root@mariadb mysql55]# mkdir -pv /backup/`date +%F`/{data,binlog} 
#以日期命令一个目录,在内还创建data和binlog目录,分别用来存放数据和二进制日志信息

4.2、修改变量、请求全表读锁
mysql SET GLOBAL sync_binlog=1; #设置此变量为1,让每个事件尽可能同步到二进制日志文件里,以消耗IO来尽可能确保数据一致性 
mysql SHOW MASTER STATUS; #查看二进制日志和position,此信息保存在/backup/2015-04-14/binlog的binlog.txt里 
+------------------+----------+--------------+------------------+ 
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+------------------+----------+--------------+------------------+ 
| mysql-bin.000016 |  1068076 |              |                  | 
+------------------+----------+--------------+------------------+ 
1 row in set (0.00 sec) 
mysql FLUSH LOGS; #刷新日志 
mysql FLUSH TABLES WITH READ LOCK; #读锁请求到后不要关闭此mysql交互界面

在innodb表中,即使是请求到了读锁,但InnoDB在后台依然可能会有事务在进行读写操作,可用"mysql SHOW ENGINE INNODB STATUS;"查看后台进程的状态,等没有写请求后再做备份。
4.2、创建快照
以只读的方式创建一个1GB大小的快照卷data-snap:
[root@mariadb mysql55]# lvcreate --snapshot /dev/mygroup/mysqldata -n data-snap --size 1G --permission r

查看快照卷的详情(快照卷也是LV):
[root@mariadb mysql55]# lvdisplay

4.3、解除锁定
回到锁定表的mysql交互式界面,解锁:
mysql UNLOCK TABLES; 
mysql SET GLOBAL sync_binlog=0;  #此参数可以根据服务器磁盘IO的负载来调整

4.4、挂载快照卷并备份数据
[root@mariadb ~]# mount /dev/mygroup/data-snap /tmp/  #挂载快照卷 
[root@mariadb ~]# ls /tmp/data/ 
ibdata1  ib_logfile0  ib_logfile1  mariadb.pid  mydb1  mydb2  mysql  performance_schema  test
[root@mariadb mysql55]# cp -aR /tmp/data /backup/2015-04-14/data/  #备份数据 
[root@mariadb mysql55]# ls /backup/2015-04-14/data/data/ 
ibdata1  ib_logfile0  ib_logfile1  mariadb.pid  mydb1  mydb2  mysql  performance_schema  test

4.5、释放快照卷

[root@mariadb ~]# umount /tmp/ 
[root@mariadb ~]# lvremove /dev/mygroup/data-snap 
Do you really want to remove active logical volume data-snap? [y/n]: y 
  Logical volume "data-snap" successfully removed

5、数据灾难恢复

破坏数据,把数据目录下的所有文件都删除:
[root@mariadb mysql55]# rm -rf /mnt/mydata/data/* 
[root@mariadb mysql55]# service mysqld stop  #PID文件也被删掉了,无法正常停止服务 
 ERROR! MySQL server PID file could not be found! 
[root@mariadb mysql55]# killall mysqld

把备份数据copy到数据目录:
[root@mariadb mysql55]# cp -Ra /backup/2015-04-14/data/data/* /mnt/mydata/data/ 
[root@mariadb mysql55]# ll /mnt/mydata/data/  #确认各文件的权限是否为mysql 
启动服务: 
[root@mariadb mysql55]# service mysqld start 
Starting MySQL SUCCESS!

检查数据是否已恢复:
mysql SHOW DATABASES; 
+--------------------+ 
| Database          | 
+--------------------+ 
| information_schema | 
| mydb1              | 
| mydb2              | 
| mysql              | 
| performance_schema | 
| test              | 
+--------------------+ 
6 rows in set (0.00 sec) 
mysql SELECT * FROM mydb1.tb1; 
+----+------+------+ 
| id | name | age  | 
+----+------+------+ 
|  1 | tom  |  10 | 
|  2 | jack |  20 | 
|  3 | zcj  |  18 | 
+----+------+------+

6、总结

基于LVM的数据备份方案几乎实现了热备,只是在请求读锁时会影响线上的业务,一旦当读锁请求到,创建快照几乎是瞬间完成,快照卷创建好后就可解除锁定,而备份就像复制或归档文件一样简单。数据恢复时只需要关闭mysql进程,把备份的数据复制到相应的数据目录,确保数据目录权限正确,启用服务即可,由于是直接复制的数据文件,所以索引不用重建。

 
 
 
在LVM中设置精简资源调配卷(第四部分) 
使用条块化I/O管多个LVM磁盘(第五部分) 


   



推荐阅读
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文详细介绍了cisco路由器IOS损坏时的恢复方法,包括进入ROMMON模式、设置IP地址、子网掩码、默认网关以及使用TFTP服务器传输IOS文件的步骤。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文介绍了sqlserver云存储和本地存储的区别,云存储是将数据存储在网络上,方便查看和调用;本地存储是将数据存储在电脑磁盘上,只能在存储的电脑上查看。同时提供了几种启动sqlserver的方法。此外,还介绍了如何导出数据库的步骤和工具。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
author-avatar
三喜金融
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有