mysql数据库备份总结_MySQL数据库备份总结

一个企业的正常运行,数据的完整性是最关键的;所以我们需要在工作中要很熟练的掌握数据的备份与恢复方法;下面是对Mysql数据库备份的三种方法总结,希望对大家会有所帮助

备份开始前的工作环境准备:

1、创建用于保存二进制日志文件的目录

# mkdir /mybinlog

# chown mysql.mysql /mybinlog

2、修改配置文件

# vim /etc/my.cnf

log-bin=/mybinlog/mysql-bin   二进制日志目录及文件前缀

innodb_file_per_table=1启用innoDB表

datadir= /mydata/data    指定数据库的目录

3、为备份数据库创建存放点

# mkdir /mybackup

# chown -R mysql.mysql /mybackup

4、启动mysql服务器

# service mysqld start

5、插入需要备份的数据库

# mysql

一、使用mysqldump工具完成完全备份+增量备份基于mysqldump通常就是完整备份+二进制日志来进行恢复数据

1.1、mysqldump用来温备份,首先需要为所有库加读锁,并且滚动一下二进制日志,记录当前二进制文件位置

# mysqldump --all-databases --lock-all-tables --routines --triggers--master-data=2

--flush-logs>/mybackup/alldatabase.sql

解释各个选项的意义:

--all-databases 备份所有数据库

--lock-all-tables 为所有表加锁

--routines 存储过程与存储函数

--triggers 触发器

--master-data=2以change master to的方式记录位置,但默认为被注释

--flush-logs  执行日志滚动

1.2、备份二进制日志

# cp /mybinlog/mysql-bin.000001 /mybackup/alldatabase.000001

1.3、模拟数据库意外损坏,利用完全备份实现数据库的恢复

# rm -rf /mydata/data/*

# rm -rf /mybinlog/*

1.4、初始化mysql并启动服务器

# cd /usr/local/mysql/

# ./scripts/mysql_install_db --user=mysql--datadir=/mydata/data

1.5、删除二进制日志,启动服务

# rm -rf /mybinlog/*

# netstat -tnlp 查看启动的mysql进程号

tcp        0      0 0.0.0.0:3306           0.0.0.0:*           LISTEN      2523/mysql

# kill 2523  (注意,如果在备份之前mysql服务是开启的,重启是不成功的,需要把这个进程先kill掉)

# service mysqld restart

1.6、恢复到备份状态,导入备份的数据库文件:

# mysql

2、模拟往students表中添加数据,添加完成后不小心将表删除了,我们要恢复到删除之前的状态,并且新加的数据还要存在

2.1、往students表中添加数据

mysql>use jiaowu;

mysql>insert into students (Name,Age,Gender) values ('hadoop',22,'M');

2.2、模拟一下,不小心将表删除了

mysql>drop tables students;

2.3、查看一下二进制日志文件的位置

mysql>show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000002 |   520351 |              |                  |

+------------------+----------+--------------+------------------+

2.4、先恢复完整数据(恢复过程不要记录在日志中)

mysql>set globalsql_log_bin=0;

# mysql 

2.5、查看删除表时的记录位置

# mysqlbinlog /mybinlog/mysql-bin.000002  内容如下:

# at 520084

#130501 16:44:08 server id 1 end_log_pos 520212 Query thread_id=2exec_time=0error_code=0

use jiaowu/*!*/;

SET TIMESTAMP=1367397848/*!*/;

insert into students (Name,Age,Gender) values ('hadoop',22,'M')

/*!*/;

# at 520212

#130501 16:44:08 server id 1  end_log_pos 520239    Xid=308

COMMIT/*!*/;

# at 520239 删除命令在这个时刻开始执行的

#130501 16:45:37 server id 1 end_log_pos 520351 Query thread_id=2exec_time=0error_code=0

SET TIMESTAMP=1367397937/*!*/;

DROP TABLE `students` /* generated by server */

/*!*/;

DELIMITER ;

# End of log file

2.5、将二进制文件中完整备份到删除表之前的记录导出

# mysqlbinlog--stop-position=520239/mybinlog/mysql-bin.000002>/root/change.sql

解释:

--start-position 指定从哪开始导出二进制日志

--stop-position 指定到哪结束

--start-datetime 从哪个时间开始

--stop-datetime 到哪个时间结束

2.6、将改变的数据库日志导入到mysql库中

# mysql

2.7、见证奇迹的时刻数据库恢复成功,并且插入的数据也还原回来了

mysql>select Name,Age,Gender from students whereName='hadoop';

+--------+------+--------+

| Name   | Age  | Gender |

+--------+------+--------+

| hadoop |   22 | M      |

+--------+------+--------+

