Mysql备份讲解(全备和增量备份)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介:

煮酒品茶:时间有点长,date那一段可以快进。比较真实,我用的什么样子,你用了也啥样子。

视频优酷真正沈核中.....


Mysql 备份与恢复

--煮酒品茶

用官方的文档讲解


mysqldump

备份文件(MYISAM)

INNODB?

数据库备份(完全备份和增量备份)

mysqldump --tab=/path/to/some/dir --opt db_name

--tab

mysqldump创建一个包含创建表的CREATE TABLE语句的tbl_name.sql文件,和一个包含其数据的tbl_name.txt文件。选项值为写入文件的目录。

默认情况,.txt数据文件的格式是在列值和每行后面的新行之间使用tab字符。可以使用--fields-xxx和--行--xxx选项明显指定格式。

1
2
[root@Mysql1-200 mysql] # mysqldump -uroot -p --tab=/backup/mysql/ --opt test
Enter password:


1
2
3
4
CREATE  TABLE  `10wbackup` (
   `id`  int (11)  NOT  NULL ,
   `number`  int (11)  NOT  NULL
) ENGINE=InnoDB  DEFAULT  CHARSET=utf8;


过程:

1、导出一个创建table语名气的文件

2、导出一个含有数值的txt文件,以tab分开


1
2
3
4
5
6
7
8
[root@Mysql1-200 mysql] # mysqldump -u root -p test >/backup/mysql/test/test.sqlEnter password:
[root@Mysql1-200 mysql] # ll test
total 2520
-rw-r--r--. 1 root root 2580275 Jul 26 22:47  test .sql
[root@Mysql1-200 mysql] # ll test.sql/
total 1068
-rw-r--r--. 1 mysql mysql    1314 Jul 26 22:36 10w.sql
-rw-rw-rw-. 1 mysql mysql 1088917 Jul 26 22:36 10w.txt


自动备份脚本的流程:

1、获取一系列的信息

2、以单前时间备份在目录中建立的以当前时间为目录的结构


1
mysqlhotcopy db_name  /path/to/some/dir


增量备份:

A    >      Z

A--B(完备)--C(增量备份)--D(增量备份)  > Z


mysql-bin.000001 (时间段) 0:00

mysql-bin.000002 (时间段) 0:00

mysql-bin.000003 (时间段) 0:00 ~ 6:00

6:00 --flush-logs

mysql-bin.000004 (时间段) 6:00 ~ 0:00

mysql-bin.000005 (时间段)



ySQL支持增量备份:需要用--log-bin选项来启动服务器以便启用二进制日志;参见5.11.3节,“二进制日志”。当想要进行增量备份时(包含上一次完全备份或增量备份之后的所有更改),应使用FLUSH LOGS回滚二进制日志。然后,你需要将从最后的完全或增量备份的某个时刻到最后某个点的所有二进制日志复制到备份位置。这些二进制日志为增量备份;恢复时,按照下面的解释应用。下次进行完全备份时,还应使用FLUSH LOGS或mysqlhotcopy --flushlogs回滚二进制日志。参见8.8节,“mysqldump:数据库备份程序”和8.9节,“mysqlhotcopy:数据库备份程序”。

如果MySQL服务器为从复制服务器,则无论选择什么备份方法,当备份从机数据时,还应备份master.info和relay-log.info文件。恢复了从机数据后,需要这些文件来继续复制。如果从机执行复制LOAD DATA INFILE命令,你应还备份用--slave-load-tmpdir选项指定的目录中的SQL_LOAD-*文件。(如果未指定,该位置默认为tmpdir变量值)。从机需要这些文件来继续复制中断的LOAD DATA INFILE操作。

如果必须恢复MyISAM表,先使用REPAIR TABLE或myisamchk -r来恢复。99.9%的情况下该方法可以工作。


1.    恢复原mysqldump备份,或二进制备份。

2.    执行下面的命令重新更新二进制日志:

3.    shell> mysqlbinlog hostname-bin.[0-9]* | mysql


1
2
mysqldump --single-transaction --all-databases --flush-logs > backup_sunday_1_PM.sql
--flush-logs

告诉服务器关闭当前的二进制日志文件并创建一个新文件。


