实现LVM逻辑卷数据库备份还原,二进制日志文件分离存放

首先需要做到的是就是数据库文件,以及二进制日志文件全部放在单独的逻辑卷存储。

实现LVM逻辑卷,数据,二进制日志文件分离存放

一,创建逻辑卷步骤

(1),创建新分区

1,查看分区情况看看还剩多少空间

    [[email protected] backup]# lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0  200G  0 disk
    ├─sda1   8:1    0    1G  0 part /boot
    ├─sda2   8:2    0   50G  0 part /
    ├─sda3   8:3    0    2G  0 part [SWAP]
    └─sda4   8:6    0    1G  0 part /app
    sr0     11:0    1  8.1G  0 rom
#我这个磁盘200G,用了54G,还剩146G

2,创建1个新的分区,当做逻辑卷

    fdisk /dev/sda
    p  查看分区列表
    n  创建分区
    根据需要填写
    t  修改id为逻辑卷
    8e
    p  再次确认

3,同步分区

    partprobe #centos7这条命令就可搞定

4,查看分区是否出来

    [[email protected] ~]# lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0  200G  0 disk
    ├─sda1   8:1    0    1G  0 part /boot
    ├─sda2   8:2    0   50G  0 part /
    ├─sda3   8:3    0    2G  0 part [SWAP]
    ├─sda4   8:4    0  512B  0 part
    ├─sda5   8:5    0   20G  0 part /app
    └─sda6   8:6    0   10G  0 part
    sr0     11:0    1  8.1G  0 rom  

(2),创建逻辑卷

1,将新分区加入PV卷

    #加入pv卷
        [[email protected] ~]#pvcreate /dev/sda6
    #查看PV卷
        [[email protected] ~]#pvs
        PV         VG Fmt  Attr PSize  PFree
        /dev/sda6     lvm2 ---  10.00g 10.00g

2,将PV卷加入卷组

    #加入卷组
        [[email protected] ~]#vgcreate vg0 /dev/sda6
    #查看卷组
        [[email protected] ~]# vgs
        VG  #PV #LV #SN Attr   VSize   VFree
        vg0   1   0   0 wz--n- <10.00g <10.00g

3,创建存放数据以及二进制日志文件的逻辑卷

    #1,创建存放数据的逻辑卷
    lvcreate -n mysqldata -L 3G vg0
    #2,创建存放二进制日志文件的逻辑卷
    lvcreate -n binlog -L 2G vg0
    #查看创建情况
    [[email protected] ~]# lvs
    LV        VG  Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
    binlog    vg0 -wi-a----- 2.00g
    mysqldata vg0 -wi-a----- 3.00g
    "注意:PV卷的空间一定不要用完,因为需要有存放快照的空间"

4,创建文件系统

    mkfs.xfs /dev/vg0/mysqldata
    mkfs.xfs /dev/vg0/binlog

(3),开机自动挂载

1,创建两个文件分别当挂载点

    mkdir -pv /mysql/data
    mkdir -pv /mysql/binlog

2,修改/etc/fstab文件

    blkid 查看两个分区的UUID
    #将两分区按照这个顺序填写:UUID 挂载点 文件系统 defaults 0 0 即可
    vim /etc/fstab
    UUID=d30a59eb-9a20-4376-a6ed-d47cc4d66d05  /mysql/data            xfs     defaults        0 0
    UUID=ef9c6374-a9e0-457f-895a-bf456be0ed96 /mysql/binlog           xfs     defaults        0 0

3,挂载

    [[email protected] ~]# mount -a
    [[email protected] ~]# lsblk
    NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda                 8:0    0  200G  0 disk
    ├─sda1              8:1    0    1G  0 part /boot
    ├─sda2              8:2    0   50G  0 part /
    ├─sda3              8:3    0    2G  0 part [SWAP]
    ├─sda4              8:4    0  512B  0 part
    ├─sda5              8:5    0   20G  0 part /app
    └─sda6              8:6    0   10G  0 part
      ├─vg0-mysqldata 253:0    0    3G  0 lvm  /mysql/data
      └─vg0-binlog    253:1    0    2G  0 lvm  /mysql/binlog
    sr0                11:0    1  8.1G  0 rom

二,实现数据以及二进制日志分离

1,修改两个目录权限

    chown -R mysql.mysql /mysql/

2,修改mysql配置文件

    vim /etc/my.cnf
    在[mysqld]这个语句块下修改这两项
    [mysqld]
    datadir=/mysql/data
    log_bin=/mysql/binlog/mysql-binlog

3,重启mariadb服务

    systemctl restart mariadb
    systemctl enable  mariadb

4,查看端口是否打开

    [[email protected] ~]# ss -ntl |grep 3306
    LISTEN     0      50           *:3306                     *:*  

备份步骤

一,记录二进制日志当前备份位置

1,锁表防止备份时数据变动

    flush tables with read lock;

2,记录二进制日志文件及事件位置

#1,刷新二进制日志
    flush logs;
