mysql 数据备份恢复_备份和恢复

mysql 数据备份恢复_备份和恢复
前言 MySQL数据库最重要的部分就是数据,所以保证数据不被损坏尤为重要,大家都知道911事件,当时非常多的数据丢失,导致经济混乱。接下来我们就来讲讲MyS…

	《MySQL数据库》MySQL备份恢复[数据库教程]

前言

MySQL数据库最重要的部分就是数据,所以保证数据不被损坏尤为重要,大家都知道911事件,当时非常多的数据丢失,导致经济混乱。接下来我们就来讲讲MySQL是如何保障数据完整,应对特殊情况,如何恢复等。

备份

备份检查:保证备份没有问题,并且定期演练恢复数据。

备份方式:逻辑备份,物理备份。

逻辑备份方式:mysqldump(MDP),replication,mydumper,load data in file。

物理备份方式:MySQL Enterprise Backup(企业版) , percona Xtrabackup (PBK,XBP)

1. mysqldump(MDP)

InnoDB 可以使用快照备份,通过建库,建表,插入语句备份数据。

非Innodb 表备份需要锁表, 非Innodb 表主要是MySQL系统表。

参数说明:

mysqldump  需要连接到数据库,连接方式和mysql 一致。

创建备份目录

mkdir -p backup    -- linux 下执行创建文件夹
chown -R mysql.mysql /usr/local/mysql/backup   -- linux 下执行赋权

备份命令:

mysqldump -uroot -proot -A > /usr/local/mysql/backup/mysqlbackup.sql  -- -A 备份全库的意思

技术图片

备份多库

mysqldump -u cop -p -B cop copdb   > copdb1.sql       -- -B参数导出多个库。

备份某些表

mysqldump -uroot -proot castledata test test1 > /usr/local/mysql/backup/mysqlbackup1.sql -- 导出一张表的结构和数据:castledata 库名;cop_toperator,cop_tsys是表名。

其实这个时候你会发现一个问题,库备份了,但是数据还是会继续操作的,真的出现误删除数据库,如何才能完整的恢复呢。

第一反应就是 备份加binlog ,但是binlog的开始位置点却不好找, 如何才能准确无误的找到这个开始位置点呢?

重点:

--master-data=2    -- 2:表示会再备份文件中加入一句注释,写下binlog文件和开始位置点。 默认是0。
mysqldump -uroot -proot --master-data=2  castledata test test1 > /usr/local/mysql/backup/mysqlbackup2.sql     -- 使用上面的参数备份

技术图片

mysqldump -uroot -proot -F -B castledata > /usr/local/mysql/backup/mysqlbackup3.sql    

-F 参数是备份的时候切一个新的binlog日志。

–single-transaction           开启事务,获取快照,对innodb存储引擎有效。

-R                                      备份存储过程及函数

–triggers                            备份触发器

-E                                       备份事件

–max_allowed_packet       客户发数据包到服务端的大小,备份的是表示服务端发到客户端的大小

完整生产备份语句:

mysqldump -uroot -proot -R --triggers -E --single-transaction --master-data=2 --max_allowed_packet=64 -B castledata > /usr/local/mysql/backup/mysqlbackup5.sql

恢复

模拟备份到恢复的过程:

第一步准备原始数据:

create database backup;
use backup
create table t1 (id int);
insert into t1 values(1),(2),(3);
insert into t1 values(11),(22),(33);
insert into t1 values(111),(222),(333);
insert into t1 values(1111),(2222),(3333);
insert into t1 values(11111),(22222),(33333);
commit;

第二步备份数据:

mysqldump -uroot -proot -R --triggers -E --single-transaction --master-data=2 --max_allowed_packet=64 -B backup > /usr/local/mysql/backup/mysqlbackup_`date +%F `.sql

第三步模拟后续数据操作:

create table t2 (id int);
insert into t2 values(1),(2),(3);
insert into t2 values(11),(22),(33);
insert into t2 values(111),(222),(333);
insert into t2 values(1111),(2222),(3333);
insert into t2 values(11111),(22222),(33333);
commit;

第四步逻辑操作出错:

drop database backup;

第五步恢复数据:

1. 获取最近一次备份文件中的binlog 起点信息:

技术图片

binlog 日志原理:https://www.cnblogs.com/jssj/p/13472394.html

2.恢复备份数据

set sql_log_bin = 0;
source /usr/local/mysql/backup/mysqlbackup_2020-08-18.sql;
set sql_log_bin = 1;

3. 截取binlog

起点:在第一步中已经获取, 终点:使用命令 ” show binlog events in ‘mysql-bin.000005‘ ; ”  查询

技术图片

取 3362 即可。  执行一下命令截取

