这篇文章主要介绍了MySQL备份与恢复之真实环境使用冷备,需要的朋友可以参考下

在上一篇文章(MySQL备份与恢复之冷备)中,我们提到了冷备。但是有个问题,我们存储的数据文件是保存在当前本地磁盘的,如果这个磁盘挂掉,那我们存储的数据不就丢失了,这样备份数据不就功亏一篑,劳而无功。所以真实环境中我们多准备几块磁盘,然后再在这些磁盘上搭建LVM,把MySQL的数据目录挂载到LVM上,这样数据就不是存储在当前磁盘上,就可以保证数据的安全性。

示意图

真实环境使用冷备模拟

第一步,需要提前规划好磁盘,这里做模拟,添加两磁盘

第二步,对磁盘进行分区

[root@serv01 ~]# fdisk /dev/sdb

[root@serv01 ~]# fdisk /dev/sdc

[root@serv01 ~]# ll /dev/sd[bc]1

brw-rw----. 1 root disk 8, 17 Sep 10 18:06 /dev/sdb1

brw-rw----. 1 root disk 8, 33 Sep 10 18:09 /dev/sdc1

第三步,yum安装lvm2

[root@serv01 ~]# yum install lvm2 -y

第四步,创建物理卷

[root@serv01 ~]# pvcreate /dev/sdb1 /dev/sdc1

Physical volume "/dev/sdb1" successfully created

Physical volume "/dev/sdc1" successfully created

第五步,创建卷组

[root@serv01 ~]# vgcreate data /dev/sdb1 /dev/sdc1

Volume group "data" successfully created

第六步,创建逻辑卷

[root@serv01 ~]# lvcreate -L 2G -n mydata data

Logical volume "mydata" created

第七步,格式化磁盘

[root@serv01 ~]# mkfs.ext4 /dev/data/mydata

mke2fs 1.41.12 (17-May-2010)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

131072 inodes, 524288 blocks

26214 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=536870912

16 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912

Writing inode tables: done

Creating journal (16384 blocks): done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 28 mounts or

180 days, whichever comes first. Use tune2fs -c or -i to override.

第八步,冷备

[root@serv01 ~]# ls /usr/local/mysql/data/

crm ib_logfile0 mysql-bin.000001 mysql-bin.000005 mysql-bin.000009 mysql-bin.000013 mysql-bin.index test

game ib_logfile1 mysql-bin.000002 mysql-bin.000006 mysql-bin.000010 mysql-bin.000014 performance_schema

hello larrydb mysql-bin.000003 mysql-bin.000007 mysql-bin.000011 mysql-bin.000015 serv01.host.com.err

ibdata1 mysql mysql-bin.000004 mysql-bin.000008 mysql-bin.000012 mysql-bin.000016 serv01.host.com.pid

[root@serv01 opt]# tar -cvPzf mysql01.tar.gz /usr/local/mysql/data/

第九步,删除数据库文件

[root@serv01 ~]# rm -rf /usr/local/mysql/data/*

第十步,挂载

[root@serv01 ~]# mount /dev/data/mydata /usr/local/mysql/data/