1
mysqldump --single-transaction --flush-logs --master-data=2  --all-databases > backup_sunday_1_PM.sql


mysqldump --delete-master-logs

MySQL二进制日志占据硬盘空间。要想释放空间,应随时清空。操作方法是删掉不再使用的二进制日志,例如进行完全备份时:


恢复:

导入完备:

1
mysql < backup_sunday_1_PM.sql
1
mysql -u root -p  edittest < . /test .sql


现在这个点(周一)进行完全备份,下次完备(下周一) mysql-bin.000007

......(data)

mysql-bin.000007

周二进行增量备份

mysql-bin.000008

....(add table) table name:zhou2

周三进行增量备份

.... (add table) table name:zhou3s


1、完备

1
mysqldump -uroot -p --single-transaction --all-databases  --flush-logs >Wb /Wb-2013-7-26 .sql

mysql-bin.000009 ~ mysql-bin.000010

有新数据

2、直接回GUNbin-log日志

周二

1
mysqladmin -uroot -pzuoloveyou flush-logs

mysql-bin.000010 ~ mysql-bin.000011

周三

1
mysqladmin -uroot -pzuoloveyou flush-logs

mysql-bin.000011 ~ mysql-bin.000012

2、备份bin-log日志

1
shell> mysqlbinlog gbichot2-bin.000007 gbichot2-bin.000008 | mysql


恢复过程:

1、恢复完备(OK)

1
mysql -uroot -p <.. /Wb/Wb-2013-7-26 .sql

#星期一的完备状态

2、恢复周二的增量备份

2.1、进入binlog目录

cd /data/mysql

2.2、执行以下命令(bin-log是时间段,一次执行多个)

*数据不一致,那么我们必须严格按照binlog顺序来进行恢复。

*假定周二删除A用户,周三有新用户申请A名称。

1
mysqlbinlog mysql-bin.000010 mysql-bin.000011 | mysql -uroot -p

#星期二的状态(zhou2的库没有zhou3的库)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> show databases;
+ --------------------+
Database            |
+ --------------------+
| information_schema |
| MyISam             |
| edittest           |
| good1              |
| mysql              |
| performance_schema |
| test               |
| zhou2              |
| zhou3              |
+ --------------------+

9 rows in set (0.00 sec)

3、恢复周三的增量备份


备份目录:

增量备份目录:Zl-test-date

完全备份目录:Wb-test-date


TEST:

周三:(周三开始的)

mysql-bin.000012

周四:(周四开始的)

mysql-bin.000013

周五:(删除周四的,新建周五的)

mysql-bin.000014

mysql-bin.000015


备份机制:

周一完备,周二到周四增量备份

周一:完备后回GUN日志,同时备份的时候锁表和把表的内存刷入磁盘

周二到周日执行回GUN日志,并备份bin-log日志


结论:

增量备份是完全基于bin-log日志来进行的。

全备脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#/bin/bash
#Cwtea
#定义
Mysql= "/usr/local/mysql5.5.32/bin/mysql"
MysqlDump= "/usr/local/mysql5.5.32/bin/mysqldump"
User= "root"
PassWord= "*******"
DataBaseName= "test"
WbBackup= "/backup/mysql/Wb"
Now=` date  +%Y-%m-%d`
#command
mkdir  $Backup/$DataBaseName$Now
#mysqldump -uroot -p --single-transaction --all-databases  --flush-logs >Wb/Wb-2013-7-26.sql
$Mysql -u$User -p$PassWord -e  "FLUSH TABLES;"
$MysqlDump -u$User -p$PassWord --single-transaction --all-databases  --flush-logs >$WbBackup /Wb- $Now.sql


增量备份脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#/bin/bash
#Cwtea
#定义
MysqlAdmin= "/usr/local/mysql5.5.32/bin/mysqladmin"
MysqlDump= "/usr/local/mysql5.5.32/bin/mysqldump"
ZlBackup= "/backup/mysql"
DataBaseName= "test"
User= "root"
PassWord= "*******"
Now=` date  +%Y-%m-%d`
#command
#mysqladmin -uroot -p**** flush-logs
$MysqlAdmin -u$User -p$PassWord flush-logs
#Update bin-log
...........





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

推荐镜像

更多