简介

冷、温、热备份
冷备:读写操作均不可进行
温备:读操作可执行;但写操作不可执行
热备:读写操作均可执行
MyISAM:温备,不支持热备
InnoDB:都支持
不管是热备还原还是冷备还原,还原时都需要停服务,禁止别人访问

备份工具

mysqldump:逻辑备份工具,适用所有存储引擎,温备;支持完全或部分备份;对InnoDB存储引擎支持热备,结合binlog的增量备份
xtrabackup:由Percona提供支持对InnoDB做热备(物理备份)的工具,支持完全备份、增量备份

mysqldump参考

https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

mysqldump通用选项用法

mysqldump需要通过mysql协议连接数据库,所以需要数据的用户名和密码并且有一定的权限
数据库备份还原时,可以关闭二进制日志,还原数据库的过程就是执行相关的sql语句 -B:可以备份多个数据库或者备份某一个数据库
-A:备份所有数据库(排除information_schema和performance_schema这个两个数据库)
-E:备份相关的所有event scheduler事件调度(计划任务)
-R:备份所有存储过程和自定义函数(当有-A选项时,不用加此项)
--default-character-set=utf8:指定字符集
--master-data[=#]:此选项须启用二进制日志(备份的时候记录二进制日志的位置)
当=1时:所备份的数据之前加一条记录为CHANGE MASTER TO语句,非注释,不指定#,默认为1(CHANGE MASTER TO用于主从复制)
当=2时:有CHANGE MASTER TO语句,但是会被注释掉;此选项会自动关闭--lock-tables功能,自动打开-x | --lock-all-tables功能(除
非开启--single-transaction)
-F:完成备份后生成新的二进制日志;配合-A或-B选项时,会导致刷新多次数据库。建议在同一时刻执行转储和日志刷新,可通过和--single-transaction或-x,
--master-data一起使用实现,此时只刷新一次日志
--compact:去掉注释,适合调试,生产不使用
-d:只备份表结构,不备份表数据
-t:只备份数据,不备份create table
-n:不备份create database,可被-A或-B覆盖
--flush-privileges:备份mysql或相关时需要使用;刷新权限,让权限强制生效
-f:忽略SQL错误,继续执行
--hex-blob:使用十六进制符号转储二进制列,当有包括BINARY,VARBINARY,BLOB,BIT的数据类型的列时使用,避免乱码;备份时如果有二进制数据,把二进制转
换成十六进制存放在文本中,避免造成数据破坏
-q:不查询缓存,直接输出,加快备份速度;mysqldump备份时是执行一条条的select命令,数据库会默认以为是查询数据库,会走查询缓存
[root@centos7 ~]# mysqldump -B db2 |gzip > /data/mysql_`date +%F`.sql.gz #备份默认只是在屏幕上打印,需要输出到文件中,备份文件可以进行压缩

mysqldump不同存储引擎的不同选项用法

MyISAM备份选项:

支持温备;不支持热备,不支持事务,所以必须先锁定要备份的库,而后启动备份操作锁定方法如下:
-x:加全局读锁,锁定所有库的所有表,同时加--singletransaction或--lock-tables选项会关闭此选项功能
-l:对于需要备份的每个数据库,在启动备份之前分别锁定其所有表,默认为on,--skip-lock-tables选项可禁用,对备份MyISAM的多个库,可能会造成数据不一致
注意:以上选项对InnoDB表一样生效,实现温备,但不推荐使用

InnoDB备份选项:

支持热备,可用温备但不建议用
--single-transaction:此选项Innodb中推荐使用,不适用MyISAM,此选项会开始备份前,先执行START TRANSACTION指令开启事务;备份前开一个事务,以事务
的方式执行备份,配合可重复读这个隔离级别(因为是可重复读的隔离级别,所以在备份期间,虽然用户有可能会更新数据,但系统备份的
数据还是在用户没有更新数据时的样子),以此保证备份在同一个时间点;事物可以撤销一些DML语言(在开启事务期间,别人对数据的更
新,事务会自动撤销,保证数据还是在开始事务时的最初状态),但撤销不了DDL语言(drop、alter、create),隔离级别也一样隔离不
了DDL语言,比如在别的事务中把表或者库删了,当前的事务中也看不到被删除的表或者库,所以要确保备份期间其他连接尽量不使用
DROP、RENAME、ALTER、TRUNCATE操作
此选项和--lock-tables(此选项隐含提交挂起的事务)选项是相互排斥
备份大型表时,建议将--single-transaction选项和--quick(-q)结合一起使用

InnoDB建议备份策略

mysqldump –uroot -pxxxx –A –F –E –R --single-transaction --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob > $BACKUP/fullbak_$BACKUP_TIME.sql       #-A包含了-E和-R,有-A可以不加-E、-R

MyISAM建议备份策略

mysqldump –uroot -pxxxx –A –F –E –R --single-transaction --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob > $BACKUP/fullbak_$BACKUP_TIME.sql

mysqldump选择数据库进行备份的简单脚本

方法一

[root@centos7 ~]# vim bakcup_database.sh    #一个数据库做一个备份
#!/bin/bash
for db in `mysql -e 'show databases;'|egrep -v "^(Database|information_schema|performance_schema)$"`;do
mysqldump -B $db | xz > /data/mysql-${db}-`date +%F`.sql.xz
done
[root@centos7 ~]# chmod +x bakcup_database.sh
[root@centos7 ~]# ./bakcup_database.sh

方法二

[root@centos7 ~]# mysql -e 'show databases;'|egrep -v "^(Database|information_schema|performance_schema)$"|sed -rn "s#(.*)#myqsldump -B \1 | xz > /data/mysql-\1-`date +%F`.sql.xz#p"|bash      #sed是逐行进行处理的工具

增量备份

0表示周日,以此类推;周一在周日完全备份的基础上做增量备份,相当于周一备份的是与周日数据发生变化的那部分数据;同理,周二备份的是与周一发生变化的数据;所以周一到周三的增量备份之前没有对应关系;当周四发生数据库故障,需要还原数据库时,需要用到周日的完全备份和周一、二、三的增量备份,周三和周三之间的数据需要用二进制日志进行还原

差异备份

周日是完全备份,周一做与周日发送数据变化的备份,周二的差异备份包含了周一的备份,周三的差异备份包含了周一、二的差异备份,所以差异备份是包含关系;当周四数据库故障,需要备份还原时,需要用到周日的完全备份和周三的差异备份,周三和周四之间缺少的数据需要用二进制日志进行数据还原

实现mysqldump备份还原

备份

[root@centos7 ~]# mysql     #进入mysql
MariaDB [(none)]> create db3; #创建库
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db3 |
| mysql |
| performance_schema |
+--------------------+
MariaDB [(none)]> use db3;
MariaDB [(none)]> create table t1(id int); #创建表t1,表内容为空
[root@centos7 ~]# mysqldump -A -F --single-transaction --master-data=2 > /data/all.sql #做完全备份并且记录二进制日志位置
[root@centos7 ~]# mysql #进入mysql
MariaDB [(none)]> use db3;
MariaDB [db3]> insert t1 value(1),(2),(3); #往t1表里面插入3条数据
MariaDB [db3]> drop table t1; #删除t1表,进行还原准备

还原

还原数据库时,先停止mysql服务,防止别人访问,避免产生数据冲突

[root@centos7 ~]# less /data/all.sql      #查看完全备份
-- CHANGE MASTER TO MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=411; #找到这行,记录了二进制日志的位置,411之前为做完的完全备份,411之后则是未做备份(二进制日志位置根据当时自身服务器的二进制日志位置而定)
[root@centos7 ~]# mysqlbinlog --start-position=411 /var/lib/mysql/mariadb-bin.000001 > /data/logbin.sql #从指定位置导出二进制日志中的sql语句到一个.sql为后缀的文件中(做二进制日志备份)
[root@centos7 ~]# vim /data/logbin.sql #编辑导出的文件
DROP TABLE `t1` /* generated by server */ #找到删除表的那一行,把这行必须删除;用二进制日志备份还原数据库必须删除针对删除表或者库的sql语句,因为删除表或库的操作也会记录到二进制日志中
[root@centos7 ~]# mysql #进入mysql
MariaDB [(none)]> set sql_log_bin=off; #临时关闭二进制日志,避免还原过程产生大量的二进制日志
MariaDB [(none)]> use db3;
MariaDB [db3]> source /data/all.sql #先还原完全备份;创建表是在完全备份前创建的,往表添加内容是在完全备份之后操作的,所以不能直接用二进制日志还原,二进制日志备份中没有创建表的操作,需要配合完全备份
MariaDB [db3]> select * from t1; #完全备份还原完表的内容是空的
Empty set (0.00 sec)
MariaDB [db3]> source /data/logbin.sql #导入二进制日志备份
MariaDB [db3]> select * from t1; #导入二进制日志备份之后,恢复
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+

备份还原完之后,恢复mysql服务访问

mysqldump工具实现mysql数据库的备份还原的更多相关文章

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

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

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

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

  3. Mysql数据库之备份还原(mysqldump,LVM快照,select备份,xtrabackup)

    备份类型: 热备份:读写不受影响 温备份:仅可执行读备份 冷备份:离线备份,读写均不能执行,关机备份 物理备份和逻辑备份 物理备份:复制数据文件,速度快. 逻辑备份:将数据导出之文本文件中,必要时候, ...

  4. C#中MySQL数据库的备份 还原 初始化

    直接在cmd执行如下代码: mysqldump -h localhost -uroot -p123 --default-character-set=utf8 --opt --disable-keys ...

  5. C# MySQL数据库的备份 还原 初始化

    // 执行创建数据库操作 this.GetExecute(G_Con, "create database if not exists NEWDB"); this.sqlAddres ...

  6. mysql数据库数据备份还原

    1.直接在命令行里面执行 备份一个数据库:mysqldump -h server -u username -p password db_name > database-sqlbkp_`date ...

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

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

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

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

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

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

随机推荐

  1. redis入门(一)

    目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...

  2. 如何在Spring Boot中使用Cookies

    一. 导读 本文大纲 读取HTTP Cookie 设置HTTP Cookie 读取所有Cookie[] 为Cookie设置过期时间 Https与Cookie HttpOnly Cookie 删除Coo ...

  3. 在.NET Core 3.0中发布单个EXE文件

    假设我有一个简单的“ Hello World”控制台应用程序,我想发送给朋友来运行.朋友没有安装.NET Core,所以我知道我需要为他构建一个独立的应用程序.很简单,我只需在项目目录中运行以下命令: ...

  4. Flutter学习笔记--Dart基础

    前言 Flutter使用Dart语言开发, Dart是面向对象编程语言, 由Google2011年推出, 目前最新版本是2.4.0. 工欲善其事,必先利其器. 为了更好的开发Flutter应用, 我们 ...

  5. Android自定义控件:图形报表的实现(折线图、曲线图、动态曲线图)(View与SurfaceView分别实现图表控件)

    图形报表很常用,因为展示数据比较直观,常见的形式有很多,如:折线图.柱形图.饼图.雷达图.股票图.还有一些3D效果的图表等. Android中也有不少第三方图表库,但是很难兼容各种各样的需求. 如果第 ...

  6. Weblogic wls9_async_response 反序列化远程命令执行漏洞(CVE-2019-2725)复现

    一.     漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-2725,危险级别:高危,CVSS分值:9.8. CNVD 编号:CNVD-C-2019-48814,CNVD对该漏洞的综合评级为 ...

  7. windows上使用VsCode开发C/C++

    使用VsCode+makefile开发C/C++ 1. 介绍 vscode作为现在越来越受欢迎的编辑器之一,因为可以使用插件让vscode支持几乎市面上所有的编程语言,由于笔者主要接触的是 C/C++ ...

  8. golang 包依赖管理 godep 使用

    介绍: godep是解决包依赖的管理工具,目前最主流的一种,原理是扫描记录版本控制的信息,并在go命令前加壳来做到依赖管理. 1.安装: go get github.com/tools/godep 2 ...

  9. 操作系统实现(一):从Bootloader到ELF内核(转载)

    原文链接: http://www.cppblog.com/airtrack/archive/2014/10/30/208729.html Bootloader 我们知道计算机启动是从BIOS开始,再由 ...

  10. [考试反思]1013csp-s模拟测试72:距离

    最近总是这个样子. 看上去排名好像还可以,但是实际上离上面的分差往往能到80分,但是身后的分差其实只有10/20分. 比上不足,比下也不怎么的. 所以虽然看起来没有出rank10,但是在总分排行榜上却 ...