Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >第7章、备份与恢复

第7章、备份与恢复

作者头像
幺鹿
发布于 2018-08-21 08:01:55
发布于 2018-08-21 08:01:55
87200
代码可运行
举报
文章被收录于专栏:Java呓语Java呓语
运行总次数:0
代码可运行

使用mysqldump导出SQL格式的备份

默认情况下mysqldump导出的是标准的SQL语法,因此你可以使用标准输出写入文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shell> mysqldump [arguments] > file_name

若需要导出所有数据,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shell> mysqldump --all-databases > dump.sql

若仅导出特定数据库,请在命令行中命名它们,然后使用--databases选项。--databases后的所有名称都将视为数据库名称,若省略该选项则默认取第一个字符串作为数据库的名称。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shell> mysqldump --databases db1 db2 db3 > dump.sql

当使用--all-databases--databases选项时,在具体的数据库导出之前会添加CREATE DATABASEUSE语句。这样可以确保导出的备份在下次被加载之前,若发现库没有创建可以实施创建,不会因此影响数据导入。如果你需要在导入时删除之前的库,可以在导出时添加选项--add-drop-database。这样做可以在声明CREATE DATABASE 之前添加语句DROP DATABASE

导出单个数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shell> mysqldump --databases test > dump.sql

也可以省略--databases标签:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shell> mysqldump test > dump.sql

他们两者的区别是省略--databases标签在导出的数据库脚本中,不会自动添加CREATE DATABASEUSE语句。

省略--databases这意味着你在执行导入时:

  • 需要指定数据库。
  • 你可以将数据导入到与导出指定数据库名称不同的数据库中。
  • 如果你指定的数据库不存在,你需要手动创建。
  • 因为输出将不包含CREATE DATABASE语句,所以--add-drop-database选项不起作用。如果使用它,它不会生成DROP DATABASE语句。

如果仅想导出指定数据库中的指定数据表,可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shell> mysqldump test t1 t3 t7 > dump.sql

用mysqldump以分隔文本格式转储数据

若你使用mysqldump --tab={dir-name}时,它会使用{dir-name}作为输出目录。并且每张表将会有两份文件,比如数据库表名称是t1,则对应的输出文件为t1.sqlt1.txt*.txt存放表的数据,一行一条数据。

以下命令将db1数据库的内容转储到/ tmp数据库中的文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shell> mysqldump --tab=/tmp db1

*.txt是由mysql的运行的用户持有,因为mysql的用户调用SELECT ... INTO OUTFILE语句写入该文件,所以你需要确保执行该方法的用户具备FILE权限。另外,如果对应的*.txt文件已存在时,导出操作将会报错。

Tips:FILE 权限是一个比较危险的权限,SQL注入之后利用FILE权限可以完成提权,所以处于安全考虑不对外开放该权限。

选项--tab最好仅应用于本地服务器

要使用不同的格式写入数据文件,mysqldump支持以下选项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--fields-terminated-by=str
# 分割列的符号 (default: tab).
--fields-enclosed-by=char
# 包围列的字符 (default: no character).
--fields-optionally-enclosed-by=char
# 包围非数据的列字符 (default: no character).
--fields-escaped-by=char
# 用于转义的特殊字符 (default: no escaping).
--lines-terminated-by=str
# 终止符 (default: newline).

在实际使用时,你可以指定Hex也可以使用字符。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--fields-enclosed-by='"'
# 上下是同一个意思
--fields-enclosed-by=0x22

制作数据库备份

3行代码备份一个数据库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 不使用 --databases 是避免CREATE 语句导致导入到db2会失败
shell> mysqldump db1 > dump.sql
shell> mysqladmin create db2
shell> mysql db2 < dump.sql

导出存储过程、计划事件、触发器

  • --events : 导出计划事件
  • --routines : 导出存储过程
  • --triggers : 导出触发器

--triggers默认是开启的,其它两个是默认关闭的。如果需要导出,则需要显示的指定。如果明确无需导出,可以设置:--skip-events,--skip-routines,--skip-triggers。

定时备份

有了上面的概念对导出导入有了基本认识,接下去借助crontab即可完成定时备份的效果。

不了解crontab可以参考文档:Configuring Cron Tasks

1. 创建并授权备份用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE USER 'backup'@'%' IDENTIFIED BY '你的密码'
GRANT SELECT,LOCK TABLES ON *.* TO 'backup'@'%' IDENTIFIED BY '你的密码';

2. 编写备份脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash   

#定义有备份的数据库名 定义远程数据库
dbname="你要备份的数据库名"  dbhost="数据库HOST"

