首页 > 数据库 >MySQL实现备份(1)

MySQL实现备份(1)

时间:2022-09-20 00:34:15浏览次数:105  
标签:实现 备份 mysql -- mysqldump sql MySQL 数据库

基础知识:

备份类型:
  • 完全备份和部分备份

  • 冷备份、热备份、温备份
    温备份适用于:myisam
    热备份适用于:innodb

  • 物理备份和逻辑备份

完全备份和部分备份
  • 完全备份:备份所有数据
  • 部分备份:只备份部分数据内容
增量备份和差异备份:

两者第一次都需要做一次完全备份。

  • 增量备份:备份上一次备份后发生变化的数据。

  • 差异备份:备份上一次的完全备份后发生变化的数据文件

冷备份、热备份、温备份
  • 冷备:读、写操作均不可进行,数据库停止服务

  • 温备:读操作可执行;但写操作不可执行

  • 热备:读、写操作均可执行

 MyISAM:温备,不支持热备
 InnoDB:都支持(一般使用热备)
物理备份和逻辑备份的区别
  • 物理备份:直接复制数据文件进行备份

  • 逻辑备份:导出数据库里面的数据另存到一个文件。

逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现

MySQL备份的内容:

  • 用户数据:例如业务数据库

  • 二进制日志、innodb的事务日志

  • 用户账号、权限等(系统的mysql数据库里面)

  • 服务器的配置文件

备份注意要点:

  • 需要备份哪些数据

  • 多久备份一次(能容忍丢多少数据)

  • 备份产生的数据库负载压力

  • 备份需要花费的时间

  • 数据恢复需要的时间

数据还原的注意要点

备份完了要测试一下能否正常使用

常用的备份工具:

  • 物理备份工具:实现冷备份,例如cp、tar、rsync等工具

  • 逻辑卷(LVM)快照功能(不常用)

  • 逻辑备份工具:mysqldump、xtrabackup、mysqlbackup等工具

逻辑备份工具
  • mysqldump:mysql数据库自带的一个客户端工具

  • xtrabackup:一个专业的备份工具

  • MariaDB Backup: 相当于xtrabackup改用给名

  • mysqlbackup:mysql企业版(收费)里面有

mysqldump工具

  • 基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中

  • 支持索引存储引擎,对MyISAM存储引擎进行温备,对InnoDB存储引擎支持热备以及完全备份、部分备份等功能。

mysqldump的三种命令格式:

有三种命令格式:

#格式一
mysqldump [OPTIONS] database [tables]   #支持指定数据库和指定多表的备份,但数据库本身定义不备份

#格式二
mysqldump [OPTIONS] -B DB1 [DB2 DB3...] #支持指定数据库备份,包含数据库本身定义也会备份

#格式三
mysqldump [OPTIONS] -A [OPTIONS]        #备份所有数据库,包含数据库本身定义也会备份
范例:
  • 格式一:备份一个数据库里面的所有表:
[root@CentOS8 ~]# mysqldump -u root -p'' hellodb
将hellodb这个数据库的信息查询出来并显示到屏幕

[root@CentOS8 ~]# mysqldump -u root -p'' hellodb  > hellodb.sql
将查询到的数据库信息重定向到一个文件中
  • 格式二:可以同时备份多个数据库
[root@CentOS8 ~]# mysqldump  -B hellodb  > hellodb.sql
  • 格式三:备份所有数据库
    注意:备份所有数据库的时候只会备份业务数据库和mysql数据库。
# information_schema:内存里面的内容
# performance_schema:记录性能相关的信息
# sys:performance_schema的简化版

[root@CentOS8 ~]# mysqldump -A >hello.sql备份所有数据库的时候
mysqldump的通用选项:
-E, --events:#备份相关的所有event scheduler

-R, --routines:#备份所有存储过程和自定义函数

--triggers:#备份表相关触发器,默认启用,用--skip-triggers,不备份触发器

--default-character-set=utf8 #指定字符集

-F, --flush-logs #备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文件,配合-A 或 -B 选项时,会导致刷新多次数据库。建议在同一时刻执行转储和日志刷新,可通过和--single-transaction或-x,--master-data 一起使用实现,此时只刷新一次二进制日志

--compact        #去掉注释,适合调试,节约备份占用的空间,生产不使用

-d, --no-data    #只备份表结构,不备份数据,即只备份create table

-t, --no-create-info #只备份数据,不备份表结构,即不备份create table

-n,--no-create-db #不备份create database,可被-A或-B覆盖

--flush-privileges #备份mysql或相关时需要使用

-f, --force       #忽略SQL错误,继续执行

--hex-blob        #使用十六进制符号转储二进制列,当有包括BINARY, VARBINARY,BLOB,BIT的数据类型的列时使用,避免乱码

-q, --quick     #不缓存查询,直接输出,加快备份速度

--master-data[=num]: #此选项须启用二进制日志,默认值为1

#1:所备份的数据之前加一条记录为CHANGE MASTER TO语句,适合于主从复制多机使用

#2:记录为被注释的#CHANGE MASTER TO语句,适合于单机使用,适用于备份还原

#此选项会自动关闭--lock-tables功能,自动打开-x | --lock-all-tables功能(除非开启--single-transaction)
mysqldump的MyISAM存储引擎相关的备份选项:

