MySQL 下全量和增量备份与还原原理|学习笔记

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 快速学习 MySQL 下全量和增量备份与还原原理

开发者学堂课程【MySQL 实操课程:MySQL 下全量和增量备份与还原原理】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/717/detail/12825


MySQL 下全量和增量备份与还原原理

 

内容介绍

一、完全备份与备份方式

二、案例演示

 

一、完全备份与备份方式

1、完全备份

(1)完全备份最简单也最快速的方法是拷贝数据库文件夹 ,当然在拷贝时对MySQL 会有些要求一般在进行拷贝时是希望没有新数据的型的,这是他的一个要求,所以要进行使用表的操作。

(2)也可以使用 mysqldump 程序或 mysqlhotcopy 脚本对数据库进行 SQL 语句级别的备份, 与前面一种备份方式不同,前面的备份方式是备份实际存放的物理文件,而第二种相对于是一种导出的操作,就是将 MySQL 中的数据导出成sql脚本,然后再重新执行 sql 脚本,从而实现还原,是属于一种逻辑的备份,缺点就是它们速度要稍微慢些,因为不只是文件的复制,还要将应用 sql 本身的处理能力导出sql,不过通用性更强因为是基于 sql 语句,可以在不同的 MySQL 版本上执行,而且可以分析 sql 语句,更加清楚的理解 sql 语句,从而进行选择性的还原。

2、使用拷贝文件夹的方式备份

(1)因为My SQL 表保存为文件方式,所以理论上来说可以通过拷贝文件的方式对数据库进行备份。不过,使用直接备份方法时,必须要保证表在拷贝期间不被使用。如果不能满足这一条件,拷贝的文件就可能存在数据的不致性拷贝操作也就失败了。就是在进行拷贝时不能让 MySQL 数据库再进行写入数据,因为会导致备份拷贝出的文件与最终数据形成偏差,出现不一致的情况,所以在备份之前要将数据库进行锁表的操作,为可读不可写。

(2)最可靠的方法是在拷贝以前关闭 MySQL 服务拷贝完成后再重新启动服务。但有些应用会要求24小时不间断服务此时关闭服务器的方法就不很合适,不过MySQL 提供了表的锁定和解锁的相关操作以确保在拷贝文件期间该文件不会被修改。

 

二、案例演示

下面进行文件夹备份案例演示:

1、备份

首先连接到服务器:

[root@iZwz9bize6nk8hug8jOvywZ~]# ssh root@47.112.159.55

进入 MySQL:

[root@iZwz9bize6nk8hug8jOvywZ~]# /usr/ local/ mysq1/bin/mysql -uroot -p

Enter password:

在 aliyun 下面有测试表 school,打开 school 可以看到有三条事例:

mysql> select * from school;

|  id | name        |

|1001 | yizhong      |

|1002 | erzhong      |

|1003 | sanzhong      |

然后切换到 aliyun 数据库:

[root@iZwz9bize6nk8hug8jOvywZ mysql]# cd aliyun

[root@iZwz9bize6nk8hug8jOvywZ aliyun]# ll

-rw-r----- 1 mysql mysql  8586 Aug 20  16:17  school.frm

-rw-r----- 1 mysql mysql 114688 Aug 20  22:53  school.ibd

可以看到 school.frmschool.ibd 文件,一个是表结构文件,一个是数据文件,这种文件属于 InnoDB create table school 文件的存储引擎,可以通过 mysql> show create table school; 进行查看。

在当前目录进行备份文件,先创建 school 文件夹,然后拷贝 school 文件到 school 文件夹:

[root@iZwz9bize6nk8hug8jOvywZ aliyun]# mkdir school

[root@iZwz9bize6nk8hug8jOvywZ aliyun]# cp -r school.* school/

[root@iZwz9bize6nk8hug8jOvywZ aliyun]# cd school

[root@iZwz9bize6nk8hug8jOvywZ school]# ll

total 108

-rw-r----- 1 mysql mysql  8586 Aug 20  16:17  school.frm

-rw-r----- 1 mysql mysql 114688 Aug 20  22:53  school.ibd

说明拷贝成功。

2、还原

然后删除 school 的两条数据和切换到 aliyun 删除 school 的两个文件:

mysql> delete from school;

mysql> select * from school;

Empty set (0.00 sec)