mysqlbinlog --start-position=1861 --stop-position=3362 /usr/local/mysql/binlog/mysql-bin.000005 > /usr/local/mysql/backup_binlog.sql

4. 恢复binlog 日志

set sql_log_bin = 0;
source /usr/local/mysql/backup_binlog.sql;
set sql_log_bin = 1;

ok 恢复失败。binlog的恢复。原因为我们开启了GTID 所以截取命令需要加入 参数  –skip-gtids   。 不校验GTID号。

重新截取binlog:

mysqlbinlog --skip-gtids --start-position=1861 --stop-position=3362 /usr/local/mysql/binlog/mysql-bin.000005 > /usr/local/mysql/backup_binlog.sql
set sql_log_bin = 0;
source /usr/local/mysql/backup_binlog.sql;
set sql_log_bin = 1;

ok 恢复成功。验证数据。

技术图片

 

额外扩展:从全备中获取单库,创建表,插入数据

1、获得表结构
# sed -e/./{H;$!d;} -e x;/CREATE TABLE `city`/!d;q  full.sql>createtable.sql
2、获得INSERT INTO 语句,用于数据的恢复
# grep -i INSERT INTO `city`  full.sqll >data.sql &
3.获取单库的备份
# sed -n /^-- Current Database: `world`/,/^-- Current Database: `/p all.sql >world.sql

 

总结

上面讲的都是逻辑备份,MySQL还可以支持物理备份,可以使用工具Percona-XtraBackup 来实现。

《MySQL数据库》MySQL备份恢复

原文地址:https://www.cnblogs.com/jssj/p/13514597.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6716.html

(0)
上一篇 2023-04-05
下一篇 2023-04-05

相关推荐

  • ondblclick=”return showCodeList 分析思路[通俗易懂]

    ondblclick=”return showCodeList 分析思路[通俗易懂]

  • oracle删除超过一千条数据_oracle批量删除表数据

    oracle删除超过一千条数据_oracle批量删除表数据公司内做的项目是工厂内的,一般工厂内数据要求的是实时性,很久之前的数据可以自行删除处理,我们数据库用的oracle,所以就想着写一个脚本来删除,这样的话,脚本不管放在那里使用都可以达到效果 由于服务器

    2023-05-07
    118
  • sqlserver安装完成但失败_sql server 2008安装出现错误

    sqlserver安装完成但失败_sql server 2008安装出现错误最近安装SQL 2019遇到这个问题,试过网上几乎所有办法,都安装不上。最后在微软社区提问解决了,由于这个问题不常见,并且网上几乎没有正确的解决方案,因此将我的解决过程及经验记录分享一下,也为后来者提

    2023-05-09
    113
  • MySQL-InnoDB为什么采用B+树结构实现索引

    MySQL-InnoDB为什么采用B+树结构实现索引索引的作用是提高查询效率,其实现方式有很多种,常见的索引模型有哈希表、有序列表、搜索树等。 哈希表 一种以key-value键值对的方式存储数据的结构,通过指定的key可以找到对应的value。 哈…

    2023-02-23
    111
  • 小米10对比荣耀V30销量分析,为什么屡战屡败「终于解决」

    小米10对比荣耀V30销量分析,为什么屡战屡败「终于解决」     小米10系列发布已经有一段时间,自从发布的时候小米高管就在微博发布各种DISS友商荣耀的言论,其实这无非就是小米营销的惯用手段之一。大家都很了解,小米是嘴巴没停过,销量没赢过,今天用小米1…

    2023-02-10
    109
  • Python strip函数:字符串删除空白字符

    Python strip函数:字符串删除空白字符Python中,字符串是一个非常常见的数据类型。而在字符串中,可能会出现很多无用的空白字符,如空格、制表符、换行符等等。这些空白字符在字符串处理中经常需要被删除。Python的strip()函数就是专门用来删除字符串中的空白字符的函数。

    2023-12-07
    82
  • 学习wxPython的指南

    学习wxPython的指南
    如果你是一名Python开发人员,并且打算创建跨平台的GUI应用程序,那么wxPython是一个不错的选择。wxPython是Python编程语言的GUI工具包,基于wxWidgets,可以创建本地风格的、高度可定制的GUI元素。wxPython具有高度的可移植性和灵活性,可在大多数操作系统中使用。

    2024-05-19
    12
  • 01.MySQL实战45讲学习笔记—基础架构

    01.MySQL实战45讲学习笔记—基础架构今天开始把《MySQL实战45讲》的知识做一笔记,在加深印象的同时,希望对其它人也有所帮助。 大体来说,Mysql可分为Server层和存储引擎层两大部分,如图: 其中,Serve层包括连接器、查询…

    2022-12-19
    99

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注