简介

冷、温、热备份
冷备:读写操作均不可进行
温备:读操作可执行;但写操作不可执行
热备:读写操作均可执行
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. 修改List<Map<String, Object>>的值

    List<Map<String, Object>>  aList = new ArrayList(); //加入一个Map元素Map map = new HashMap();m ...

  2. 【问题记录】VMware Tools是灰色的,不能安装

    一.VMware Tools简介 VMware Tools 中包含一系列服务和模块,可在 VMware 产品中实现多种功能,从而使用户能够更好地管理客户机操作系统,以及与客户机操作系统进行无缝交互. ...

  3. Java连接MySQL简单步骤及常见问题解析

    这篇文章跟读者们介绍Java语言如何连接到MySQL数据库相关操作,及FAQ(Frequently Asked Questions)介绍. 选择工具和准备数据集 IDE:Eclipse 数据库:使用的 ...

  4. egg-sequelize --- nodejs

    项目 egg + sequelize + mysql2 项目结构 配置 安装模块 npm install --save egg-sequelize npm install --save egg-cor ...

  5. Pandas 转换连接

    # 导入相关库 import numpy as np import pandas as pd 拼接 有两个 DataFrame,都存储了用户的一些信息,现在要拼接起来,组成一个 DataFrame. ...

  6. [BZOJ4553][HEOI2016/TJOI2016]序列

    传送门 好像是DP再套个裸的CDQ? 树套树是不可能写树套树的,这辈子都不可能写树套树的 对于一个 \(i\) ,设它最小为 \(a_i\) ,原数为 \(b_i\) ,最大为 \(c_i\) \(f ...

  7. [考试反思]0928csp-s模拟测试54:转瞬

    咕了好久,也没什么想说的. 下一场就又爆炸了... T3特判打丢一句话丢了14分,剩下其实都还好. T1:x 给我的第一感觉是建图找联通块,但既然只要找联通块为什么不直接并查集呢? 对于每一个数字合并 ...

  8. [专题总结]AC自动机

    其实前面的模板也不是1A,我在题库里提前做过,也不必在意罚时,刚开始我在做别的专题 裸模板我就不说了,各个博客讲解的很明白 void insert(string s){ ,len=s.size(); ...

  9. Elasticsearch 技术分析(八):剖析 Elasticsearch 的索引原理

    前言 创建索引的时候,我们通过Mapping 映射定义好索引的基本结构信息,接下来我们肯定需要往 ES 里面新增业务文档数据了,例如用户,日志等业务数据.新增的业务数据,我们根据 Mapping 来生 ...

  10. 跳跳棋——二分+建模LCA

    题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他们的位置移动 ...