MySQL-备份与还原

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 前言 对于我们运维来说,在mysql数据库领域,别的不说,最起码要会两大技能! 第一大技能:备份与还原 第二大技能:主从异步 关于这两大技能我们先来说说第一个 备份与还原 备份:我们按时定点来备份数据,当下数据最值钱,所以我们要确保数据的安全。

 

前言

对于我们运维来说,在mysql数据库领域,别的不说,最起码要会两大技能!

第一大技能:备份与还原

第二大技能:主从异步

关于这两大技能我们先来说说第一个

备份与还原

备份:我们按时定点来备份数据,当下数据最值钱,所以我们要确保数据的安全。

平常我们都是7天一大备,三天两头一小备,也就是说,一周来一个完全备份,1、2、天来一个增量或差异备份。

确保那天服务器宕机或误操作,能恢复过来。

还原:当服务器负重过量会导致宕机,或有时候我们误操作,删除了某张重要的数据表等等,这时候就要用到我们之前备份的数据来恢复。

简单说下备份的类型,

冷备:读写操作均不可进行

温备:读操作可执行;但写操作不可执行

热备:读写操作均可执行

MyISAM:温备,不支持热备
InnoDB: 都支持

简单说下常用的备份工具,

LVM的快照:先加锁,做快照后解锁,几乎热备;借助文件系统工具进行备份

mysqldump:逻辑备份工具,适用所有存储引擎,温备;支持完全或部分备份;对InnoDB存储引擎支持热备,结合binlog的增量备份

xtrabackup:由Percona提供支持对InnoDB做热备(物理备份)的工具,支持完全备份、增量备份

备注:以上除了xtrabackup,都是基于完整备份包以及二进制日志来恢复数据库的,二进制日志记录了增删改语句的操作指令,拿过来重放,

建议:建议二进制日志和数据文件分开存放 --

1、关闭网络链接,只监听本地端口访问,(在备份还原的时候用)

skip-networking=1

2、禁止主机名解析,ip地址访问的时候,禁止反向解析(建议加上)

skip_name_resolve = on

3、每个表单独使用一个表空间存储表的数据和索引(建议加上)

innodb_file_per_table = on

4、开启并指定二进制文件存放位置

log_bin=/...

。。。

准备

1、准备两台主机,我用.17充当mysql主服务器,.57来还原用。

2、17主mysql数据库有以下几个表

image

3、目录

/data/mysq/:下存放数据库数据

/app/logs/:下存放二进制日志

。。。

实战

备份阶段

1、完全备份

mysqldump -pcentos -A -F --master-data=2 --single-transaction |gzip > /data/all-`date +%F`.sql.gz

备注:

-A:备份全部数据库

-F:切换二进制日志

--master-data=2:记录了基于二进制那个位置备份的,这个点之后是新数据,备份结束点,主从改为1

--single-transaction:保证数据的一致性

2、解压并查看

gzip -d all-2018-08-03.sql.gz
less all-2018-08-03.sql

image

备注:记住这个文件以及数字,一会还原的时候要用

3、修改students表(新数据和日志)

1)没修改前

image

2)加记录

insert students (name,age)values('gaoda1hao',20);

image

3)查看现在的二进制变化

image

4)假设现在这台mysql服务器宕机崩溃了,下面开始还原

。。。

还原阶段

上面规划的是用57这台主机来还原,首先这台主机必须是干净的mysql数据库

1、scp传送

1)传送完全备份文件到目标主机

scp all-2018-08-03.sql 192.168.43.57:

2)传送上面图中00005文件以及之后的二进制文件到目标主机

scp mysql-bin.000005 192.168.43.57:

2、57主机来还原

注意:还原的时候要禁止除了你之外的所有用户的访问。

停止mysql服务,在my.cnf配置文件中可以加上上面说到一项

1)开启服务前提下并完全备份数据包

mysql < all-2018-08-03.sql

