Linux Shell脚本之利用mysqldump备份MySQL数据库(详细注解)

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介:
原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://dgd2010.blog.51cto.com/1539422/1678653

设计该脚本的一些设计、编写考虑:

  1. 该脚本适用于编译安装mysql和通过yum或apt-get等安装方式

  2. 该脚本可以反复执行,不会重复覆盖数据

  3. 可增加,删除N天前的备份以节省磁盘空间

  4. 充分利用mysqldump的自带锁表功能、刷新日志、复制等功能

利用mysqldump命令备份MySQL数据库的脚本(不带注释版,适合生产环境使用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
MYSQLDBUSERNAME=root
MYSQLDBPASSWORD=password
MYSQBASEDIR= /usr/local/mysql
MYSQL=$MYSQBASEDIR /bin/mysql
MYSQLDUMP=$MYSQBASEDIR /bin/mysqldump
BACKDIR= /var/backup/db
DATEFORMATTYPE1=$( date  +%Y-%m-%d)
DATEFORMATTYPE2=$( date  +%Y%m%d%H%M%S)
[ -d $MYSQBASEDIR ] && MYSQDATADIR=$MYSQBASEDIR /data  || MYSQDATADIR= /var/lib/mysql
[ -x $MYSQL ] || MYSQL=mysql
[ -x $MYSQLDUMP ] || MYSQLDUMP=mysqldump
[ -d ${BACKDIR} ] ||  mkdir  -p ${BACKDIR}
[ -d ${BACKDIR}/${DATEFORMATTYPE1} ] ||  mkdir  ${BACKDIR}/${DATEFORMATTYPE1}
DBLIST=` ls  -p $MYSQDATADIR |  grep  / | tr  -d /`
for  DBNAME  in  $DBLIST
     do  ${MYSQLDUMP} --user=${MYSQLDBUSERNAME} --password=${MYSQLDBPASSWORD} --routines --events --triggers --single-transaction --flush-logs --databases ${DBNAME} |  gzip  > ${BACKDIR}/${DATEFORMATTYPE1}/${DBNAME}-backup-${DATEFORMATTYPE2}.sql.gz
     [ $? - eq  0 ] &&  echo  "${DBNAME} has been backuped successful"  ||  echo  "${DBNAME} has been backuped failed"
     /bin/sleep  5
done

利用mysqldump命令备份MySQL数据库的脚本(带注释版,适合学习和测试使用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash
# MYSQLDBUSERNAME是MySQL数据库的用户名,可自定义
MYSQLDBUSERNAME=root
# MYSQLDBPASSWORD是MySQL数据库的密码,可自定义
MYSQLDBPASSWORD=password
# MYSQBASEDIR是MySQL数据库的安装目录,--prefix=$MYSQBASEDIR,可自定义
MYSQBASEDIR= /usr/local/mysql
# MYSQL是mysql命令的绝对路径,可自定义
MYSQL=$MYSQBASEDIR /bin/mysql
# MYSQLDUMP是mysqldump命令的绝对路径,可自定义
MYSQLDUMP=$MYSQBASEDIR /bin/mysqldump
# BACKDIR是数据库备份的存放地址,可以自定义修改成远程地址
BACKDIR= /var/backup/db
# 获取当前时间,格式为:年-月-日,用于生成以这种时间格式的目录名称
DATEFORMATTYPE1=$( date  +%Y-%m-%d)
# 获取当前时间,格式为:年月日时分秒,用于生成以这种时间格式的文件名称
DATEFORMATTYPE2=$( date  +%Y%m%d%H%M%S)
# 如果存在MYSQBASEDIR目录,则将MYSQDATADIR设置为$MYSQBASEDIR/data,具体是什么路径,就把data改成什么路径,否则将MYSQBASEDIR设定为/var/lib/mysql,可自定义
[ -d $MYSQBASEDIR ] && MYSQDATADIR=$MYSQBASEDIR /data  || MYSQDATADIR= /var/lib/mysql
# 如果mysql命令存在并可执行,则继续,否则将MYSQL设定为mysql,默认路径下的mysql
[ -x $MYSQL ] || MYSQL=mysql
# 如果mysqldump命令存在并可执行,则继续,否则将MYSQLDUMP设定为mysqldump,默认路径下的mysqldump
[ -x $MYSQLDUMP ] || MYSQLDUMP=mysqldump
# 如果不存在备份目录则创建这个目录
[ -d ${BACKDIR} ] ||  mkdir  -p ${BACKDIR}
[ -d ${BACKDIR}/${DATEFORMATTYPE1} ] ||  mkdir  ${BACKDIR}/${DATEFORMATTYPE1}
# 获取MySQL中有哪些数据库,根据mysqldatadir下的目录名字来确认,此处可以自定义,TODO
DBLIST=` ls  -p $MYSQDATADIR |  grep  / | tr  -d /`
# 从数据库列表中循环取出数据库名称,执行备份操作
for  DBNAME  in  $DBLIST
     # mysqldump skip one table
     # -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
     # mysqldump --ignore-table=mysql.event
     # http://serverfault.com/questions/376904/mysqldump-skip-one-table
     # --routines,备份存储过程和函数
     # --events,跳过mysql.event表
     # --triggers,备份触发器
     # --single-transaction,针对InnoDB,在单次事务中通过转储所有数据库表创建一个一致性的快照,此选项会导致自动锁表,因此不需要--lock-all-tables
     # --flush-logs,在dump转储前刷新日志
     # --ignore-table,忽略某个表,--ignore-table=database.table
     # --master-data=2 ,如果启用MySQL复制功能,则可以添加这个选项
     # 将dump出的sql语句用gzip压缩到一个以时间命名的文件
     do  ${MYSQLDUMP} --user=${MYSQLDBUSERNAME} --password=${MYSQLDBPASSWORD} --routines --events --triggers --single-transaction --flush-logs --ignore-table=mysql.event --databases ${DBNAME} |  gzip  > ${BACKDIR}/${DATEFORMATTYPE1}/${DBNAME}-backup-${DATEFORMATTYPE2}.sql.gz
     # 检查执行结果,如果错误代码为0则输出成功,否则输出失败
     [ $? - eq  0 ] &&  echo  "${DBNAME} has been backuped successful"  ||  echo  "${DBNAME} has been backuped failed"
     # 等待5s,可自定义
     /bin/sleep  5
done

执行效果:

1
2
3
4
5
6
[root@htvm ~] # ./backupmysqlbydate.sh 
mysql has been backuped successful
test  has been backuped successful
[root@htvm ~] # ls /var/backup/db/2015-07-27/
mysql-backup-20150727195515.sql.gz   test -backup-20150727195515.sql.gz
[root@htvm ~] #

标签:mysqldump,备份MySQL数据库,MySQL数据库备份,mysql备份,mysql备份脚本

--end--

本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1678653

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
10月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1517 1
|
11月前
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
527 41
|
10月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
972 5
|
11月前
|
关系型数据库 MySQL Linux
实现MySQL数据库的定时自动备份脚本。
拿走,不谢,这个脚本配方(指引)保证你的数据库数据像蛋糕店一样地天天更新,还能确保老旧的蛋糕(数据)不会堆积满仓库。这下可好,数据安全有保障,数据库管理员也能轻松一点,偶尔闲下来的时候,煮杯咖啡,看个剧岂不美哉?别忘了偶尔检查一下你的自动备份是否正常工作,以防万一蛋糕机器出了点小差错。
513 20
|
11月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
660 17
|
11月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
325 18
|
11月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
602 11
|
11月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
310 10
|
12月前
|
Oracle 关系型数据库 MySQL
Oracle linux 8 二进制安装 MySQL 8.4企业版
Oracle linux 8 二进制安装 MySQL 8.4企业版
514 1
|
监控 Linux
linux服务器显卡监控脚本
linux服务器显卡监控脚本
332 0