最近,笔者因为一些原因,不得不手动在生产环境下操作数据库。在生产环境下操作数据非常危险,如果update更新或delete删除语句忘写了where条件或者写错了where条件,那么只能跑路了。为了保证万无一失,笔者在操作数据库前会进行数据备份,如此一来,即使手抖出错,数据也能及时从备份中恢复。笔者总结了mysql几种备份数据的方法。

1. 小表快速备份

这种方法最简单,也是笔者备份小表常用的方式。对需要备份的表加读锁,避免备份期间数据被修改,然后建立一张和原表一样结构的表,然后将原表数据复制到新表中,数据备份完成之后需要将将锁释放,命令如下所示

-- 对表加读锁

flush tables with read lock;

-- 创建备份表与原表数据结构一致

create table evt_tmp like evt;

-- 将原表数据拷入到新表中

insert into evt_tmp select * from evt;

-- 释放锁

unlock tables;

2. mysqldump

使用mysqldump命令,将数据导出成文件,文件中记录的是sql脚本数据,这种备份方式速度较慢,输出文件较大。笔者以test数据库为例,备份到test_bak数据库中

2.1 针对非事务引擎对数据库加读锁

flush tables with read lock使用mysqldump命令备份

mysqldump -u root -p --all-databases --master-data > backup_20191121.sql如果我们不想备份整个实例的所有数据库,

备份指定的数据库命令

mysqldump -u root -p --databases test --master-data > backup_20191121_test.sql

备份指定的表的命令

mysqldump -u root -p test tb1 --master-data > backup_20191121_tb1.sql然后我们需要根据备份文件恢复数据

mysql -hlocalhost -uroot -p test_bak < backup_20191121.sql

2.2 针对事务型数据库

mysqldum在备份事务型数据库时候,如果我们添加了—single-transaction参数,备份线程就不会阻塞任何读写连接,备份线程会标记一个时间点t,这种备份方式会生成两种文件,一种全量文件,另一种是增量文件,时间点之前的数据存放在全量文件中,时间点之后变动的数据存放在增量数据文件中,恢复数据时候,需要先恢复全量文件,再恢复增量文件。具体的命令执行过程如下

全量备份test数据库下tb1数据命令

mysqldump -u root -p –t test –tables tb1 --master-data –single-transaction > backup_20191010.sql

备份的数据文件有如下信息

CHANGE MASTER TO MASTER_LOG_FILE='master.000002', MASTER_LOG_POS=6632;

说明增量备份文件从master.000002开始

恢复数据如下两个步骤恢复时间点之前的全部数据

恢复时间点之后的增量备份更新

mysql -hlocalhost -uroot -p test_bak < backup_20191121.sql

mysqlbinlog master.000002 master.000003 | mysql

3. 复制文件的备份方式

除了上述备份方式,mysql针对myisam和innodb有专门的拷贝数据文件的备份方式。

3.1 MyIsam

针对MyIsam引擎备份数据非常简单,MyISAM数据文件独立于操作系统,可以轻松的从Windows服务器移植到Linux服务器

我们需要在复制数据文件前,需要加锁,保证在复制期间,数据不会被修改

--加锁

flush tables with read lock;

--加锁后执行数据文件拷贝命令

-- 完成复制文件后,将锁释放

unlock tables

3.2 Innodb

笔者以test数据库为例,将test数据库的数据备份到test_bak中首先我们导出test数据库的表结构,然后在test_bak中创建相同的库表结构

-- 导出我们需要的test数据库tb1表结构

mysqldump –d test –u root –p > structure.sql

-- 在test_bak库中执行structure.sql语句,创建数据表

use test_bak

source structure.sql

2. 在test_bak中执行如下命令,删除表空间

alter table tb1 discard tablespace

3. 在源数据库test中执行如下加锁命令,此时在数据库中会多出一个cfg文件

use test

flush table tb1 for export

4. 将test数据库目录中.ibd文件和cfg文件拷贝到test_bak数据库中

5. 释放test数据库的锁

unlock tables

6. 在test_bak中导入相应的表空间,备份完成

alter table tb1 import tablespace

执行最后一步的时候可能会出现如下错误,原因是复制的.ibd文件权限不足,赋权即可

Tablespace is missing for table