#2,查看当前二进制日志位置
    show master status;
    MariaDB [(none)]> show master logs;
    +---------------------+-----------+
    | Log_name            | File_size |
    +---------------------+-----------+
    | mysql-binlog.000001 |     32644 |
    | mysql-binlog.000002 |  31231291 |
    | mysql-binlog.000003 |       245 |
    +---------------------+-----------+
    3 rows in set (0.00 sec)

3,将二进制日志文件当前备份位置存入文件保存,用作以后恢复查看

#1,创建存放备份数据,以及日志的目录
    [[email protected] data]#mkdir  /backup/binlog
    [[email protected] data]#mkdir  /backup/data
#2,二进制日志文件当前备份位置存放至/backup/binlog目录里
    [[email protected] ~]#mysql -uroot -p -e  ‘show master logs‘ >/mysql/binlog/pos-`date +%F`.log

    [[email protected] ~]# cat /backup/binlog/pos-2018-03-07.log
    Log_name    File_size
    mysql-binlog.000001 32644
    mysql-binlog.000002 31231291
    mysql-binlog.000003 245

二,创建逻辑卷快照

#1,创建快照
    [[email protected] data]#lvcreate -L 3G -s -p r -n mysqldata-snapshoot /dev/vg0/mysqldata

命令解析:
    -L:指定逻辑卷大小
    -s:指定该逻辑卷是快照
    -p:指定权限,r表示只有读权限
    -n:指定该逻辑卷名字
     /dav/vg0/mysqldata:表示针对该逻辑卷创建快照
#2,查看快照信息
    [[email protected] ~]# lvdisplay
     --- Logical volume ---
      LV Path                /dev/vg0/mysqldata-snapshoot
      LV Name                mysqldata-snapshoot
      VG Name                vg0
      LV UUID                CcaFOb-xLPT-pxh7-K9nP-MQP7-WFDm-gvPthA
      LV Write Access        read only
      LV Creation host, time ansible-7, 2018-03-07 14:30:04 +0800
      LV snapshot status     active destination for mysqldata
      LV Status              available
      # open                 0
      LV Size                3.00 GiB
      Current LE             768
      COW-table size         3.00 GiB
      COW-table LE           768
      Allocated to snapshot  0.00%
      Snapshot chunk size    4.00 KiB
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     8192
      Block device           253:4

三,释放数据库锁,恢复用户访问

    unlock  tables;

四,挂载快照逻辑卷

#1,创建临时挂载目录
    [[email protected] data]#mkdir  /snapshoot
#2,挂载
    [[email protected] data]#mount -o nouuid,norecovery /dev/vg0/mysqldata-snapshoot /snapshoot
    "注意:xfs文件系统快照挂载需要指定nouuid,norecovery这两个选项,ext4不需要"

五,拷贝数据,达到备份目的

    tar cvf  /backup/data/all-`date +%F`.tar /snapshoot

六,备份完成删除快照逻辑卷

#1,取消挂载
    [[email protected] data]#umount  /snapshoot
#2,删除快照逻辑卷
    [[email protected] data]# lvremove /dev/vg0/mysqldata-snapshoot
    Do you really want to remove active logical volume vg0/mysqldata-snapshoot? [y/n]: y
    Logical volume "mysqldata-snapshoot" successfully removed

三,破坏数据库还原