备注:现在只还原到了,备份时的状态,下面再次还原备份后到宕机这段时候发生的操作

2)导入二进制日志

mysqlbinlog  --start-position=385 /root/mysql-bin.000005 > /app/binlog.sql

备注:把00005中从385开始的指令语句导入到一个文件中

mysql < /app/binlog.sql

备注:导入二进制记录的指令

。。。

验证

1、看表存在不

image

2、看表数据正不正确

image

OK 还原成功

 

下面再来演示一个案例-误删除表的恢复

比如我们在某天的12点中做了完全备份,在下一次做完全备份中间有一天执行了删除某张表,删除后等了几个小时才发现表删除了,

在这种场景下,来恢复数据,下面来模拟下。

模拟顺序:完全备份--用户对表的数据修改--删除某张表--未发现用户继续对其他表操作--当访问被删除的表时发现--

准备工作和上面一样,下面进入正题

前几步和前面一样

1、完全备份

mysqldump -pcentos -A -F --master-data=2 --single-transaction |gzip > /data/all-`date +%F`.sql.gz

2、模拟误删除表前的修改

insert students (name,age)values('gaoda1hao',20);

。。。

备注:这期间加了好多数据,可能二进制文件已经满了,进行了切换

3、模拟二进制文件的切换

flush logs;
#

接着增加几条记录

insert students (name,age)values('gaoda2hao',22);

4、模拟误删除数据表

drop table students;

备注:删除后还么有发现,接着增加其他表的数据

insert teachers (name,age)values('gaoda3',30);

5、发现问题并及时禁止用户写权限(只能读)

flush tables with read lock;

备注:现在只能root用户可以读写其他用户是不能修改数据的

image

。。。

6、干净系统还原

1)停止服务

systemctl stop mairadb


2)删除所有mysql数据库数据

rm -rf /var/lib/mysql/

3)确保用户不能访问服务器 配置文件加上

skip-networking

4)启动服务

 

7、还原完全备份

1)解压完全备份包

gzip -d all-2018-08-03.sql.gz

2)查看解压的文件确定位置

less all-2018-08-03.sql

image

3)把完整备份传送到57目标主机还原

mysql <all-2018-08-03.sql

8、还原增量备份

1)合并00004以及之后的二进制日志文件

mysqlbinlog  --start-position=385 mysql-bin.000004 > /data/binlogs.sql
mysqlbinlog   mysql-bin.000005 >> /data/binlogs.sql
mysqlbinlog   mysql-bin.000006 >> /data/binlogs.sql

2)从合并的二进制日志文件中找到误操作的指令删除或注释

image

3)scp传送到57目标主机还原

mysql <binlogs.sql

。。。

验证

1、删除的表看看有了没

image

2、在表删除后其他的表改的记录还在不

image

OK

还原成功

欢迎补充--

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
95 4
|
29天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
73 3
|
29天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
36 3
|
2月前
|
安全 关系型数据库 MySQL
MySQL用户备份
【10月更文挑战第2天】MySQL用户备份
61 3
|
2月前
|
存储 关系型数据库 MySQL
MySQL如何备份?
【10月更文挑战第2天】MySQL如何备份?
129 3
|
4月前
|
SQL 关系型数据库 MySQL
在Linux中,如何备份和恢复MySQL数据库?
在Linux中,如何备份和恢复MySQL数据库?
|
4月前
|
SQL 数据可视化 关系型数据库
MySQL 备份可视化巡检系统
MySQL 备份可视化巡检系统
|
4月前
|
存储 关系型数据库 MySQL
MySQL备份与恢复
MySQL备份与恢复
60 0
|
4月前
|
关系型数据库 MySQL Shell
分享一篇mysql数据库备份脚本
分享一篇mysql数据库备份脚本
35 0
|
4月前
|
关系型数据库 MySQL Shell
MySQL 备份:从mysqldump全备中 匹配出某几个表
MySQL 备份:从mysqldump全备中 匹配出某几个表