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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习 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天后删除成功

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
50 15
|
4天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
8天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
16天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
28天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
35 1
|
29天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
73 3
|
29天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
37 3
|
1月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
39 4
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
200 1
|
25天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
148 0