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

MySQL 数据库备份与还原指南插图

原因可能是因为我在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 保存退出即可

还原

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

MySQL 数据库备份与还原指南插图1

使用gunzip命令如下:


gunzip xxxxxx_20220303.sql.gz

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

MySQL 数据库备份与还原指南插图2

接下来就是执行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;  —– 查看当前库所有的表

至此,就完成啦

部分操作截图如下:

MySQL 数据库备份与还原指南插图3

MySQL 数据库备份与还原指南插图4
MySQL 数据库备份与还原指南插图5

无论风雨,和自己一决胜负吧

链接:https://www.cnblogs.com/aerfazhe/p/15958700.html

                                                              (版权归原作者所有,侵删)

MySQL 数据库备份与还原指南插图6

5 万字 160道MySQL经典面试题总结(2024修订版)

需要完整资料的看这里

扫码回复666 根据提示 添加小助理领取:160道MySQL面试题

5 万字 160道MySQL经典面试题总结(2024修订版)插图3

什么是MySQL?

MySQL是⼀个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流⾏的关系型数据库管理系统之⼀,在 WEB 应⽤⽅⾯,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统) 应⽤软件之⼀。在Java企业级开发中⾮常常⽤,因为 MySQL 是开源免费的,并且⽅便扩展。

MySql, Oracle,Sql Service的区别?

1. Sql Service只能在Windows上使⽤,⽽MySql和Oracle可以在其他系统上使⽤, ⽽且可以⽀持数据库不同系统之间的移植

2. MySql开源免费的,Sql Service和Oracle要钱。

3. 我从⼩到⼤排序哈,MySql很⼩,Sql Service居中,Oracle最⼤

4. Oracle⽀持⼤并发量,⼤访问量,Sql Service还⾏,⽽MySql的话压⼒没这么⼤,因此现在的MySql的话最好是要使⽤集群或者缓存来搭配使⽤

5. Oracle⽀持多⽤户不同权限来进⾏操作,⽽MySql只要有登录权限就可操作全部数据库

6. 安装所⽤的空间差别也是很⼤的,Mysql安装完后才⼏百M⽽Oracle有⼏G左右,且使⽤的时候Oracle占⽤特别⼤的内存空间和其他机器性能。

7. 做分⻚的话,MySql使⽤Limit,Sql Service使⽤top,Oracle使⽤row

8. Oracle没有⾃动增⻓类型,Mysql和Sql Service⼀般使⽤⾃动增⻓类型

什么是索引?

索引是一种特殊的文件(innoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针

索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。

更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录索引是一个文件,它是要占据物理空间的。

索引的使用场景?

1.当数据多且字段值有相同的值得时候用普通索引。

2.当字段多且字段值没有重复的时候用唯一索引。

3.当有多个字段名都经常被查询的话用复合索引。

4.普通索引不支持空值,唯一索引支持空值。

5.但是,若是这张表增删改多而查询较少的话,就不要创建索引了,因为如果你给一列创建了索引,那么对该列进行增删改的时候,都会先访问这一列的索引,

6.若是增,则在这一列的索引内以新填入的这个字段名的值为名创建索引的子集

7.若是改,则会把原来的删掉,再添入一个以这个字段名的新值为名创建索引的子集,

8.若是删,则会把索引中以这个字段为名的索引的子集删掉。

9.所以,会对增删改的执行减缓速度,

10.所以,若是这张表增删改多而查询较少的话,就不要创建索引了,

11.更新太频繁地字段不适合创建索引。

12.不会出现在where条件中的字段不该建立索引。

B树和B+树的区别?

在B树中,你可以将键和值存放在内部节点和叶子节点;但在B+树中,内部节点都是键,没有值,叶子节点同时存放键和值。

B+树的叶子节点有一条链相连,而B树的叶子节点各自独立。

5 万字 160道MySQL经典面试题总结(2024修订版)插图4

非聚簇索引一定会回表查询吗?

当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制。就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用。

什么是死锁?怎么解决?

死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。

常见的解决死锁的方法:

  1. 如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会。
  2. 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率
  3. 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率

为什么要使用视图?什么是视图?

为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。所谓视图,本质上是一种虚拟表,在物理上是不存在的,其内容与真实的表相似,包含一系列带有名称的列和行数据。但是,视图并不在数据库中以储存的数据值形式存在。行和列数据来自定义视图的查询所引用基本表,并且在具体引用视图时动态生成。

视图使开发者只关心感兴趣的某些特定数据和所负责的特定任务,只能看到视图中所定义的数据,而不是视图所引用表中的数据,从而提高了数据库中数据的安全性。

SQL语句主要分为哪几类?

  • 数据定义语言DDL(Data Ddefinition Language)CREATE,DROP,ALTER主要为以上操作 即对逻辑结构等有操作的,其中包括表结构,视图和索引。
  • 数据查询语言DQL(Data Query Language)SELECT这个较为好理解 即查询操作,以select关键字。各种简单查询,连接查询等 都属于DQL。
  • 数据操纵语言DML(Data Manipulation Language)INSERT,UPDATE,DELETE主要为以上操作 即对数据进行操作的,对应上面所说的查询操作 DQL与DML共同构建了多数初级程序员常用的增删改查操作。而查询是较为特殊的一种 被划分到DQL中。
  • 数据控制功能DCL(DataControlLanguage)GRANT,REVOKE,COMMIT,ROLLBACK主要为以上操作 即对数据库安全性完整性等有操作的,可以简单的理解为权限控制等。

资料整理自网络,仅作免费交流分享,侵权删!

需要完整资料的看这里

扫码回复666 根据提示 添加小助理领取:160道MySQL面试题

5 万字 160道MySQL经典面试题总结(2024修订版)插图3

本文链接:https://www.yunweipai.com/45977.html

(完)