这里简单总结MySQL的备份分为3种:分为冷备份,逻辑备份,热备份。

1、冷备份:

一般主要用于非核心业务,这类业务一般都是允许业务中断的,冷备份的特点就是数度快,恢复时也最为简单。通常直接复物理文件来实现冷备份。

1.1备份过程:

第一关闭mysql服务

第二步就是把datas数据目录(包含ibdata1)和日志目录(包含ib_logfile0,ib_logfile1,ib_logfile2)复制到磁盘,或者本地的另一块磁盘里

1.2恢复过程:

第一使用复制的数据目录和日志目录替换原有的目录

第二就是启动mysql

2、逻辑备份MySQLdump

生产场景备份的命令:

生产场景不同引擎mysqldump备份命令

myisam引擎企业生产备份命令(适合所有引擎或混合引擎):

  1. mysqldump -uroot -p123456 -A -B -F -R --master-data=2 -x --events|gzip >/opt/all.sql.gz

提示:-F也可以不用,与--master-data有些重复。

innodb引擎企业生产备份命令:推荐使用的

  1. mysqldump -uroot -p123456 -A -B -F -R --master-data=2  --default-character-set=utf8  --events --single-transaction |gzip >/opt/all.sql.gz

提示:-F也可以不用。与--master-data有些重复。

--default-character-set=utf8 指定备份出的sql数据的字符集为utf8,当然,这个要提前知道线上的mysql库全部采用的字符集都是utf8,否则在恢复到线上的库会出现字符集不一致的问题出现乱码

提示:逻辑备份一般是数据迁移或者数据量很小时采用,逻辑备份采用的是数据导出的方式

2.1mysqldump库表等备份说明:

全备:

  1. Mysqldump –uroot –p  -q –single-transaction –A >>all.sql

导出多个数据库:

  1. Mysqldump –uroot –p  -q –single-transaction –B  test01 wjw01 test02 >test01_wjw01_test02.sql

导出一个test库的某张wjw01表:

  1. Mysqldump –uroot –p  -q –single-transaction –b  test  wjw01>>test_wjw01.sql

只导出表结构:

  1. Mysqldump –uroot –q –d  --skip-triggers

只需要导出储存过程时:

  1. Mysqldump –uroot –q -Rtdn  --skip-triggers

只需要导出触发器:

  1. Mysqldump –uroot –p –q –tdn –triggers

只需要导出事件:

  1. Mysqldump –uroot –p –q –Etdn –skip-triggers

只需要导出数据:

  1. Mysqldump –uroot –p –q  --skip-transaction --skip-triggers –t

要想在线上建立一台新的slave,则在master上执行如下命令:

  1. Mysqldump –uroot –p –q –single-transaction –master-data=2 -A >>all.sql

提示:在mysql5.5里增加了一个新的参数:--dump-slave,使用该参数可在slave端dump数据,建立新的slave,其目的是为了防止对主库造成过大的压力。

在slave上执行以下命令:

  1. Mysqldump  -uroot –p  -A –dump-slave=2 –q –single-transaction >/tmp/all.sql

查看alls.sql 里面会记录slave上的那个点。

注意:--dump-slave用于在slave上dump数据,建立新的slave

2.2Mysqldump优缺点以及使用场景

优点:

  1. 恢复简单,可以使用管道将他们输入到mysql
  2. 与存储引擎无关,因为是从MySQL服务器中提取数据而生成的,所以消除了底层数据存储的不同
  3. 有助于避免数据损坏。若磁盘驱动器有故障而要复制原始文件时,此时将得到一个损坏的备份

缺点:

  1. 必须有数据库服务器完成逻辑工作,需要更多地cpu周期
  2. 逻辑备份还原速度慢:需要MySQL加载和解释语句、转化存储格式、重建引擎

使用场景:对于MySQL数据库数据量不是很大的场景,建议使用。因为备份方便,简单灵活,易操作

当数据库特别的时候,比如30G以上时,备份MySQL数据时,也就建议不要采用mysqldump了,因为备份的时间以及恢复数据库的时间太长了,会对库表造成锁,对线上的业务影响还是比较大的

