Linux命令:MySQL系列之十四--MySQL备份与还原(LVM逻辑卷快照备份重要章节)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

通过LVM逻辑卷实现MySQL备份及还原(几乎热备):

 前提:

      1、数据文件要在逻辑卷上;

      2、此逻辑卷所在卷组必须有足够的空间使用快照卷;

      3、数据文件和事务日志要在同一个逻辑卷上;

步骤:

1、打开会话,施加读锁,锁定所有表;

       mysql> FLUSH TABLES WITH READ LOCK;  #刷新表并对表施加读锁

       mysql> FLUSH LOGS;   #滚动日志

2、通过另一个终端,保存二进制日志文件及相关位置信息;

 [root@lamp ~]# mysql -uroot -p -e 'SHOW MASTER STATUS\G' > /path/to/master.info  

#不登录mysql客户端直接查看位置状态,并保存位置信息到相应目录

3、创建快照卷

  [root@lamp ~]# lvcreate -L SIZE -s -p r -n LV_NAME /path/to/source_lv

#创建快照卷,-s:指定为所创建的是快照卷s=snapshot快照; -p:指定权限p=permission许可;

r:读权限;-n:指定快照名称;LV_NAME:快照名称;/path/to/source_lv:针对哪个逻辑卷目录

路径做快照;-L:指定快照卷大小。 

4、释放锁

      mysql> UNLOCK TABLES;   #释放锁

