mysqldump

什么是 mysqldump ?

mysqldump 是 MySQL 用于执行逻辑备份的一款工具,可以根据原始数据库对象以及表的定义和数据来生成一系列可以被执行的 SQL 语句。

通常我们用它作为备份或者迁移数据。 mysqldump 命令还可以输出成 CSV 文件,其他边界的文本或者 XML 格式。

如何使用 mysqldump?

导出整个数据库(包含数据)

mysqldump -u username -p dbname > dbname.sql

导出数据库结构

mysqldump -u username -p -d dbname > dbname.sql

导出数据库中的某张表

mysqldump -u username -p dbname tablename > tablename.sql

导出数据库中的某张表结构

mysqldump -u username -p -d dbname tablename > tablename.sql

导入数据

mysql -u username -p dbname < dbname.sql

也可以在 msyql CLI 中导入:

source /home/dbname.sql

mysqldump 的常见参数:

--single-transaction:

当设置此参数时,会将事务隔离模式设置为 REPEATABLE_READ 并在导出数据前,发送一个 START_TRANSACTION SQL语句到 MySQL Server 上。

此参数仅仅对事务表(如 InnoDB)有作用,因为在导出数据时,除了保证数据一致性的状态还能同时保证其他应用在开启事务是不会被阻塞。

需要注意的是,该参数只能保证 InnoDB 表导出数据时的一致性状态。对于MyISAM或者MEMORY的表在导出时,状态可能会发生改变。

当使用此次参数 mysqldump 正在导出数据时,为了确保得到有效的结果(正确的表内容和二进制坐标),要保证其他的连接不使用 ALTER_TABLE, CREATE_TABLE, DROP_TABLE, RENAME_TABLE, TRUNCATE_TABLE 等操作。因为一致性的读不会隔离这些操作,所以当一个表被导出时会导致 mysqldump 使用 SELECT 操作会检索到不正确或者发生错误。

--single-transaction--lock-tables 是互斥的,如果指定 LOCK_TABLES 会导致对正在转储的数据进行锁定,仅允许读操作,直到所有的表被导出。

--quick:

该参数对转储大表时很有用.它会强制 mysqldump 一次从服务器中检索表中的一行,而不是检索整个行集并将其缓冲在内存中,然后再将其写出。

--flush-logs:

该参数的作用就是关闭当前使用的 binlog,然后创建一个新的 binlog 文件用于记录。

--master-data:

该参数可设置为 1 或者 2. 1 为默认值,不用表示指定。

当值为 1 时,在导出的 sql 文件中会下显示的加入被导出数据库的 binlog 名称以及位置。

当值为 2 时,在导出的 sql 文件中会以注释的方式加入被导出数据库的 binlog 名称以及位置。

主要用于为设置主从复制的从库导入 binlog 的名称及位置,等于 1 时,当导入此文件时,会自动的配置主库的信息。

等于 2 时,需要手动的配置主库的信息。

区别可见下图:

定期全量备份 MySQL

创建定期备份脚本

mkdir /home/mysql_backup
touch /home/mysql_backup/backup.log
touch /home/mysql_backup/MySQL_Full_Backup.sh
chomd 744 MySQL_Full_Backup.sh
mkdir /home/mysql_backup/data_dir

MySQL_Full_Backup.sh 内容

#!/bin/bash
# use mysqldump to Fully backup mysql data per day! # Path
BakDir=/home/mysql_backup
LogFile=/home/mysql_backup/backup.log
Datadir=data_dir/ # get time
Date=`date +%Y%m%d_cmi`
Begin=`date +"%Y年%m月%d日 %H:%M:%S"` # enter backup dir
cd $BakDir # Delete files 7 days ago
find data_dir -type f -mtime +7 -name "*.sql.tgz" -exec rm {} \; # set output filename
DumpFile=$Datadir$Date.sql
GZDumpFile=$Datadir$Date.sql.tgz # Back up and compress files
/usr/bin/mysqldump --single-transaction --master-data=2 -ucisco -pCiscoPass1! cmi > $DumpFile
/bin/tar -zvcf $GZDumpFile $DumpFile
/bin/rm $DumpFile # record log
Last=`date +"%Y年%m月%d日 %H:%M:%S"`
echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile

每天 24 点执行

crontab -e
59 23 * * * /bin/sh /home/mysql_backup/MySQL_Full_Backup.sh
# 打开服务
systemctl restart crond
systemctl enable crond

拓展

在对数据库备库进行备份时,使用 --single-transaction 做逻辑备份时,收到主库的的 DLL 会发生什么?

假设一个 DDL 针对表 t1,下面则是在备份中关键的语句逻辑:

# 设置隔离级别为可重复读
Q1:SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
# 开启一致性视图
Q2:START TRANSACTION WITH CONSISTENT SNAPSHOT;
/* other tables */
Q3:SAVEPOINT sp;
/* 时刻 1 */
# 拿到表结构
Q4:show create table `t1`;
/* 时刻 2 */
# 导入数据,添加 MDL 读锁
Q5:SELECT * FROM `t1`;
/* 时刻 3 */
# 释放 t1 MDL 锁
Q6:ROLLBACK TO SAVEPOINT sp;
/* 时刻 4 */
/* other tables */

