当前位置:首页 > 数据库 > MySQL > 正文内容

MySql数据库备份与还原

备份(mysqldump)

实现功能:

      1、备份指定的数据库

      2、删除指定天数前的备份文件,默认设定了1天

脚本示例(mysql_bak.sh)


# 数据库备份根目录

BACKUP_DIR="/usr/local/mysqlbackups/tsmbak/"



#指定mysql所在主机的主机名

DB_HOSTNAME='hostname'



#指定mysql登录用户名

DB_USERNAME='root'



#指定mysql登录密码

DB_PASSWORD='xxxx'



#指定备份的数据库名

DB_NAME="xxxx"



#定义当前日期为变量

CURRENT_DATE=$(date +"%Y%m%d$H")



#定义删除N天前的文件变量

DEL_DAYS_BEFORE_FILES=1



#指定mysqldump所在目录

MYSQLDUMP_DIR="/usr/bin"



#按日期创建目录(数据库备份目录)

BASH_PATH=${BACKUP_DIR}/${CURRENT_DATE}



echo "---------------------------------------------------------"



# 判断目标路径是否存在

if [ ! -d ${BASH_PATH} ];then

echo "文件不存在,创建文件夹:${BASH_PATH}"

mkdir -p ${BASH_PATH}

else

echo "${BASH_PATH} 文件夹已存在"

fi



echo "开始备份 ${DB_NAME} 数据库"



#备份指定数据库

if $($MYSQLDUMP_DIR/mysqldump -h ${DB_HOSTNAME} -u${DB_USERNAME} -p${DB_PASSWORD} ${DB_NAME} > "${BASH_PATH}/${DB_NAME}_${CURRENT_DATE}.sql");then

cd ${BASH_PATH}

gzip ${DB_NAME}_${CURRENT_DATE}.sql

echo "---------------------------------------------------------"

echo "${CURRENT_DATE}--Backup database ${DB_NAME} successfully!"

echo "---------------------------------------------------------"



else

echo "----------------------------------------------------------"

echo "${CURRENT_DATE}--Backup database ${DB_NAME} unsuccessfully"

echo "----------------------------------------------------------"

fi



#删除指定N天前的备份文件及目录

#如 +2:表示3天以前 -2:2天以内  1:1天以前的24小时 0:表示1天以内

find ${BACKUP_DIR} -name "*" -type f -mtime ${DEL_DAYS_BEFORE_FILES} -exec rm -rf {} \;

echo "已删除${DEL_DAYS_BEFORE_FILES}天前的备份文件及目录"



echo "---------------------------------------------------------"

赋予文件执行权限

chmod +x mysql_bak.sh

运行测试

# 当前目录下./mysql_bak.sh

如果报/bin/bash^M: 坏的解释器:没有那个文件或目录 ”换了几种编译方法就解决了,但这次还是不行,于是又换:
bash mysql_bak.sh

 

原因可能是因为我在win下操作的时候,修改到了此文件。

        在win下编辑的时候,换行结尾是\n\r , 而在Linux下 是\n,所以才会有 多出来的\r

# 将文件中\r替换为空白sed -i 's/\r$//' mysql_bak.sh

再次编译!成功!!

find -mtime 介绍

        find为查询命令,-time是根据时间查询,可作为条件,具体设置不同,查询结果不同

mtime参数的理解应该如下:

-mtime n 按照文件的更改时间来找文件,n为整数。

n 表示文件更改时间距离为n天
-n 表示文件更改时间距离在n天以内
+n 表示文件更改时间距离在n天以前

示例:

-mtime 0 表示文件修改时间距离当前为0天的文件,即距离当前时间不到1天(24小时)以内的文件。
-mtime 1 表示文件修改时间距离当前为1天的文件,即距离当前时间1天(24小时-48小时)的文件。
-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间2天(48小时)之外的文件
-mtime -1 表示文件修改时间为小于1天的文件,即距离当前时间1天(24小时)之内的文件

为什么-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间48小时之外的文件,而不是24小时之外的呢? 因为n值只能是整数,即比1大的最近的整数是2,所以-mtime+1不是比当前时间大于1天(24小时),而是比当前时间大于2天(48小时)

定时任务

创建定时任务,比如每天凌晨两点执行备份操作

# Linux内置的用于定期执行程序的命令 -l 查看当前所有定时程序任务crontab -e

 编辑一下内容并保存退出:

# 定时执行程序,且将日志保存到指定目录* 2 * * * /usr/local/mysqlbackups/mysql_bak.sh &> /usr/local/mysqlbackups/tsmbak/mysql_bak.log

 编辑完之后按下Esc键,输入:冒号,输入wq 保存退出即可

还原

由于备份后的文件是经过压缩的如下,所以先解压

使用gunzip命令如下:

gunzip xxxxxx_20220303.sql.gz

解压后为.sql后缀文件,没错查看内容其实就是sql语句,如下

接下来就是执行sql语句了

1、进入mysql数据库

mysql -u root -p 回车,然后输入密码

2、查看当前所有数据库,并指定需要还原的数据库

show databases;  ------ 查看所有数据库

use 'databaseName'; -----指定使用的数据库

create database test01; ----- 建立新库

3、使用source调用sql进行

source /usr/local/mysqlbackups/tsmbak/xxxxxxx_20220303.sql   ----- 等待执行完成

4、查看还原的表或数据

show tables;  ----- 查看当前库所有的表

至此,就完成啦

部分操作截图如下:

 


扫描二维码推送至手机访问。

版权声明:本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:luxd@aliyun.com,感谢支持理解。


本文链接:https://luxd.cc/post/262.html

“MySql数据库备份与还原” 的相关文章

三分钟学会如何找回mysql密码

三分钟学会如何找回mysql密码

一、在测试工作中我们肯定会写一些sq查询语句方便我们验证数据是否正确,从而判断当前软件是否存在缺陷,但是查询的过程中肯定需要我们先连接数据库,如果数据库密码忘记我们就无法完成工作,这里就教会大家如何快速修改密码,和重置数据库密码,这样在工作中很大提高我们工作的效率二、首先我们需要先学会如何修改mys...

mysql数据库乱码解决

mysql数据库乱码解决

一、我们需要将默认的字符集更改为utf-8来解决数据库导入数据的乱码问题:我们需要先查看数据库默认的字符集是什么:show variables like 'character_set_%'查看所有的默认字符集mysql> show&nbs...

Windows MySQL安装配置

Windows MySQL安装配置

[MustVIP]1 下载和安装访问达内文档服务器下载安装包用浏览器访问http://doc.canglaoshi.org,在常用下载中找到 Windows 里面的MariaDB下载后双击运行安装安装过程中设置密码为root, 设置默认字符集UTF-8后续安装步骤是一直下一步直至完成。2 测试MyS...

『MySQL快速上手』Centos 7安装MySQL详解

『MySQL快速上手』Centos 7安装MySQL详解

说明:在环境安装中始终保持root身份;以下为Centos 7安装MySQL的详细步骤。若在安装过程中,本文章有未提及的地方,请私信我~1.卸载掉之前安装的MySQL为了确保你的机器上是否自带MySQL或者你曾经是否手动安装过MySQL,我们需要先进行检查。如果你曾经自己下载过某个版本的MySQL并...

Linux安装Mysql

Linux安装Mysql

前提使用Centos7进行安装教程1、查看是否安装过mysqlrpm -qa | grep mysql如果你查看出来有东西,可以使用下面命令将其删除(xxx 为文件全名)rpm -e xxx# 强力删除模式,如果使用上面命令删除时...