5、挂载快照卷,并备份;

     mount /dev/myvg/mydata-snap  /mnt -o ro  #挂载快照卷至/mnt目录,只读挂载

     cp -a ./* /backup/full-backup-2017-06-06/  #挂载后把数据复制到备份目录, -a:表示

复制文件的所有属性及内容,保留源文件的所有属性及权限

 6、删除快照卷                 

       umount /mnt  #备份完后卸载快照卷挂载的目录

       lvremove --force /dev/myvg/mydata-snap  #强制移除快照卷

      rm -rf mysql-bin.*    #把备份目录中的日志文件删除掉,节省空间

 7、增量备份二进制日志

mysqlbinlog --start-datetime='2017-06-06 10:11:02' mysql-bin.000005 mysql-bin.000006 > /backup/incremental-`date +%F-%H-%M-%S`.sql  #备份二进制日志,如果增量备份的二进制日志

含有2个或以上的日志文件,需要通过指定开始时间点来备份。


  实例:通过实际操作,实现lvm逻辑卷快照备份及恢复mysql操作;

        首先打开mysql客户端:         

[root@lamp ~]# mysql    #打开mysql客户端

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

Your MySQL connection id is 11

Server version: 5.5.28-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> FLUSH TABLES WITH READ LOCK;  #首先刷新表并施加读锁

Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH LOGS;   #滚动日志

Query OK, 0 rows affected (0.06 sec)

mysql> SHOW MASTER STATUS;  #查看二进制日志位置状态

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

mysql-bin.000005 |      107 |              |                  |

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

1 row in set (0.00 sec)

不要退出或关闭此mysql客户端,重新打开一个服务器终端,执行位置信息的保存;

[root@lamp ~]# mkdir /backup   #新建一个备份目录

[root@lamp ~]# mysql -e 'SHOW MASTER STATUS\G;' > /backup/master-`date +%F`.info  #不登录mysql客户端,直接通过mysql -e直接编辑数据库,把查看二进制日志位置状态保存至备份目录下

[root@lamp ~]# ls /backup/

master-2017-06-06.info

对mysql数据目录执行快照(所以说通过逻辑卷备份数据库,前提必须是数据文件存放在逻辑卷上)

[root@lamp ~]# lvcreate -L 50M -s -p r -n mydata-snap /dev/myvg/mydata  #对/dev/myvg/mydata逻辑卷做快照,大小为50M,-s:表示snapshot快照,-p:指定权限permission

r:读的权限read,-n:指定快照卷的名称。

  Rounding up size to full physical extent 52.00 MiB

  Logical volume "mydata-snap" created

[root@lamp ~]# lvs  #查看逻辑卷,刚新建的快照逻辑卷

  LV          VG   Attr   LSize  Origin Snap%  Move Log Copy%  Convert

  mydata      myvg owi-ao 10.00g                                      

  mydata-snap myvg sri-a- 52.00m mydata   0.02                        

[root@lamp ~]# mount  #查看挂载相关信息

/dev/sda7 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,rootcontext="system_u:object_r:tmpfs_t:s0")

/dev/sda1 on /boot type ext4 (rw)

/dev/sda3 on /home type ext4 (rw)

/dev/sda5 on /tmp type ext4 (rw)

/dev/sda2 on /usr/local type ext4 (rw)

/dev/mapper/myvg-mydata on /mydata type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

执行完快照后,即可解锁表;

mysql> UNLOCK TABLES;    #解锁

Query OK, 0 rows affected (0.00 sec)

对快照进行挂载并备份;

[root@lamp ~]# mount /dev/myvg/mydata-snap  /mnt -o ro  #以只读方式挂载刚做的快照卷

[root@lamp ~]# cd /mnt  #进入挂载目录

[root@lamp mnt]# ls

data  lost+found

[root@lamp mnt]# cd data/

[root@lamp data]# ls

hellodb      ib_logfile1  lamp.pid  mysql-bin.000001  mysql-bin.000004  performance_schema  testdb    ibdata1      jiaowu       mydb      mysql-bin.000002  mysql-bin.000005  stu

ib_logfile0  lamp.err     mysql     mysql-bin.000003  mysql-bin.index   test

[root@lamp data]# mkdir /backup/full-backup-`date +%F`  #创建备份目录并以时间格式命名

[root@lamp data]# cp -a ./* /backup/full-backup-2017-06-06/  #-a:复制当前目录的所有内容及其权限属性到备份的目录

[root@lamp data]# cd 

[root@lamp ~]# umount /mnt  #卸载挂载的目录/mnt

[root@lamp ~]# lvremove --force /dev/myvg/mydata-snap  #移除刚才创建的快照卷--force强制性

  Logical volume "mydata-snap" successfully removed

[root@lamp ~]# cd /backup/full-backup-2017-06-06/

[root@lamp full-backup-2017-06-06]# ls

hellodb      ib_logfile1  lamp.pid  mysql-bin.000001  mysql-bin.000004  performance_schema  testdb   ibdata1      jiaowu       mydb      mysql-bin.000002  mysql-bin.000005  stu

ib_logfile0  lamp.err     mysql     mysql-bin.000003  mysql-bin.index   test

[root@lamp full-backup-2017-06-06]# rm -rf mysql-bin.*   #删除相关的二进制日志文件以便节省空间

[root@lamp full-backup-2017-06-06]# ls

hellodb  ib_logfile0  jiaowu    lamp.pid  mysql               stu   testdb

ibdata1  ib_logfile1  lamp.err  mydb      performance_schema  test

root@lamp ~]# cd /mydata/data

[root@lamp data]# ls

hellodb      ib_logfile1  lamp.pid  mysql-bin.000001  mysql-bin.000004  performance_schema  testdb     ibdata1      jiaowu       mydb      mysql-bin.000002  mysql-bin.000005  stu

ib_logfile0  lamp.err     mysql     mysql-bin.000003  mysql-bin.index   test

[root@lamp data]# cat /backup/master-2017-06-06.info 

*************************** 1. row ***************************

            File: mysql-bin.000005  #记录的二进制日志文件

        Position: 107    #二进制日志的位置

    Binlog_Do_DB: 

Binlog_Ignore_DB: 

mysql> FLUSH LOGS;  #滚动日志

Query OK, 0 rows affected (0.01 sec)

mysql> USE jiaowu 

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> INSERT INTO tutors(Tname) VALUES ('stu0003');  #往表tutors中插入数据,字段Tname 值stu0003

Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO tutors(Tname) VALUES ('stu0004');  #往表tutors中插入数据,字段Tname 值stu0004

Query OK, 1 row affected (0.00 sec)

mysql> SHOW MASTER STATUS;  #查看此时二进制日志的位置状态信息 

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000006 |      575 |              |                  |

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

1 row in set (0.00 sec)

mysql> \q

Bye

[root@lamp data]# mysqlbinlog --start-datetime='2017-06-06 10:11:02' mysql-bin.000005 mysql-bin.000006 > /backup/incremental-`date +%F-%H-%M-%S`.sql  #导出二进制日志文件bin.000005和bin.000006时间点从2017-06-06 10:11:02开始后的内容

[root@lamp data]# ls /backup/incremental-2017-06-06-17-01-41.sql 

/backup/incremental-2017-06-06-17-01-41.sql

[root@lamp data]# service mysqld stop  #停止mysqld进程

Shutting down MySQL..                                      [  OK  ]

[root@lamp data]# rm -rf ./*    #模拟mysql数据库数据目录内容丢失(手动删除)

[root@lamp data]# ls  #目录中的内容全部删除,查看显示为空

[root@lamp data]# cp -a /backup/full-backup-2017-06-06/* ./  #复制之前快照卷备份的内容至当前数据目录,-a:复制文件的内容及权限属性。

[root@lamp data]# ll   #确保所有文件的属主为mysql用户

total 28712

drwx------. 2 mysql mysql     4096 Jun  2 15:30 hellodb

-rw-rw----. 1 mysql mysql 18874368 Jun  5 14:00 ibdata1

-rw-rw----. 1 mysql mysql  5242880 Jun  5 14:00 ib_logfile0

-rw-rw----. 1 mysql mysql  5242880 Jun  2 15:28 ib_logfile1

drwx------. 2 mysql mysql     4096 Jun  5 14:00 jiaowu

-rw-rw----. 1 mysql root      1853 Jun  2 15:28 lamp.err

-rw-rw----. 1 mysql mysql        6 Jun  2 15:28 lamp.pid

drwx------. 2 mysql mysql     4096 Jun  2 15:30 mydb

drwx------. 2 mysql root      4096 Jun  2 15:30 mysql

drwx------. 2 mysql mysql     4096 Jun  2 15:28 performance_schema

drwx------. 2 mysql mysql     4096 Jun  2 15:30 stu

drwx------. 2 mysql root      4096 Jun  2 15:28 test

drwx------. 2 mysql mysql     4096 Jun  2 15:30 testdb

[root@lamp data]# service mysqld start  #开启mysqld进程

Starting MySQL                                             [  OK  ]

[root@lamp data]# mysql -uroot -p  #登录mysql客户端

Enter password: 

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

Your MySQL connection id is 3

Server version: 5.5.28-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 jiaowu

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> SELECT * FROM tutors;   #查询tutors表的内容(此时后插入的2行数据没有)

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

| TID | Tname        | Gender | Age  |

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

|   1 | HongQigong   | M      |   93 |

|   2 | HuangYaoshi  | M      |   63 |

|   3 | Miejueshitai | F      |   72 |

|   4 | OuYangfeng   | M      |   76 |

|   5 | YiDeng       | M      |   90 |

|   6 | YuCanghai    | M      |   56 |

|   7 | Jinlunfawang | M      |   67 |

|   8 | HuYidao      | M      |   42 |

|   9 | NingZhongze  | F      |   49 |

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

9 rows in set (0.00 sec)

mysql> SET sql_log_bin=0;  #导入二进制日志前,先关闭日志记录功能0为关闭,1为打开

Query OK, 0 rows affected (0.00 sec)

mysql> SOURCE /backup/incremental-2017-06-06-17-01-41.sql  #导入备份的二进制日志数据

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM tutors;    #再次查询tutors表的内容,此时后插入的2行数据已经生成

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

| TID | Tname        | Gender | Age  |

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

|   1 | HongQigong   | M      |   93 |

|   2 | HuangYaoshi  | M      |   63 |

|   3 | Miejueshitai | F      |   72 |

|   4 | OuYangfeng   | M      |   76 |

|   5 | YiDeng       | M      |   90 |

|   6 | YuCanghai    | M      |   56 |

|   7 | Jinlunfawang | M      |   67 |

|   8 | HuYidao      | M      |   42 |

|   9 | NingZhongze  | F      |   49 |

|  10 | stu0003      | M      | NULL |

|  11 | stu0004      | M      | NULL |

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

11 rows in set (0.00 sec)

mysql> SET sql_log_bin=1;   #二进制日志导入后再打开二进制日志记录功能

Query OK, 0 rows affected (0.00 sec)

mysql> SHOW MASTER STATUS;  #查看此时的二进制日志位置状态信息

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

mysql-bin.000001 |      107 |              |                  |

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

1 row in set (0.00 sec)

至此通过lvm逻辑卷和二进制cp功能实现了mysql数据库备份和还原。














本文转自wang650108151CTO博客,原文链接: ,如需转载请自行联系原作者


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
10 3
|
1天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
8 3
|
1天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
10 2
|
4天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
21 5
|
5天前
|
缓存 网络协议 Linux
Linux ip命令常用操作
Linux的 `ip`命令是一个强大且灵活的网络管理工具,能够执行从基本的网络接口配置到高级的路由和VLAN管理等多种操作。通过熟练掌握这些常用操作,用户可以更加高效地管理和配置Linux系统的网络环境。无论是在日常管理还是故障排除中,`ip`命令都是必不可少的工具。
7 2
|
5天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
19 3
|
6天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
20 4
|
4天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
13 1
|
30天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
60 3
Mysql(4)—数据库索引
|
13天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
69 1