Q4 前到达,没有影响,备份拿到的是 DDL 后的表结构。

在时刻 2 达到,由于一致性视图并不能阻止 DML 的操作,所以表结构发生变化。到 Q5 执行时,回报错 able definition has changed, please retry transaction,运行停止。

在时刻 2 和时刻 3 间到达,由于之前 SELECT 会占着 MDL 的读锁,binlog 同步过程被阻塞,会出现主从延迟的现象。直到 Q6 执行完成后,DDL 语句生效。

在时刻 4 开始后,mysqldump 释放 MDL 读锁,没有影响,备份的是 DDL 前的表结构。

参考

全量+增量备份

MySQL 备份的几种方式

MYSQLDUMP-DOC

MySQL 备份数据那点事的更多相关文章

  1. 定期从Docker上部署的MySQL备份数据

    前段时间公司停电,正巧赶上周一领导要开会要过一遍项目,然而项目所依赖的MySQL数据库是直接部署在宿主机,且因为各人部署方式不同的原因,花了很久才在开会前启动起来.于是开完会后,我第一件事就是把原先依 ...

  2. mysql 备份数据

    想在mysql库中某些数据备份下来. 1,创建一个新表,我们应需要保持表的原有属性 CREATE TABLE A LIKE B 这种方式可以把主键和索引一起copy过来. 2,把需要数据copy到新表 ...

  3. mysql 备份数据语句

    rem ******MySQL backup start********@echo offforfiles /p "D:\website\备份\数据库日常备份" /m backup ...

  4. mysql备份恢复详解

    前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lv ...

  5. mysql备份的4种方式

    mysql备份的4种方式 转载自:https://www.cnblogs.com/SQL888/p/5751631.html 总结: 备份方法 备份速度 恢复速度 便捷性 功能 一般用于 cp 快 快 ...

  6. 【MySQL】MySQL备份和恢复

    一.为什么要备份数据 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分为以下几种. 硬件故障 软件故障 自然灾害 黑客攻击 误操作 (占比最大) 所以, 为了在数据丢失之后能够 ...

  7. Linux(Centos)全自动异地备份数据(WEB+Mysql)

    文章开始之前,先问下各位站长一个问题:什么东西对于站长是十分重要的?其实对于站长而言,很多东西都是很重要的.但我们现在排除外在因素,把范围缩小到网站系统本身,哪些是非常重要的呢?网站数据就是其中之一了 ...

  8. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

    Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...

  9. Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录

    在日常的linux运维工作中,大数据量备份与还原,始终是个难点.关于mysql的备份和恢复,比较传统的是用mysqldump工具,今天这里推荐另一个备份工具innobackupex.innobacku ...

随机推荐

  1. Linux常用命令-不定时记录

    文件移动命令 命令格式:mv [-fiv] source destination 参数说明:-f:force,强制直接移动而不询问-i:若目标文件(destination)已经存在,就会询问是否覆盖- ...

  2. [解决]Hadoop 2.4.1 UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0

    问题:UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0 我的系统 win7 64位 Hadoop ...

  3. (记录)Jedis存放对象和读取对象--Java序列化与反序列化

    一.理论分析 在学习Redis中的Jedis这一部分的时候,要使用到Protostuff(Protobuf的Java客户端)这一序列化工具.一开始看到序列化这些字眼的时候,感觉到一头雾水.于是,参考了 ...

  4. WebApp 滚动列表的实现

    实现效果: 实现技术:overflow,flex,element::-webkit-scrollbar 实现步骤: //html:代码<div id="slider"> ...

  5. ArangoDB 界面介绍

    目录: 安装并运行本地ArangoDB服务器 使用Web界面与之交互 BASHBOARD COLLECTIONS QUERIES GRAPHS SERVICES USERS LOGS 安装: 下载地址 ...

  6. Xcode添加 eclipse 删除行、复制行快捷键

    在使用eclipse过程中,特喜欢删除一行和复制一行的的快捷键.而恰巧Xcode不支持这两个快捷键,再一次的恰巧让笔者发现了一个小窍门来增加这两个快捷键,以下是步骤: <p> </p ...

  7. Magicodes.IE已支持导出Word、Pdf和Html

    关于Magicodes.IE 导入导出通用库,通过导入导出DTO模型来控制导入和导出,支持Excel.Word.Pdf和Html. GitHub地址:https://github.com/xin-la ...

  8. MUI 混合开发移动app应用开发 --- app版本升级

    当我们的app开发完成之后,无可避免的以后会进行产品升级,那么我们希望在客户的手机上让app进行自动升级,可以分为自动升级和手动升级. 自动升级:一般在客户app第一次打开首页的时候. 手动升级:在a ...

  9. Ajax自我总结

    一念起.万水千山皆有情. 一念灭.沧海桑田已无心.     ------ 随记 本文主要针对ajax原理介绍,很少涉及实例,主要用于对知识的梳理总结,方便以后学习和查询... Ajax 一.Ajax是 ...

  10. 前端技术之:JavaScript Test 断言库

    expect 声称可以写更好的断言. https://github.com/mjackson/expect   chai 可以写BDD样式的断言,也可以写TDD样式的断言,可用于Node.js与浏览器 ...