MyISAM不支持事务,只能支持温备;不支持热备,所以必须先锁定要备份的库,而后启动备份操作

-x,--lock-all-tables #加全局读锁,锁定所有库的所有表,同时加--single-transaction或--lock-tables选项会关闭此选项功能,

注意:数据量大时,可能会导致长时间无法并发访问数据库


-l,--lock-tables #对于需要备份的每个数据库,在启动备份之前分别锁定其所有表,默认为on,--skip-lock-tables选项可禁用,对备份MyISAM的多个库,可能会造成数据不一致

#注:以上选项对InnoDB表一样生效,实现温备,但不推荐使用
mysqldump的InnoDB存储引擎相关的备份选项:

InnoDB 存储引擎支持事务,可以利用事务的相应的隔离级别,实现热备

--single-transaction #备份的时候会开一个单独的事务来进行备份

#此选项Innodb中推荐使用,不适用MyISAM,此选项会开始备份前,先执行START TRANSACTION指令开启
事务

#此选项和--lock-tables(此选项隐含提交挂起的事务)选项是相互排斥.
备份大型表时,建议将--single-transaction选项和--quick结合一起使用

推荐备份策略

InnoDB建议备份策略
mysqldump -uroot -p -A -F --single-transaction 
	  --master-data=1 --flush-privileges 
	  --default-character-set=utf8 --hex-blob 
	  > ${BACKUP}/fullbak_${BACKUP_TIME}.sql

参数说明:

-u:指定用户名  -p:指定用户密码

-A:使用mysqldump的格式三,备份整个数据库

-F:执行flush logs命令,生成新的二进制日志文件

--single-transaction: #备份的时候会开一个单独的事务来进行备份

--hex-blob:有二进制数据就需要添加这个

${BACKUP}/fullbak_${BACKUP_TIME}.sql:备份文件存放路径,文件夹/文件_备份时间.sql

注意:
1. 有了-A:备份所有的数据库(自然也就备份了时间、存储过程这些)   -E -R --triggers都不需要加了

2.不建议在mysql中创建时间、触发器、函数这些。因为这样会加大mysql的负载
MyISAM建议备份策略
mysqldump -uroot -p -A -F  -x
	  --master-data=1 --flush-privileges
 	  --default-character-set=utf8  --hex-blob
	  > ${BACKUP}/fullbak_${BACKUP_TIME}.sql

myslq客户端的命令格式:

使用模式:交互式和脚本式

交互式:
mysql [OPTIONS] [database]
脚本式:

mysql [OPTIONS] < /path/somefile.sql

cat /path/somefile.sql | mysql [OPTIONS]

mysql>source   /path/from/somefile.sql

链接:https://www.cnblogs.com/heyongshen/p/16663264.html

标签:实现,备份,mysql,--,mysqldump,sql,MySQL,数据库
From: https://www.cnblogs.com/heyongshen/p/16706435.html

相关文章

  • Activiti6.0下activiti-app实现一个简单请假流程
    Activiti6.0下activiti-app、activiti-admin、activiti-rest的基本配置,详见上文:https://www.cnblogs.com/gdjlc/p/16703897.html下面实现一个简单请假流程。一、创建流程......
  • Delphi 用程序实现自动的html操作
    unitUnit1; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,OleCtrls,SHDocVw,mshtml,StdCtrls,......
  • 大家都在用MySQL count(*)统计总数,到底有什么问题?
    在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数、统计用户总数等。一般我们会使用MySQL的count函数进行统计,但是随着数据量逐渐增大,统计耗时也越来越长......
  • mysql 在insert时防止出现主键冲突错误的方法
    在mysql中插入数据的时候常常因为主键存在而冲突报错,下面有两个解决方法:1、在insert语句中添加ignore关键字,如:insertignoreintotable(id,name)values('1','usern......
  • 集合 实现双色球案例
    importjava.util.*;/***@authorMxhlin*@[email protected]*@Date2022/09/19/21:30*@Version*@Description双色球案例*/publicclassDemo{......
  • MySQL-索引
    MYSQL之索引本章包含索引概述,索引结构,索引语法,索引分类,SQL性能分析,索引使用,索引设计原则!索引概述介绍(1)索引(index)是帮助MySQL高效获取数据的数据结构(有序)。......
  • OSS实现文件上传功能
    心有千斤坠,却无一字言使用对象存储,将文件上传到阿里云分布式文件服务器上。帮助文档:整合spring-cloud:https://github.com/alibaba/aliyun-spring-boot/blob/maste......
  • MySQL查看最大连接数和修改最大连接数
    1、查看最大连接数showvariableslike'%max_connections%';2、修改最大连接数setGLOBALmax_connections=200;以下的文章主要是向大家介绍的是MySQL最大连接数的......
  • python+ mplfinance实现全功能动态交互式K线图
    在网上找的资料,但没有数据,于是根据代码自己造了一些,发现跑起来太卡了,放弃#coding=utf-8#inter_candle.pyimportpandasaspdimportnumpyasnpimportmatplotli......
  • 【Mysql】主从同步原理
    mysql主从同步过程:mysql的主从复制主要有三个线程:master:二进制日志转储线程(binlogdumpthread)、slave:I/O线程(I/Othread)和SQL线程(SQLthread).master一条线程和slave......