这里简单总结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. django 模板context的理解

    context作为view与template之间的桥梁,理解它的工作原理对于djagno的模板工作机制至关重要. class ContextDict(dict):#上下文词典,由词典可以通过conte ...

  2. groovy Date 格式化

    刚开始使用Java,瞬间爱上:换了个厂接触到了groovy,开始有点嫌弃Java了... 看看时间的格式化 java玩法: new SimpleDateFormat("yyyy-MM-dd ...

  3. 深度学习原理与框架-Tensorflow基本操作-实现线性拟合

    代码:使用tensorflow进行数据点的线性拟合操作 第一步:使用np.random.normal生成正态分布的数据 第二步:将数据分为X_data 和 y_data 第三步:对参数W和b, 使用t ...

  4. pod install vs pod update

    Podfile文件,Podfile.lock文件 Podfile文件:指定依赖库的版本规则 Podfile.lock文件:记录当前工程中使用的依赖库的版本号 pod install会去安装podfil ...

  5. js -history.back(-1)和history.go(-1) 区别

    既然history.back(-1)和history.go(-1)都是返回之前页面,   history.back(-1)//直接返回当前页的上一页,,是个新页面   history.go(-1)// ...

  6. 1047B_Cover Points

    B. Cover Points time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  7. Windows查看指定端口是否占用和查看进程

    Winodows上查看指定端口号的使用情况和占用进程以及终止所占用端口进程进程用到.下面主要描述如何操作. 1.查看所有端口占用情况 C:\Users\Administrator>netstat ...

  8. Linux磁盘空间不足处理方法

    维护Linux服务器正常使用需要经常删除Linux系统运行产生的系统日志和业务环境产生的debug日志文件.安装包等.本文主要描述如何通过脚本实现清理业务环境产生的 debug日志文件和上传或备份的打 ...

  9. SQLServer 的数据分页:

    假设现在有这样的一张表:CREATE TABLE test( id int primary key not null identity, names varchar(20))然后向里面插入大约1000 ...

  10. Hibernate 再接触 Hello world 模拟Hibernate

    没有Hibernate以前 Cilent 客户端 new出一个对象 然后执行JDBC 然后这样的访问数据库并不是面向对象语言 使用Hibernate以后 Cilent new 出一个对象后 访问配置文 ...