二、select命令也能完成逻辑备份比mysqldump更节约空间,速度更快,但比mysqldump用起来要麻烦,并且备份出来的数据都是纯文本信息,没有额外的开销空间,适合备份某张表模拟备份一张表

1、备份出来,保存在某个目录下,但需要注意的是,这个目录下的文件的具有权限,当登录到mysql时需要具有执行的权限

mysql>select * into outfile '/tmp/tutor.txt' from tutors;

保存为.txt格式:因为它是纯文本格式的,保存的是表格式的信息,如下所示:

# cat /tmp/tutor.txt

1   HongQigong  M   93

2   HuangYaoshi M   63

3   Miejueshitai    F   72

4   OuYangfeng  M   76

5   YiDeng  M   90

6   YuCanghai   M   56

7   Jinlunfawang    M   67

8   HuYidao M   42

9   NingZhongze F   49

2、恢复数据库需要创建一个空表,模仿原来的表创建

mysql>create table tutor like tutors;

把原来的表删除了

mysql>drop tutors;

mysql>load data infile '/tmp/tutor.txt' into table tutor;

验证:

mysql>select * from tutor;

+-----+--------------+--------+------+

| TID | Tname        | Gender | Age  |

+-----+--------------+--------+------+

|   1 | HongQigong   | M      |   93 |

|   2 | HuangYaoshi  | M      |   63 |

|   3 | Miejueshitai | F      |   72 |

|   4 | OuYangfeng   | M      |   76 |

|   5 | YiDeng       | M      |   90 |

|   6 | YuCanghai    | M      |   56 |

|   7 | Jinlunfawang | M      |   67 |

|   8 | HuYidao      | M      |   42 |

|   9 | NingZhongze  | F      |   49 |

+-----+--------------+--------+------+

当然用select也可以把表中符合条件的语句备份出来,这里不再做演示了,很简单。

这种方法适合于某长表的备份,但不会记录到二进制日志中

三、利用LVM快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备份,进而实现数据库的备份。用lvm的快照来备份速度是非常快的,而且几乎热备,恢复也很快速,操作也简单,完整恢复后再将相应二进制恢复即可。前提:

1、数据文件要在逻辑卷上

2、此逻辑卷所在卷组必须有足够空间使用快照卷

3、数据文件和事务日志要在同一个逻辑卷上

步骤:

1、启动事务

mysql>start transaction;

模拟启动事务时能否施加锁

mysql>insert into tutor (Tname) values ('stu001');

2、打开会话,施加读锁,锁定所有表,此时别人是不能执行命令的(不能往数据库中插入数据)

mysql>flush tables with read lock;

mysql>flush logs;

查看一下二进制日志的位置:

mysql>show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000003 |      107 |              |                  |

+------------------+----------+--------------+------------------+注意:执行表锁定时,一定不要退出

3、通过另一个终端,保存二进制日志文件及相关信息位置

创建备份路径

# mkdir /backup/

# mysql -e 'show master status\G' >/backup/master-`date +%F`.info

如数据库有用户名和密码要加 -u -p

4、创建快照卷

# lvcreate -L 50M -s -p r -n mydata-snap /dev/myvg/mydata

5、释放锁

mysql>unlock tables;

插入两行数据:

mysql>setsql_log_bin=1;

mysql>insert into tutor (Tname) values ('stu002');

mysql>insert into tutor (Tname) values ('stu003');

查看二进制日志文件的位置

mysql>show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000003 |      573 |              |                  |

+------------------+----------+--------------+------------------+

6、挂载快照卷,备份

# mount /dev/myvg/mydata-snap /mnt/ -o ro

查看:

# ls /mnt/

data  lost+found

创建备份目录

# mkdir /backup/full-backup-`date +%F`

# cp /mnt/data/* /backup/full-backup-2013-05-06/ -a

7、卸载/mnt,删除快照卷

# umount /mnt/

# lvremove --force /dev/myvg/mydata-snap

8、增量备份二进制日志

首先删除二进制日志文件,对我们没有太大用处

# rm -rf /backup/full-backup-2013-05-06/mysql-bin.* -f

现在模拟数据库被格式化

格式化之前先把二进制日志备份出来

# mysqlbinlog   /mydata/data/mysql-bin.000003>/backup/`date +%F`.sql

关闭mysql服务器

# service mysqld stop

# rm -rf /mydata/data/*

# cp /backup/full-backup-2013-05-06/* /mydata/data/ -a

mysql>use jiaowu;

Database changed

mysql>select * from tutor;

+-----+--------------+--------+------+

| TID | Tname        | Gender | Age  |

+-----+--------------+--------+------+

|   1 | HongQigong   | M      |   93 |

