mysql 数据库自动备份脚本 | 学习笔记

简介: 快速学习 mysql 数据库自动备份脚本。

开发者学堂课程【Shell 编程入门到精通mysql 数据库自动备份脚本】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/453/detail/5602


mysql 数据库自动备份脚本


内容介绍

一、前期准备

二、mysql 脚本

三、测试案例 mysql 脚本

 

一、前期准备

首先需要登录到服务器上,分为安装 mysql-server 和开启 mysql-server

1、安装 mysql-server

通过命令

[root@xuegod63 test]# yum install -y mysql mysql-server

安装服务器,软件包mysqlmysql数据库linux下的客户端,而软件包mysql-server 才是真正的mysql数据库

2、开启 mysql-server

安装完成后再通过命令

[root@xuegod test2]# /etc/init.d/mysqld restart

启动服务,第一次启动会弹出很多消息,只要显示Starting mysql: [OK]就代表启动成功了,再次

[root@xuegod test2]# /etc/init.d/mysqld restart

则代表重启服务。

连接mysql是通过#which mysql查看mysql所在目录,再执行# rpm -qf /usr/bin/mysql进入客户端,之后直接mysql回车即可连接mysql,show databases可查看数据库,执行exit;退出,分号可加可不加,连接mysql也可以默认的命令#mysql -uroot -p连接mysql,p后可直接跟登录密码,但此处案例没有密码,如:

[root@xuegod test2]#which mysql

/usr/bin/mysql

[root@xuegod63 test]# which mysql /usr/bin/mysql

mysql-5.1.52-1.el6_ 0.1.x86_ _64

[root@xuegod63 test]#mysql

Welcome to the MYSQL…

…state ment

mysql>show databases

+--------------+

| Database |

+-----------------+

| information_ schema |

| mysql

|test

3 rows in set (0.00 sec)

mysql> exit;

[root@xuegod63 test]#mysql -uroot -p

Enter password:

 

二、案例 mysql 脚本

案例 mysql 脚本如下:

#!/bin/sh

#auto backup mysql  

#xuegod.cn 2015-2-10 /

#Define PATH 定义变量

BAKDIR=/data/backup/mysql/idate +%Y - %om-%d^

MYSQL .DB=test

#MYSQLDB=webapp #要备份的数据名

#MYSQLPW=backup #mysql数据库密码

MYSQLUSR=root

#MYSQLUSR=backup

#must use root user run scripts 必须使用root用户运行,$UID为系统变量

if

[$UID-ne 0];then

echo

This script must use the root user ! ! !

sleep 2

exit 0

fi

#Define DIR and mkdir DIR 判断目录是否存在,不存在则新建

if

[!-d$BAKDIR];then

mkdir -p $BAKDIR

else .

echo This is $BAKDIR exists....

fi

#Use mysqldump backup mysql使用mysqldump备份数据库

/usr/bin/mysqldump -u$MYSQLUSR -d $MYSQLDB >$BAKDIR/webapp_db. sql

#/usr/bin/mysqldump - u$MYSQLUSR - p$MYSQLPW -d $MYSQLDB > $BAKDIR/webapp db

. sql

cd $BAKDIR ; tar -czf webapp_ mysql_ db.tar .gz *.sql

#查找备份目录下以.sq[结尾的文件并删除

#find . -type f -name * .sql |xargs rm -rf

#或

find . -type f -name *.sql -exec rm -rf {} \;

#如何数据库备份成功,则打印成功,并删除备份目录30天以前的目录

[ $? -eq 0 ] && echo“This 、date +%Y-%m-%d、MySQL BACKUP is SUCCESS"

cd /data/backup/mysql/ ; find ,- type d -mtime +30 | xargs rm -rf

echo "The mysql backup successfully

前几行是自定义脚本注释,Define PATH定义变量,常用的变量如BAKDIR,后面跟的数据库要备份路径,MYSQL .DB 为备份那个数据库,此处备份 test 数据库,MYSQLPW 后跟 mysql 数据库密码,因为此处没有密码所以是注释掉的,MYSQLUSR 后跟账号 root,也可以改其他账号如 backup必须使用 root 用户运行,$UID 为系统变量。如果$UID不等于0,则执行This script must use the root user ! ! !,如 root 下$UID执行为0,而 mk 下执行$UID则为500,如,

[ root@xuegod63 test]# echo $UID

0

[ root@xuegod63 test]# useradd mk

[ root@xuegod63

test]# Su - mk

[mk@xuegod63 ~]$ echo $UID

500

[mk@xuegod63 ~]$ id mk

uid=500(mk) gid=500 (mk) groups=500 (mk )

判断完用户后 Define DIR and mkdir DIR 判断目录是否存在,不存在则创建,通过!查看-d如果不存在就 mkdir -p $BAKDIR 去创建,否则显示这个目录存在,接下来使用 mysqldump 命令备份,-u指定用户 $MYSQLUSR-d指定数据库$MYSQLDB,输出到 webapp_db. sql,vim 查看文件内容,如,

[ root@xuegod63 test] # which mysqldump

/usr/bin/ mysqldump

[root@xuegod63 test]#mysqldump -uroot -d test > /opt/webapp_ db.sql

[ root@xuegod63 test]# echo $?

0