#定义远程数据库端口
dbport=3306

#定义备份数据库时使用的用户名和密码 
dbuser="你的mysql用户名" dbpasswd="你的密码"   
#数据库备份的路径 
backuppath=/home/mysql/${dbhost}/ 
 
#数据库备份日志文件存储的路径 
logfile=/home/mysql/${dbhost}/logs/bak.log   


#以当前的时间作为备份的数据库命名。 
dumpfile=${dbname}-$(date +%Y%m%d%H%M)   


#这个函数用来备份数据库 
back_db() {    
#将备份的时间、数据库名存入日志    
echo "------"$(date +%Y-%m-%d%t%A%t%T)" Beginning database "${dbname}" backup--------" >>${logfile}     


#备份数据库,如果有错误信息也记入日志。   默认utf8编码
/usr/bin/mysqldump -u${dbuser} -p${dbpasswd} -h ${dbhost} -P ${dbport} --default-character-set=utf8 --databases ${dbname} >${backuppath}${dumpfile}.sql 2>> ${logfile}     

#开始压缩数据文件   
echo $(date +%Y-%m-%d%t%A%t%T)" Beginning zip ${backuppath}${dumpfile}.sql" >>${logfile} 
    
#将备份数据库文件库压成ZIP文件,并删除先前的SQL文件。如果有错误信息也记入日志。   
tar zcvf ${dumpfile}.tar.gz ${dumpfile}.sql && rm ${dumpfile}.sql 2>> ${logfile}     

#将压缩后的文件名存入日志。   
echo "backup file name:"${dumpfile}".tar.gz" >>${logfile}   
echo -e "-------"$(date +%Y-%m-%d%t%A%t%T)" Ending database "${dbname}" backup-------\n" >>${logfile}  
}

#发送邮件  
#cat ${logfile} | mutt -s "Blog数据库备份" -a ${dumpfile}.tar.gz 8chf@163.com }   

rm_oldfile() {   
#查找出当前目录下7天前生成的文件,并将之删除   
find ${backuppath} -type f -mtime +7 -exec rm {} \; 
}   

#切换到数据库备份的目录。如果不做这个操作,压缩文件时有可能会错误 
cd ${backuppath}   

#运行备份数据函数 
back_db   

#运行删除文件函数 
rm_oldfile 

3. 设置备份目录

  • 220.*.*.*
    • 约定以mysql服务器host为文件夹,每个host下备份只有该host下的备份。
    • logs 目录存放备份过程的日志。
  • shell 目录下则是备份脚本。

设置备份目录

4. 启用计划任务

若服务器没有安装crontab服务,则使用yum -y install crontab安装即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shell > crontab -e 