|   2 | HuangYaoshi  | M      |   63 |

|   3 | Miejueshitai | F      |   72 |

|   4 | OuYangfeng   | M      |   76 |

|   5 | YiDeng       | M      |   90 |

|   6 | YuCanghai    | M      |   56 |

|   7 | Jinlunfawang | M      |   67 |

|   8 | HuYidao      | M      |   42 |

|   9 | NingZhongze  | F      |   49 |

+-----+--------------+--------+------+

将二进制日志文件导入

mysql>source /backup/2013-05-05.sql

mysql>select * from tutor;

+-----+--------------+--------+------+

| TID | Tname        | Gender | Age  |

+-----+--------------+--------+------+

|   1 | HongQigong   | M      |   93 |

|   2 | HuangYaoshi  | M      |   63 |

|   3 | Miejueshitai | F      |   72 |

|   4 | OuYangfeng   | M      |   76 |

|   5 | YiDeng       | M      |   90 |

|   6 | YuCanghai    | M      |   56 |

|   7 | Jinlunfawang | M      |   67 |

|   8 | HuYidao      | M      |   42 |

|   9 | NingZhongze  | F      |   49 |

|  10 | stu001       | M      | NULL |

|  11 | stu002       | M      | NULL |

|  12 | stu003       | M      | NULL |

+-----+--------------+--------+------+

mysql>setsql_log_bin=1;

mysql>show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000003 |      107 |              |                  |

+------------------+----------+--------------+------------------+

恢复到了还原前的状态

这就是逻辑卷实现的一次完全备份

如果在完整备份后MySQL出现故障,与mysqldump一样,先恢复上次的完整备份,再利用二进制日志恢复,找到完整备份时的二进制位置,把从那时到故障前的日志用mysqlbinlog导出来,然后导入到MySQL中就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xamarin.Forms弹出对话框插件

微信公众号:Dotnet9,网站:Dotnet9,问题或建议,请网站留言;如果您觉得Dotnet9对您有帮助,欢迎赞赏。Dotnet9.com内容目录实现效果业务场景编码实现本文参考源码下载1.实现效果弹出动画 2.业务场景…

Pycharm安装第三方库

转载地址: https://www.cnblogs.com/bwjblogs/p/12839463.html 今晚想安装一些第三方库但是pip版本低,安装一直报错,输入升级的命令也一直不行。于是在pycharm上安装,但是还是一直失败,下面提出解决办法。 然后在搜索…

Python中Numpy库中的Numpy常量

import numpy as np 自然对数: np.e e 2.71828182845904523536028747135266249775724709369995… 圆周率: np.pi pi 3.1415926535897932384626433… (正)无穷大: np.inf Inf,Infinity,PINF 和 infty 是…

CAP 3.0 版本正式发布

前言大家好,我们很高兴宣布 CAP 发布了 3.0 版本正式版。自从上次 CAP 2.6 版本发布 以来,已经过去了几个月的时间,关注的朋友可能知道,在这几个月的时间里,也发布了几个预览版的 3.0 版本的NuGet包。3.0 是一个主要版…

mysql字符集变为gbk_MYSQL数据库默认latin1字符集转换为GBK或UTF8

可以采用下面的方法latin1字符集转换为gbk字符集或utf8字符集。具体的转换步骤如下:一、latin1转gbk1、导出数据库mysqldump --default-character-setlatin1 -h 数据库连接ip -u root -P 3306 -p数据库密码 db_name table_name > /usr/home/test/table_name.sql2…

微服务统计,分析,图表,监控一体化的HttpReports项目在.Net Core 中的使用

简单介绍HttpReports 是 .Net Core 下的一个Web项目, 适用于WebAPI,Ocelot网关应用,MVC项目,非常适合针对微服务应用使用,通过中间件的形式集成到您的项目中,可以让开发人员快速的搭建出一个 数据统计,分析…

numpy.exp()简单理解

numpy.exp() 就相当于e的()次方 import numpy as npa np.exp(1) print(a)b np.exp(2) print(b)# 结果: # a为: 2.718281828459045 为e的一次方 # b为: 7.38905609893065 为e的二次方

查看node的位置_升级Node版本RN项目运行报错cb.apply is not a function

今日打算安装一下ReactNative官方推荐的脚手架工具Ignite。infinitered/ignite​github.comIgnite是一套整合了 Redux 以及一些常见 UI 组件的脚手架。它带有一个命令行可以生成 app、组件或是容器。在安装的过程中,提示当前系统安装的node版本过低,无法…

C++构造函数调用规则