(一),停止服务删除数据存放目录

    systemctl stop mariadb
    rm -rf /mysql/data/*

(二),恢复全备份数据

#1,解压缩
    tar vxf /backup/data/all-2018-03-07.tar
#2,复制snapshoot目录下的所有文件至/mysql/data/目录下
    cp -a snapshoot/* /mysql/data/

(三),用二进制日志还原至最新状态

1,查看之前存放在文件里的备份位置

    cat /backup/binlog/pos-2018-03-07.log
    Log_name    File_size
    mysql-binlog.000001 32644
    mysql-binlog.000002 31231291
    mysql-binlog.000003 245
之前备份的位置是mysql-binlog.000002文件的 31231291位置
所以我们需要将mysql-binlog.000002日志文件拷贝出来

2,重新生成二进制日志文件,

    MariaDB [(none)]>flush logs

3,查看当前二进制日志文件位置

MariaDB [(none)]> show master logs;
    +---------------------+-----------+
    | Log_name            | File_size |
    +---------------------+-----------+
    | mysql-binlog.000001 |     32644 |
    | mysql-binlog.000002 |    312312 |
    | mysql-binlog.000003 |   1212312 |
    | mysql-binlog.000004 |       245 |
    +---------------------+-----------+
    3 rows in set (0.00 sec)

4,拷贝备份之后的相关二进制日志文件

    cp -a /mysql/binlog/mysql-binlog.000003 /backup/binlog/
    cp -a /mysql/binlog/mysql-binlog.000004 /backup/binlog/

5,将之前备份之后的内容取出来

    mysqlbinlog --start-position=245 mysql-binlog.000003 >bin.sql
    mysqlbinlog mysql-binlog.000004 >> bin.sql

(四),启动服务

    systemctl start mariadb

(五),暂停记录二进制日志功能

    set sql_log_bin=0;

(六),恢复二进制日志里的数据

    MariaDB [(none)]> source /backup/binlog/bin.sql

(七),开启记录二进制日志功能

    set sql_log_bin=1;

(八),恢复完了就可把拷贝的二进制日志文件删掉了,以免影响下次恢复

原文地址:http://blog.51cto.com/13598893/2084438

时间: 2024-10-11 23:17:07

实现LVM逻辑卷数据库备份还原,二进制日志文件分离存放的相关文章

Mysql数据库理论基础之十三 ---- LVM逻辑卷快照备份

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

实验:模拟场景中误删除mysql数据库表,然后使用全备份以及二进制日志文件恢复操作

一.实验环境: 1.准备两台虚拟机,一台用于破坏数据库,一台用于还原,两台在同一个网络 2.两台最小化安装centos 7系统,并直接yum安装maraidb数据库 3.准备一个测试数据库文件,例如,hellodb_innodb.mysql 测试库里面最少有两个表. 二.实验步骤: 1.开启数据库的二进制日志功能 vim /etc/my.cnf[mysqld] 下面加入log-bin 表示开启二进制日志功能 2.完全备份 mysqldump -A -F --master-data=2 --sin

数据库备份还原,日志清理代码

--数据库被占用无法还原解决方法: --1,设置数据库在单用户模式下工作. --设置方法:在需要还原的数据库上右击,在右键菜单命令上选择"属性"- >"选项"- >"状态"- >"限制访问"- >"Single".这是SQLSERVER2005的菜单命令,其它版本请自己查找. --数据库脱机在连机 USE master GO ALTER DATABASE DB SET OFFLINE

MariaDB数据库备份恢复之(二): 基于LVM逻辑卷快照实现数据库的几乎热备

数据库物理备份就是拷贝数据库数据文件,但是需要考虑的问题也有: 需要确保数据文件的时间一致性? 1.冷备:停止数据库,实现物理备份; 但是一个真正生产数据库不能实现离线操作,那我们就可以通过数据库的主从复制实现: 主数据库服务器的数据同步到从服务器,而我们在主从复制中从服务器停止数据库是不会影响业务的,就能够实现物理备份:备份完成从服务器上线后会自动从主服务器同步数据:这是一种理想的备份方案: 2.第二种方法是基于LVM2的快照实现数据库的备份,可以实现几乎热备, 前提数据库数据必须放置在物理卷

Linux命令:MySQL系列之十四--MySQL备份与还原(LVM逻辑卷)

通过LVM逻辑卷实现MySQL备份及还原(几乎热备):        前提: 1.数据文件要在逻辑卷上: 2.此逻辑卷所在卷组必须有足够的空间使用快照卷: 3.数据文件和事务日志要在同一个逻辑卷上: 步骤: 1.打开会话,施加读锁,锁定所有表: mysql> FLUSH TABLES WITH READ LOCK;  #刷新表并对表施加读锁 mysql> FLUSH LOGS;   #滚动日志               2.通过另一个终端,保存二进制日志文件及相关位置信息: [[email 

使用LVM快照进行数据库备份

使用mysqldump备份时,如果存储引擎为MyISAM,则只能实现温备份,并需使用选项--lock-all-tables锁定所有表.如果存储引擎为InnoDB,则加上--single-transaction选项,可以实现热备.使用mysqldump进行逻辑备份,还存在如下问题:浮点数据丢失精度: 备份出的数据更占用空间:不过可压缩后以大大节省空间 不适合对大数据库(如一个库超过10G)做完全备份 另外对InnoDB而言,需要使用mysql> FLUSH TABLES WITH READ LOC

xtrabackup进行MySQL数据库备份/还原

http://hongge.blog.51cto.com/ 使用xtrabackup进行MySQL数据库备份 前面介绍mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用mysqldump备份就不太适合了. 这时就需要一种好用又高效的工具,xtrabackup就是其中一款,号称免费版的InnoDB HotBackup. Xtrabackup实现是物理备份,而且是物理热备 目前主流的有两个工

Linux入门之磁盘管理(9)LVM逻辑卷案例

Linux入门之磁盘管理(9)LVM逻辑卷案例 案例介绍阶段(1): 创建一个由两个物理卷组成的大小未20G的卷组myvg,要求其PE大小为16M:而在此卷组中创建一个大小未5G的逻辑卷lvtest,此逻辑卷要能在开机后自动挂载至/mnt/lvtest目录,且支持ACL功能. 1.准备工作 #这里我们分别从两个磁盘选择10G来准备组合为PV [[email protected] ~]# fdisk -l | grep -o '/.*B' /dev/sda: 21.5 GB /dev/sdb: 2

第八章 磁盘和文件系统管理LVM逻辑卷管理

                      第八章LVM逻辑卷管理 LVM机制的基本概念 Pv(Physical Volume,物理卷) 整个硬盘,或使用fdisk等工具建立的普通分区 包括许多默认4MB大小的PE(Physical Extent,基本单元) VG(Volume Group,卷组) 一个或多个物理卷组合而成的整体 LV(Logical Volume,逻辑卷) 从卷组中分割出的一块空间,用于建立文件系统 (创建物理卷--创建卷组--从卷组中创建逻辑卷) 相关命令 pvcreate