2.3简单介绍下MySQL全量备份+增量备份binlog

注意:生产上强烈建议MySQL开启Row格式来记录binlog,尽管这样对磁盘的IO以及磁盘的空间的消耗是比较大,但是和数据的安全性、完整性相比,磁盘资源那都是小事

全量备份脚本内容:

#!/bin/bash

#mysql全量备份脚本建议在slave从库上运行,从库slave上建议开启参数log_slave_updates=1

mkdir /backup

cd /backup

dateDIR=$(date +"%Y-%m-%d")

mkdir -p $dateDIR/data

path=/data/mysql/data

for n in `mysql -uroot -p123456 -e "show databases"|grep -v "Database"`

do

mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B $n|gzip >/backup/$dateDIR/data/${n}_$dateDIR.sql.gz

done

binlog_rm=$(tail -n 1 $path/mysql-bin.index|sed 's/.\///')

mysql -uroot -p123456 -e "purge binary logs to '$binlog_rm'"

说明:这个全量备份脚本,会在导出的时候锁住全局表,并且此时刷新产生一个新的bin-log,期间会产生写操作的等待,直到导出结束后才会写入新产生的bin-log文件,然后旧的bin-log 文件会被删除删除掉,一般在晚上2:00业务低峰期执行操作

进行本地bin-log增量备份

在执行完全量备份脚本后,就可以执行增量备份脚本了。

增量备份脚本思路很简单:

先mysqladmin -uroot -p123456 flush-logs 刷新新的binlog文件,此时mysql写入到新的binlog文件中。

然后把当前mysql数据库存放binlog的目录中抛去刚才最新生成的binlog文件,其余旧的binlog文件全部cp到本地服务器/backup/binlog  binlog的备份目录下。

最后在登录MySQL清除当前的binlog文件数减一

  1. mysql -uroot -p123456 -e "purge binary logs to 'mysql-bin.(n-1)'"

3.热备份与恢复

热备份的方式也是直接复制数据物理文件,和冷备份一样,但是热备份可以不停机直接复制,一般用于7*24小时不间断的重要核心业务。Mysql的社区版本热备份工具InnoDB Hot Backup是付费的,只能试用30天,商业版才可以永久的使用,

Percona公司发布一个xtrabackup热备工具,和付费的工具一样,支持在线热备(备份时不影响数据的读写)是商业工具InnoDB Hot Backup的一个很好的替代。

xtrabackup热备工具是一个开源的工具,他可以非常快速的备份和恢复mysql数据库。由于Xtrabackup支持备份innodb表,实际生产环境中我们使用的工具是innobackupex,它是对xtrabackup的一层封装。innobackupex脚本用来备份非 InnoDB 表,同时会调用 xtrabackup命令来备份 InnoDB 表,innobackupex的基本流程如下:

  1. 开启redo日志拷贝线程,从最新的检查点开始顺序拷贝redo日志;
  2. 开启idb文件拷贝线程,拷贝innodb表的数据
  3. idb文件拷贝结束,通知调用FTWRL,获取一致性位点
  4. 备份非innodb表(系统表)和frm文件
  5. 由于此时没有新事务提交,等待redo日志拷贝完成
  6. 最新的redo日志拷贝完成后,相当于此时的innodb表和非innodb表数据都是最新的
  7. 获取binlog位点,此时数据库的状态是一致的。
  8. 释放锁,备份结束。

关于MySQL数据库的备份方案到此处就介绍完了,如有不对,请及时指出。欢迎一起交流学习。