1.拷贝函数的值拷贝&#xff1a; #include <iostream> using namespace std;//构造函数的调用规则&#xff1a; //1,创建一个类&#xff0c;C编译器会给每个类都添加至少3个函数 //默认函数(空实现)&#xff0c;析构函数(空实现)&#xff0c;拷贝函数(值拷贝)class Pers…

HTTP Strict Transport Security (HSTS) in ASP.NET Core

本文是《2020年了&#xff0c;再不会HTTPS就老了》的后篇&#xff0c;本文着重聊一聊HTTP Strict Transport Security协议的概念和应用。启用 HTTPS 还不够安全现在很多站点通过HTTPS对外提供服务&#xff0c;用户在访问某站点&#xff0c;往往会直接输入站点域名&#xff08;b…

mysql支持的平台和操作系统_MySQL 数据库所支持的操作系统_MySQL

MySQL数据库所支持的操作系统&#xff1a;我们使用GNU Autoconf&#xff0c;因此将MySQL移植到所有使用Posix线程和C编译器的现代系统是可能的。(要求服务器支持线程。如果只是编译客户端代码&#xff0c;则只需要C编译器)。我们主要在Linux(SuSE和Red Hat)、FreeBSD和Sun Sola…

C++深拷贝与浅拷贝

浅拷贝&#xff1a; 简单的赋值拷贝操作。 深拷贝&#xff1a; 在堆区重新申请空间&#xff0c;进行拷贝操作。 首先我们先写这样的一段代码&#xff1a; #include <iostream> using namespace std; //深拷贝与浅拷贝class Person {public:Person() {cout << &qu…

BeetleX轻松搭建HTTP和Weboskcet网关

在新版本的BeetleX.Bumblebee中实现了对Weboskcet代理的支持&#xff0c;因此使用BeetleX搭建同时支持HTTP和Weboskcet的网关只需要几行代码的工作就能完成&#xff1b;接下来构建一个简单的网关程序并测试一下对asp.net core SignalR进行代理的应用。引用组件使用BeetleX构建网…

[功能发布]Excel与PowerBI互通互联升级版连接SSAS和AzureAS

Excel催化剂发自内心地热爱着PowerBI社区&#xff0c;从最开始提供了PowerBIDeskTop的互通互联功能&#xff0c;到无偿奉献所有此功能的核心原代码&#xff0c;再到今天的高潮&#xff0c;献上最具商业价值的高级功能&#xff0c;让企业级商业智能BI项目插上翅膀&#xff0c;最…

window oracle 只有bak文件怎么恢复_一起来学习Oracle的备份恢复基础吧-4

基于backup controlfile的恢复使用备份的控制文件在实际工作中的两种情况&#xff1a;当前控制文件全部损坏&#xff0c;而数据文件备份、控制文件备份及当前的日志处在不同的SCN版本&#xff0c;它们之间又增加过表空间(数据文件)。当前控制文件没有损坏&#xff0c;但是想恢复…

微服务、容器和Kubernetes的2020你怎么看?

历史上&#xff0c;有些年份比其他年份容易预测。因为市场出现的稳定性使追踪趋势线变得更加容易。2020年将是企业向微服务迁移的关键一年&#xff1a;稳定并逐步地向主流应用过渡。毫无疑问&#xff0c;IT组织正在转向微服务架构。微服务将应用程序分解为许多小部分&#xff0…

C++类对象作为类成员

C类中的成员可以是另一个类的对象&#xff0c;我们称该成员为对象成员 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring>//类对象作为类成员 class Phone {public:Phone(string PName) {cout << "Phone函数的调用&…

mysql revoke详解_MySQL删除用户权限(REVOKE)

MySQL 数据库中可以使用 REVOKE 语句删除一个用户的权限&#xff0c;此用户不会被删除。语法格式有两种形式&#xff0c;如下所示&#xff1a;1) 第一种&#xff1a;REVOKE [ ( ) ] [ , [ ( ) ] ]…ON FROM [ , ]…2) 第二种&#xff1a;REVOKE ALL PRIVILEGES, GRANT OPTIONFR…

.NET 大数据实时计算--学习笔记

摘要纯 .Net 自研大数据实时计算平台&#xff0c;在中通快递服务数百亿包裹&#xff0c;处理数据万亿计&#xff01;将分享大数据如何落地以及设计思路&#xff0c;技术重难点。目录背景介绍计算平台架构项目实战背景介绍计算平台架构分片实时计算计算平台数据统计模型开源项目…

C++静态成员函数

#include <iostream> using namespace std;//静态成员函数 //所有对象共享同一个函数 //静态成员函数只能访问静态成员变量class Person {public:static void func() {m_A 100;//静态成员函数可以访问静态成员变量 // m_B 200;//报错&#xff0c;静态成员函数不可以访…