[root@serv01 ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda2 9.7G 2.4G 6.8G 27% /

tmpfs 188M 0 188M 0% /dev/shm

/dev/sda1 194M 25M 160M 14% /boot

/dev/sda5 4.0G 160M 3.7G 5% /opt

/dev/sr0 3.4G 3.4G 0 100% /iso

/dev/mapper/data-mydata

2.0G 67M 1.9G 4% /usr/local/mysql/data

第十一步,将挂载信息写入配置文件

[root@serv01 opt]# echo "/dev/mapper/data-mydata /usr/local/mysql/data ext4 defaults 1 2" >> /etc/fstab

[root@serv01 opt]# tail -n1 /etc/fstab

/dev/mapper/data-mydata /usr/local/mysql/data ext4 defaults 1 2

第十二步,停掉数据库

[root@serv01 ~]# /etc/init.d/mysqld stop

ERROR! MySQL server PID file could not be found!

[root@serv01 ~]# ps -ef | grep mysqld

root 1055 1 0 18:05 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/serv01.host.com.pid

mysql 1332 1055 0 18:05 ? 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/serv01.host.com.err --pid-file=/usr/local/mysql/data/serv01.host.com.pid --socket=/tmp/mysql.sock --port=3306

root 1885 1490 0 18:18 pts/0 00:00:00 grep mysqld

[root@serv01 ~]# pkill -9 mysql

[root@serv01 ~]# ps -ef | grep mysqld

root 1888 1490 0 18:18 pts/0 00:00:00 grep mysqld

[root@serv01 ~]# chown mysql.mysql /usr/local/mysql/data/ -R

[root@serv01 opt]# ll /usr/local/mysql/data/

total 0

[root@serv01 opt]# ll /usr/local/mysql/data/ -d

drwxr-xr-x. 2 mysql mysql 4096 Sep 10 18:17 /usr/local/mysql/data/

第十三步,恢复数据

[root@serv01 opt]# tar -xPvf mysql01.tar.gz

第十四步,启动数据库,登录MySQL,然后查看数据是否丢失

[root@serv01 opt]# /etc/init.d/mysqld start

Starting MySQL SUCCESS!

[root@serv01 ~]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.5.29-log Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use larrydb;

Database changed

mysql> show tables;

+-------------------+

| Tables_in_larrydb |

+-------------------+

| class |

| stu |

+-------------------+

2 rows in set (0.00 sec)

mysql> select * from class;

+------+--------+

| cid | cname |

+------+--------+

| 1 | linux |

| 2 | oracle |

+------+--------+

2 rows in set (0.01 sec)

mysql> select * from stu;

+------+---------+------+

| sid | sname | cid |

+------+---------+------+

| 1 | larry01 | 1 |

| 2 | larry02 | 2 |

+------+---------+------+

2 rows in set (0.00 sec)

第十五步,使用LVS的快照功能创建快照,快照不需要格式化。

[root@serv01 opt]# lvcreate -L 100M -s -n smydata /dev/data/mydata

Logical volume "smydata" created

第十六步,挂载

[root@serv01 opt]# mount /dev/data/smydata /mnt

[root@serv01 opt]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda2 9.7G 2.4G 6.8G 27% /

tmpfs 188M 0 188M 0% /dev/shm

/dev/sda1 194M 25M 160M 14% /boot

/dev/sda5 4.0G 161M 3.7G 5% /opt

/dev/sr0 3.4G 3.4G 0 100% /iso

/dev/mapper/data-mydata

2.0G 98M 1.8G 6% /usr/local/mysql/data

/dev/mapper/data-smydata

2.0G 98M 1.8G 6% /mnt

第十七步,模拟数据丢失和验证快照的数据不会受本身数据的影响

[root@serv01 opt]# cd /mnt

[root@serv01 mnt]# ls

crm ib_logfile1 mysql-bin.000003 mysql-bin.000008 mysql-bin.000013 mysql-bin.index

game larrydb mysql-bin.000004 mysql-bin.000009 mysql-bin.000014 performance_schema

hello mysql mysql-bin.000005 mysql-bin.000010 mysql-bin.000015 serv01.host.com.err

ibdata1 mysql-bin.000001 mysql-bin.000006 mysql-bin.000011 mysql-bin.000016 serv01.host.com.pid

ib_logfile0 mysql-bin.000002 mysql-bin.000007 mysql-bin.000012 mysql-bin.000017 test

#进入数据目录,创建一个文件

[root@serv01 ~]# cd /usr/local/mysql/data/

[root@serv01 data]# touch aa01.txt

#进入快照挂载目录,发现没有这个文件

[root@serv01 mnt]# ls aa01.txt

ls: cannot access aa01.txt: No such file or directory

第十八步,备份数据

[root@serv01 mnt]# cd /databackup/

[root@serv01 databackup]# ll

total 976

-rw-r--r--. 1 root root 995761 Sep 10 17:47 mysql01.tar.gz

[root@serv01 databackup]# /etc/init.d/mysqld status

SUCCESS! MySQL running (2198)

[root@serv01 databackup]# tar -cvzf mysql02.tar.gz /mnt

[root@serv01 mnt]# rm -rf /usr/local/mysql/data/*

[root@serv01 mnt]# /etc/init.d/mysqld stop

ERROR! MySQL server PID file could not be found!

[root@serv01 mnt]# pkill -9 mysql

[root@serv01 mnt]# ps -ef | grep mysqld | grep grep -v

[root@serv01 mnt]# cd /usr/local/mysql/data/

[root@serv01 data]# ll

total 0

第十九步,恢复数据,启动数据库,登录MySQL,然后查看数据是否丢失

[root@serv01 data]# tar -xvf /databackup/mysql02.tar.gz

[root@serv01 data]# ls

mnt

[root@serv01 data]# cd mnt/

[root@serv01 mnt]# mv ./* ../

[root@serv01 mnt]# cd ..

[root@serv01 data]# ls

crm ib_logfile0 mysql mysql-bin.000004 mysql-bin.000008 mysql-bin.000012 mysql-bin.000016 serv01.host.com.err

game ib_logfile1 mysql-bin.000001 mysql-bin.000005 mysql-bin.000009 mysql-bin.000013 mysql-bin.000017 serv01.host.com.pid

hello larrydb mysql-bin.000002 mysql-bin.000006 mysql-bin.000010 mysql-bin.000014 mysql-bin.index test

ibdata1 mnt mysql-bin.000003 mysql-bin.000007 mysql-bin.000011 mysql-bin.000015 performance_schema

[root@serv01 data]# /etc/init.d/mysqld start

Starting MySQL SUCCESS!

[root@serv01 data]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.5.29-log Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use larrydb;

Database changed

mysql> select * from class;

+------+--------+

| cid | cname |

+------+--------+

| 1 | linux |

| 2 | oracle |

+------+--------+

2 rows in set (0.00 sec)

mysql> select * from stu;

+------+---------+------+

| sid | sname | cid |

+------+---------+------+

| 1 | larry01 | 1 |

| 2 | larry02 | 2 |

+------+---------+------+

2 rows in set (0.00 sec)

本文主要是在真实环境实现冷备份,保证数据的安全性,很有实用价值,有需要的朋友可以收藏起来。

相关文章

mysql冷备增量备份,MySQL备份与恢复之真实环境使用冷备(2)相关推荐

  1. Xtrabackup对mysql全备以及增量备份实施

    Xtrabackup对mysql全备以及增量备份实施 1.完全备份与恢复 本文使用的是centos5.8 64位系统,mysql 使用5.5.35. 如果要使用一个最小权限的用户进行备份,可基于以下: ...

  2. mysql差异备份数据库get shell_shell进行完整和增量备份mysql数据库

    shell进行完整和增量备份mysql数据库 文档介绍 本文档采用mysqldump 对数据库进行备份,mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL脚本文件,在不同的 MyS ...

  3. xtrabackup增量备份mysql +MHA

    http://blog.csdn.net/yanggd1987/article/category/2214421 https://www.centos.bz/2013/09/innobackupex- ...

  4. mysql 如何做增量备份_mysql 做增量备份

    首先在这里我要感谢我的同事 @mamiya_c3 哥的指教...QQQ 最近数据库的数据猛然增多,以前的每天一个正备份的方式显然压力越来越大,对备份的数据传输考验也随之加大,所以考虑改成每周二服务器维 ...

  5. mysql 如何做增量备份_mysql实现增量备份

    有点要注意 如果你误删了表 想通过这个恢复 必须恢复日志里面有创建表的日志 不然的话是无法回复的 ?就是必须是从你开始创建表的时候就已经记录日志了? 恢复到哪个位置 就按照哪个位置来计算 mysql ...

  6. mysql异地增量备份工具_利用 xtrabackup 工具实现增量备份 mysql(附脚本)

    1.安装 percona 源 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-rel ...

  7. NAS(openmediavault)双机热备(增量备份)

    openmediavault简称OMV,是一款非常好用的开源NAS,今天来做一下双机热备.此处说双机热备不准确,我采用的是在备用服务器上进行增量备份(出于安全性考虑,万一主服务器上的文件被删了呢).也 ...

  8. mysql 利用binlog增量备份,还原实例

    援引至以下链接. 1 blog.51yip.com/mysql/1042.html#more-1042 转载于:https://www.cnblogs.com/droko/archive/2011/1 ...

  9. crontab 备份mysql数据库_crontab定时备份mySQL数据库

    [sh] #!/bin/bash #Shell Command For Backup MySQL Database Everyday Automatically By Crontab USER=roo ...

最新文章

  1. [转载] 中华典故故事(孙刚)——08 狗咬吕洞宾
  2. php5.4版本不爆错误,PHP5.4以上版本出现的错误:Fatal error: Call-time pass-by-reference has been removed | 严佳冬...
  3. HTML中的列表和表格
  4. RocketMQ在面试中那些常见问题及答案+汇总
  5. servlet学习--Cookie小应用
  6. android 图片特征提取比对_判断ImageView当前的图片是哪个图片,然后比对资源文件的操作...
  7. mysql datetime类型按天查询_mysql 时间相关sql , 按天、月、季度、年等条件进行查询...
  8. vscode pyqt 环境搭建
  9. Kubernetes学习总结(16)—— Kubernetes 实战之部署 Redis 集群
  10. VB 几种打开文本文件速度对比
  11. Matlab画图线型、符号及颜色汇总
  12. 【信息系统项目管理师】第十三章 项目合同管理思维导图
  13. java时间处理--判断当前时间是否在一个时间区间内
  14. 安卓目标检测,目标跟踪,人流量计数
  15. Useing rvm
  16. Hbase slides
  17. python中import requests是什么意思_python中requests库使用方法详解
  18. 区块链学习一--初始比特币
  19. AD账号导入--dsadd user
  20. kali上装软件gedit_linux下的gedit命令使用方法与技巧

热门文章

  1. 题目3:文本文件单词的检索与计数(实现代码)
  2. VMP分析之VMP1.09虚拟化架构分析(二)
  3. MySql 查询小数保留两位小数
  4. 【Apache】 LXC 容器中重启 Apache 报错: Failed to set up mount namespacing: Permission denied
  5. 16、Java Swing JProgressBar:进度条组件
  6. 1.12 Java数组使用binarySearch()方法查找指定元素
  7. 【AC Saber】归并排序
  8. 数学问题->分数的四则运算
  9. Spring boot错误处理原理
  10. 【Java】6.5 抽象类