mysql 备份表数据_MySQL备份数据库相关推荐

  1. mysql创建备份表脚本_MySQL 备份脚本(单库/分库分表)

    MySQL数据库分库备份 数据库密码保存在/etc/my.cnf文件中,所以在执行与mysql相关的命令不需要输入密码 分库备份思路: mysqldump db1 >db1.sql.gz mys ...

  2. mysql 定期清理表数据_mysql 定期清理表数据库

    zabbix数据库备份整理 zabbix数据库备份整理 zabbix数据库备份整理 zabbix的所有操作都是存在数据库里,在数据库里都会有对应的表,所以对zabbix备份,只需备份数据库就行了. 采 ...

  3. 导出mysql某个表数据_MYSQL使用mysqldump导出某个表的部分数据

    MySQLdump是MySQL自带的导出数据工具,通常我们用它来导出MySQL中,但是有时候我们需要导出MySQL数据库中某个表的部分数据,这时该怎么办呢? mysqldump命令中带有一个 --wh ...

  4. mysql清空表数据_mysql数据库之如何清空表中数据

    本篇文章主要讲述的是在数据库中使用清空命令,具有一定学习价值,有需要的朋友可以了解一下,希望能够对你有所帮助. 在做数据迁移,数据清洗或者写web项目时要将数据替换更新,那么有时要将表做清空处理 常用 ...

  5. plsql导出表结构_mysqldump命令详解 Part 5-按条件备份表数据

    实验环境: MySQL 5.7.25 Redhat 6.10 前面我们建立了数据库并建立相关的对象 数据库 表 存储过程 函数 触发器 事件 今天的内容为按条件备份表数据 1. 备份语句 我们来备份t ...

  6. mysql需要备份的数据_Mysql根据需要备份数据

    因为数据的重要性,所以要定时的备份数据,当灾难来临时有一手,确保数据不丢失.这就是DBA的职责,保证数据的安全和持续服务. 备份单个数据库多种参数使用 mysql数据库自带了一个很好的备份命令,就是M ...

  7. mysql清空数据库所有表的命令_mysql清空表数据命令是什么?_数据库,mysql,清空表数据...

    mysql服务无法启动怎么解决_数据库 mysql服务无法启动的解决方法是:1.配置环境变量:2.在mysql安装目录下,新建my.ini文件,设置默认字符集.端口.存储引擎等:3.执行[mysqld ...

  8. Oracle快速备份表数据

    Oracle数据库中备份表数据. 例子: 1 create table table_name_bak as select * from table_name 1 create table table_ ...

  9. oracle 快速备份表数据

    oracle 快速备份表数据 CreateTime--2018年2月28日17:04:50 Author:Marydon UpdateTime--2017年1月20日11:45:07 1.1.9.3 ...

最新文章

  1. 《强化学习周刊》第30期:Deep Mind开展人机交互的新试点研究、MIT提出神经进化优化框架...
  2. Halcon知识:如何求一个工件的粗细
  3. 第四代:大规模集成电路计算机
  4. C++ 类模板二(类模版与友元函数)
  5. 类似jquery的一个demo
  6. ASP.NET在类中引用Application和Server.MapPath
  7. 使用 typescript ,提升 vue 项目的开发体验(2)
  8. mysql查询最接近的记录
  9. 用iscsi和DHCP搭建一个windows无盘系统站【笔记】
  10. Mac book 合并分区,报错文件系统验证失败的解决办法
  11. iOS开发笔记1:ToDoList、相册、地图应用及新浪微博
  12. Java继承思想(理解+代码)
  13. 【C#进阶四】详细总结C#中的文件和I/O流之文件和目录(File 、 FileInfo、Directory、DirectoryInfo和Path)
  14. Python 变量赋值和命名规则
  15. 这14种嵌入式实时系统,你用过哪些?
  16. 百度地理围栏的一个坑
  17. 人大计算机跨考,2018考研心得:计算机专业跨考人大经济学全攻略.doc
  18. ICP许可证申请误区一:我是创业型小公司,开发了一款APP,需不需要申请ICP许可证,该怎么办?
  19. Python保留两位小数处理
  20. U盘安装Windows 7系统

热门文章

  1. # Markdown 常用语法(画图)
  2. “星河杯”隐私计算大赛技术分享会成功举办
  3. 保险行业如何实现私域快速增长
  4. GomTV版MV介绍
  5. python输入姓名输出职务_python题中输入姓名的笔画数,输出所属性格,及该种性格人的典型代表?...
  6. 使用ABB PC SDK开发ABB上位机记录
  7. 操作系统(OS) 基础知识
  8. JavaWeb开发简介
  9. mac os 复制粘贴 快捷键设置修改 终极解释
  10. scp大文件出现stalled