关于MySQL数据库的备份方案的更多相关文章

  1. 使用percona-xtrabackup工具对mysql数据库的备份方案

    使用percona-xtrabackup工具对mysql数据库的备份方案 需要备份mysql的主机 172.16.155.23存放备份mysql的主机 172.16.155.22 目的:将155.23 ...

  2. 如何用SQL语句实现Mysql数据库的备份与还原

    以前一直做android客户端的项目,根本没有开发asp.net mvc的开发,现阶段做了一个模块,参数设置,以及数据库的备份与还原.其需求如下: 参数设置 本项参数设置为对自动数据备份进行设置,管理 ...

  3. mysqldump常用于MySQL数据库逻辑备份

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...

  4. MYSQL数据库增量备份

    MySQL数据库增量备份,在这之前修改我们的数据库配置文件/etc/my.cnf开启bin-log日志功能即可.接下来是我参考了下网上的一些方法,自己写的,主要还是要能学到他的一些思路和方法. #fu ...

  5. [知了堂学习笔记]_Java代码实现MySQL数据库的备份与还原

    通常在MySQL数据库的备份和恢复的时候,多是采用在cmd中执行mysql命令来实现. 例如: mysqldump -h127.0.0.1 -uroot -ppass test > d:/tes ...

  6. mysql数据库的备份和恢复

    Mysql数据库的备份和恢复 1.备份单个数据库 mysql数据库自带了一个很好用的备份命令,就是mysqldump,它的基本使用如下: 语法:mysqldump –u <用户名> -p ...

  7. mysql数据库的备份和还原的总结

    mysql数据库的备份和还原的总结 (来自一运维同事的总结) 1. 备份方式: 热备:数据库在线进行备份,不影响读和写的在线备份方式! 温备:数据库在线进行备份,对表备份时先锁定写操作,仅可以执行读操 ...

  8. mysql数据库的备份和还原

    mysql数据库的备份命令:mysqldump -u root  -p 要备份的现有数据库名  >  备份后的sql文件名.sql,例如:  mysqldump -u root -p  heal ...

  9. 一、MySQL中的索引 二、MySQL中的函数 三、MySQL数据库的备份和恢复 四、数据库设计和优化(重点)

    一.MySQL中的索引###<1>索引的概念 索引就是一种数据结构(高效获取数据),在mysql中以文件的方式存在.存储建立了索引列的地址或者指向. 文件 :(以某种数据 结构存放) 存放 ...

随机推荐

  1. Asp.Net前台调用后台变量

    1.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %&g ...

  2. mingw编译ffmpeg 错误:Unknown option "--enable-memalign-hack"

    据说mingw编译ffmpeg的话需要添加 --enable-memalign-hack 开关 但如果源码是最新版比如:ffmpeg4.0.2 的话 好像已经禁用了该开关. “我可以确认新的ffmpe ...

  3. opencv-3.3安装记录-ubuntu 14.04

    这个二逼问题不会是最后一次. ipcv-****.tar.gz 这个文件在cmake的时候会卡住,这里先下载这个文件,大概38M,放到.cache/ippcv目录下就可以了.貌似还需要改下名字. 就可 ...

  4. java通过过滤器 设置跨域允许

    前人种树:https://www.cnblogs.com/CBDoctor/p/4235082.htmlhttps://blog.csdn.net/yuting0787/article/details ...

  5. World Cup 996B(排队模拟)

    题意:有n个通道,按顺序每一次站一个通道,直到所站的通道没有人 分析:模拟这个过程 #include<cstdio> int main() { ]; while(~scanf(" ...

  6. Kotlin语言学习笔记(1)

    fun main(args: Array<String>) { println("Hello, World!") } 基本语法 声明常量用val,声明变量用var,声明 ...

  7. 转: 日期格式参考extjs api文档中的Date类型

    var md = new Ext.form.DateField({ //下面的格式是:2000-01-01 00:00:00 format: 'Y-m-d H:i:s', ............ } ...

  8. Linux find命令使用方法

      Linux中find命令用来在指定目录下查找文件.通过组合不同参数可以在linux系统中快速查找需要的文件或目录. find命令语法 格式:find pathname -options [ -pr ...

  9. vue项目插入视频-mp4

    1. v.vue文件: <template> <div> <div class="contain"> <my-video :sources ...

  10. [C语言]变量VS常量

    -------------------------------------------------------------------------------------------- 1. 固定不变 ...