[root@iZwz9bize6nk8hug8jOvywZ //]# cd /data/mysql/aliyun

[root@iZwz9bize6nk8hug8jOvywZ aliyun]# rm -rf school.*

[root@iZwz9bize6nk8hug8jOvywZ aliyun]# ll

此时看不到 school 的两个文件了,然后将这两个文件切换到上一级目录,拷贝到 /data/mysql/aliyun 目录:

[root@iZwz9bize6nk8hug8jOvywZ school]# cp -r * ./

[root@iZwz9bize6nk8hug8jOvywZ school]# cp -r * /data/mysql/aliyun

[root@iZwz9bize6nk8hug8jOvywZ school]# cd ..

[root@iZwz9bize6nk8hug8jOvywZ aliyun]# ll

-rw-r----- 1 root root  8586 Aug 20  16:17  school.frm

-rw-r----- 1 root root  114688 Aug 20  22:53  school.ibd

此时进行查看可以发现两个文件又出现了,说明还原操作成功,但因为是通过 root进行操作的,所以所有者由 mysql 变为了 root,所以需要修改所以权:

[root@iZwz9bize6nk8hug8jOvywZ aliyun]# chgrp -R mysql /data/mysql/ && chown -R mysql /data/mysql/

[root@iZwz9bize6nk8hug8jOvywZ aliyun]# ll

-rw-r----- 1 mysql mysql  8586 Aug 20  16:17  school.frm

-rw-r----- 1 mysql mysql 114688 Aug 20  22:53  school.ibd

此时所有权为 mysql,说明修改成功。再去查询 school 表中的记录会发现查不到:

mysql> select * from school;

Empty set (0.00 sec)

mysql> exit

因为这里涉及 mysql 的重启操作:

[root@iZwz9bize6nk8hug8jOvywZ~]# /usr/local/mysql/bin/mysqladmin shutdown -uroot -p

[root@iZwz9bize6nk8hug8jOvywZ~]# /usr/local/mysql/bin/mysqld_safe /etc/my.cnf&

[root@iZwz9bize6nk8hug8jOvywZ~]# sed: -e expression #1,char 10: unknown option to ‘s’

[root@iZwz9bize6nk8hug8jOvywZ~]# /usr/local/mysql/bin/mysql -uroot -p

然后再进行查询可以发现两条记录重新出现:

mysql> use aliyun

mysql> show tables;

mysql> select * from school;

|  id | name        |

|1001 | yizhong      |

|1002 | erzhong      |

|1003 | sanzhong      |

说明还原成功。所以可以通过这样的一种方式去还原操作,就是完成物理文件的备份,这里是手动的进行拷贝,也可以去做定时的备份,比如说通过 shell 脚本。这里讲解的是使用拷贝文件夹的方式进行备份还原,通过物理方式备份,后面的课程将讲解逻辑的备份。而在备份过程中,最好是关闭 MySQL 服务,但是在实际生产环境下不会这样做,所以可以选择业务不繁忙的情况下进行备份,前提是需要锁表

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
关系型数据库 MySQL
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
21 0
|
1月前
|
监控 关系型数据库 MySQL
Flink CDC产品常见问题之flink-cdc任务抓取全量的mysql数据不生效如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
2月前
|
存储 关系型数据库 MySQL
深入理解MySQL索引:从原理到最佳实践
深入理解MySQL索引:从原理到最佳实践
198 0
|
2月前
|
SQL 关系型数据库 MySQL
mysql怎么备份
mysql怎么备份
193 7
|
15天前
|
SQL 存储 关系型数据库
mysql数据库备份与恢复
mysql数据库备份与恢复
|
1月前
|
存储 SQL 关系型数据库
[MySQL]事务原理之redo log,undo log
[MySQL]事务原理之redo log,undo log
|
2月前
|
关系型数据库 MySQL
MySQL学习笔记
MySQL学习笔记
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下定时备份mysql数据库
Linux环境下定时备份mysql数据库
|
2月前
|
安全 关系型数据库 MySQL
某教程学习笔记(一):09、MYSQL数据库漏洞
某教程学习笔记(一):09、MYSQL数据库漏洞
17 0
|
2月前
|
存储 SQL 关系型数据库
MySQL事务底层原理和MVCC机制
MySQL事务底层原理和MVCC机制
38 1