编辑文件并保存。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
15 14 * * *  /home/mysql/shell/bak-220.*.*.*.sh > /dev/null
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.08.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mysql 数据库备份和恢复
物理备份是指直接复制包含数据的文件夹和文件。这种类型的备份适用于大数据量且非常重要,遇到问题需要快速回复的数据库。
WindWant
2020/09/11
3.9K0
MySQL 备份与恢复详解
物理备份是指通过拷贝数据库文件的方式完成备份,这种备份方式适用于数据库很大,数据重要且需要快速恢复的数据库
星哥玩云
2022/08/17
1.3K0
MySQL 备份与恢复详解
基于mysqldump聊一聊MySQL的备份和恢复
Hi,大家好,我是麦洛,今天我们聊聊MySQL的备份和恢复,在下面文章中,你会了解到MySQL常见的备份类型,以及基于mysqldump命令在日常开发中如何做MySQL数据库以及表的备份和恢复。最近开始玩公众号了,喜欢的小伙伴可以关注我
麦洛
2020/06/01
2.3K0
Mysql-12-mysql的备份和恢复
1.数据库的备份   备份=拷贝加管理,防止数据的丢失同时记录用户的操作记录。其中最有效的备份是对IT架构进行备份。 原则: (1)数据库要定期备份,备份的周期应当根据应用数据系统可承受的恢复时间,而且定期备份的时间应当在系统负荷最低的时候进行。对于重要的数据,要保证在极端情况下的损失都可以正常恢复。 (2)定期备份后,同样需要定期做恢复测试,了解备份的正确可靠性,确保备份的有意义的、可恢复的。 (3)根据系统需要来确定是否采用增量备份,增量备份只需要备份每天的增量数据,备份花费的时间少,对系统负载的压力也
用户1173509
2018/01/17
1.6K0
Mysql-12-mysql的备份和恢复
mysql数据备份与恢复
MySQL数据备份与恢复 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境。但不能恢复到异构系统中如Windows。 #2. 逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。 #3. 导出表: 将表导入到文本文件中。 一、使用mysqldump实现逻辑备份 #语法: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql (本地使用可以省略 -h 服务器名) 当用户登陆不需要密码时(密码为空或在配置文件中已
用户1214487
2018/01/24
3.2K0
mysql备份与恢复
对于DBA来说,备份和恢复是一项最基本的操作,在服务器宕机、磁盘损坏、RAID卡损坏等意外情况下,要保证数据不丢失或者丢失量在可接受范围内,每个DBA应该时刻关注所负责的数据库备份情况。个人认为,一个合格的DBA每天来公司的第一件事不应该是倒水喝茶,而应该是查看数据库的备份情况。这里我们首先来看备份的一些方法,根据备份的方法不同可以讲备份分为:
AsiaYe
2019/11/06
2.2K0
MySQL数据的导入导出/备份恢复
mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。
Power
2025/03/01
3090
MySQL从删库到恢复,还用跑路吗?
误删数据库应该如何恢复操作?怎样才能做好数据库的备份、恢复、容灾、HA?如果你身处数据库行业,最近可能会比较关注这几个问题
搜云库技术团队
2019/10/17
1.3K0
实例:Centos使用DropBox定时同步备份方案详解
原文地址:http://www.85sb.com/126.html 一直以来,使用美帝VPS建站,由于网速等多方面原因,面临着备份困难、下载困难的难题,而且还要面临故障啊、商家跑路啊等等数据丢失的风险,前段时间DS不是数据都木有了么。现在就来讲一下解决这个问题的方法,早些时候有用脚本通过FTP来备份的,例如使用godaddy域名附带的免费空间或者另外单独购买备份空间,但有时并不好用;也有两台VPS同步备份的,这个花费有点高。而现在使用DropBox来进行同步备份,全自动化,非常好用,去年就有过类似的介绍,但
用户1272546
2018/06/05
1.3K0
mysql实现定时全量备份
参考地址:  https://github.com/wentmac/mysql_backup
仙士可
2020/09/28
1.5K0
MySQL数据库备份与恢复-使用MySQLDump记录
最近接了一个新需求,需要把 MySQL 备份做成可视化界面进行操作,使用代码去调用 MySQLdump 程序进程备份,使用 MySQL 程序进程恢复。
框架师
2021/11/22
5K0
SQL学习笔记六之MySQL数据备份和pymysql模块 mysql六:数据备份、pymysql模块
根本原理:就根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'
Jetpropelledsnake21
2019/02/15
1K0
Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录
在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据。 线上数据库备份场景: 每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份. 下面对这种备份方案详细说明下: 1.MySQLdump增量备份配置 执行增量备份的前提条件是MySQL打开binlog日志功能,在my.cnf中加入 log-bin=/opt/Data/MySQL-bin “log-bin=”后的字符串为日志记载目录,一般建议放在不同于MySQL数据目录的磁盘上。 ---
洗尽了浮华
2018/01/23
5.2K0
使用 SCF 无服务器云函数定时备份数据库
最近有客户询问到使用云函数进行数据库导出备份时的一些问题,在此也进行一下总结,描述如何使用云函数来进行数据库备份。
腾讯云serverless团队
2018/07/10
10.3K0
Shell - 备份mysql的N种姿势
小小工匠
2023/08/09
3310
MySQL数据备份mysqldump的简单使用
MySQLdump是一个数据库逻辑备份程序,可以使用对一个或者多个mysql数据库进行备份或者将数据传输到其他mysql服务器。执行mysqldump时需要账户拥有select权限才可以进行备份数据表,show view权限用于备份视图,trigger权限用于备份触发器等。
星哥玩云
2022/08/17
1.5K0
linux下mysql命令
  /ect/init.d/mysql start (前面为mysql的安装路径)
全栈程序员站长
2022/09/06
6.4K0
mysql备份与恢复
  MySQL数据库自带的一个很好用的备份命令。是逻辑备份,导出 的是SQL语句。也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的过程。
暖月寒星
2020/03/11
2.6K0
mysql 远程自动备份脚本
#the script is backup all databases for mysql server,first grant all on *.* to adminbak@'172.16.2.222' identified by "backup";
三杯水Plus
2018/11/14
2.1K0
MySQL mysqldump数据导出详解
 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具;它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有的参数详细说明列出来。
拓荒者
2019/03/15
12.9K0
MySQL mysqldump数据导出详解
相关推荐
mysql 数据库备份和恢复
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验