[ rootaxuegod63 test]# vim /opt/webapp_db.sql

/usr/bin/mysqldump -d $MYSQLDB >$BAKDIR/webapp_db. sql

如果-d判断$BAKDIR目录存在,则加!就是取否的意思,目录不存在,备份用$MYSQLUSR,可以用 root 用户,也可以用其他用户,因为 mysql 里面不同的用户有不同的权限,用户要有备份的权限才行,相当于 linux 下面最大权限的 root 用户,然后cd进入到$BAKDIR,tar对数据进行打包,打包后find查找当前目录下name 为.sql的文件,有的话则执行 rm -rf把他删除,或者查找后使用xargs传递给rm -rf 执行删除,执行后$ -eq判断删除命令是否执行成功,为0则为执行成功,date显示年月日,如,

[ rootaxuegod63 opt]#date +%Y-%m-%d

2015-02-10

并打印 mysql 备份完毕,然后 cd 到 mysql 找到30天前创建的文件夹,执行删除,完成后打印数据库备份成功

:wq保存退出执行一下脚本,

[root@xuegod63 test]# . /mysql- back-auto. sh

This 2015-02-10 MySQL BACKUP is SUCCESS"

执行成功后进行验证下

# vim mysql- back-auto.sh

打开脚本后 BAKDIR 变量应该得到一个路径,如/data/backup/mysql/,ls查看路径会发现创建了一个目录,目录下创建了webapp_mysql_db.tar.gz数据库,如,

[ root@xuegod63 opt]# ls /data/backup/mysql/

2015-02-10

[ root@xuegod63 opt]# ls /data/backup/mysql/2015-02-10/

webapp_ mysql_ db. tar.gz

备份完后可解压查看,如,

[ root@xuegod632015-02-10]# tar zxvf webapp mysql db.tar.gz

webapp_ db. sql

[ root@xuegod632015-02-10]# ls

webapp_db. sql webapp_mysqL_db.tar.gz

[ root@xuegod632015-02-10]# vim webapp_ db.sql

vim 打开后可查看到数据库 Database:test,备份成功。

 

三、测试案例 mysql 脚本

测试在其他用户下运行脚本,因为 root 不允许其他用户访问,所以需要把脚本复制到其他用户下,案例中复制到 mk 用户的 tmp 目录下,这样设置后谁都可以执行,所以再次cd到tmp下,执行脚本,会发现提示这个脚本必须是root用户下执行,之后等待2秒钟会自动退出,如,

[ root@xuegod63 test]# cp mysql-back-auto.sh /tmp/

[ root@xuegod63 test]# ll /tmp/mysql- back-auto.sh

- rwxr-xr-x 1 root root 1289 Feb 10 21:24 /tmp/mysqL- back-auto.sh

[ root@xuegod63 test]# ll !$

ll /tmp/ mysql- back-auto. sh

-rwxr-xr-x 1 root root 1289 Feb 10 21:24 /tmp/mysql-back-auto. sh

[mk@xuegod63] $cd /tmp/

[mk@xuegod63 tmp]$ . /mysql- back-auto. sh

This script must use the root user ! ! !

[mk@xuegod63 tmp] $

测试成功,然后是if判断路径是否存在,存在就打印exists,不存在就创建,最后备份数据库,cd $BAKDIR后面跟路径进行打包。打包完成后没用的数据进行删除,删除30天前的数据可以通过if进行判断,也可以简写$? -eq

此处提醒要定期检查数据是否备份成功,看懂脚本内容,不能只看执行后弹出的 The mysql backup successfully

验证30天后是否删除成功,执行脚本后更改日期为30天后,再次执行脚本查看执行脚本时创建的目录是否存在,如,

[ root@xuegod63 test]# ./mysql- back-auto.sh

This 2015-02-10 MySQL BACKUP is SUCCESS"

The mysql backup successfully

[ root@xuegod63 mysql]# date -s "2015-3-10 20:20:11"

Tue Mar 10 20:20:11 CST 2015

[ root@xuegod63 test]# ./mysql- back-auto.sh

This 2015-3-10 MySQL BACKUP is SUCCESS"

The mysql backup successfully

[ root@xuegod63 mysql]# date -s "2015-3-11"

Tue Mar 11 20:20:11 CST 2015

[ root@xuegod63 test]# ./mysql- back-auto.sh

This 2015-3-11 MySQL BACKUP is SUCCESS"

The mysql backup successfully

[ root@xuegod63 mysql]#ls

2015-2-10 2015-3-10 2015-3-11

[ root@xuegod63 mysql]# date -s "2015-3-21"

Tue Mar 21 20:20:11 CST 2015

[ root@xuegod63 test]# ./mysql- back-auto.sh

This 2015-03-21 MySQL BACKUP is SUCCESS"

The mysql backup successfully

[ root@xuegod63 mysql]#ls

2015-3-10 2015-3-11 2015-3-21

所以30天后删除成功

注意:写脚本时要加上注释,而且常用变量写规范,这样更改时就只用更改相应变量内容而不是脚本内部,最后重点牢记脚本代码。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
11月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
629 158
|
11月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
11月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1694 152
|
11月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
1125 156
|
11月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
734 156
|
11月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
792 161
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
11月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
11月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
11月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。

推荐镜像

更多