【MySQL】库的相关操作 + 库的备份和还原
库的操作
- 前言
- 正式开始
- 创建数据库
- 删除数据库
- 编码集
- 查看系统默认字符集以及校验规则
- 字符集
- 校验规则
- 所有支持的字符集和校验规则
- 所有字符集
- 所有校验规则
- 指明字符集和校验规则创建数据库
- 相同的字符集用不同的校验规则读取会出现什么情况
- alter修改数据库
- show create database
- alter
- 库的备份和恢复
- mysqldump备份整个库
- mysqldump备份某张(某几张)表

前言
如果你对于数据库的一些基本概念还不太理解,可以看看我上一篇:
【MySQL】想不想知道数据库到底是啥?想了就进来看看
本篇主要讲解:
创建、删除、修改数据库。
对库做备份和还原。
正式开始
本来是不向给出下面这张图的:

因为我觉得新手根本就没法理解,而且还容易被这种一大堆括号的东西吓到,但是这里还是给出来,不过我不会照着这个讲,我按照更容易理解的方式来走。
创建数据库
先简单介绍一下基本操作,等会再讲细节。
create database xxx;
注意,sql语句大写小写都是可以的,不要认为只能大写,我后面全用小写来讲。

我前一篇说过,创建一个数据库就会在配置文件给的datadir所给的路径下创建一个目录:

看:

创建数据库的时候还可以加上if not exists,作用就是判断一下有没有,没有就创建,有了就不起作用:

删除数据库
drop database xxx;

对应的也就是删除目录:

那么我在datadir路径下创建一个目录,那么在show databases的时候也是能看到的:

再删掉这个目录,对应show 的时候也就消失了:

但是通过手动创建目录的方式是创建不出来数据库的,虽然能用use选中数据库,但是创建不出来表。必须通过sql语句来创建数据库。
注意,删除数据库就是删目录,目录只要一删除,其中的表和数据就都没了,所以特别不推荐直接对数据库做删除操作,如果要删,必须先确定其中的数据还有没有用,以防万一也可以做一下备份(备份怎么做等会会讲到)。
编码集
创建数据库的时候会有两个编码集:字符集和校验规则。
只要有数据,存储的时候一定是要有编码格式的,数据库就主要是与数据打交道的,所以就必须非常注重编码集,编码集必须是统一的,存的时候用什么编码,取的时候就要用与之对应的编码来取。
比如说一张纸上写着一堆中文,那就必须懂中文才能懂纸上写的是啥东西,用英文来读中文是不可能读懂的。
存数据的时候看的是字符集,取数据的时候看的是校验规则。上面的这个简单的例子中,中文就是存放的数据,所以中文的语法规则就指的是字符集,用什么语言来读就是用什么校验规则,英文的校验规则(语法、单词啥的)和中文对不上,那就读不懂。
查看系统默认字符集以及校验规则
show variables like 'character_set_database'; # 查看字符集
show variables like 'collation_database'; # 查看校验规则
字符集

可能你执行这条语句后结果是latin1,没关系,因为我前面配置文件中设置了我的mysqld默认的编码格式为utf8:

再来看一下当前数据库8个变量所用的字符集:

关于这几个character_set,想要详细了解的可以看这篇:
关于MySQL中的8个 character_set 变量说明
校验规则

这里的utf8_general_ci是和utf8对应的,存的时候用utf8,取的时候用utf8_general_ci。
当前数据库中连接、创建数据库、服务的校验规则:

所有支持的字符集和校验规则
所有字符集

其中就有utf8,对应的默认校验规则就是utf8_genral_ci。
所有校验规则
非常多:

我也把utf8_general_ci圈出来了。
这些所有的编码集都是可选的,不过我这里默认情况下用的是utf8,等会创建数据库的时候也可以做修改。
指明字符集和校验规则创建数据库
先来一个默认字符集的:

我前一篇说过创建一个数据库,其中会有一个文件,但没有说这个文件中的内容是啥,这里就能知道了,就是默认的字符集和校验规则,因为创建数据库d1的时候并没有指明字符集和校验规则,所以就用的默认字符集和校验规则。
再来指明字符集和校验规则来创建:
- 指明字符集为utf8:

有多种写法:

中间的等号可以不加:

character set也是:

- 指明校验规则为utf8_general_ci:
我这里把刚刚创建出来的5个全删掉,不然影响观察。

也是可以不加等号,换成utf8_bin试试:

换成和utf8完全不相关的:

可以看到mysqld还是很聪明的,会自动换成匹配的字符集。
- 指明字符集为utf8,校验规则为utf8_general_ci:
再把刚刚的三个删掉。

指明utf8 和 utf8_bin

指明 latin1 和 latin1_bin:

如果指明的字符集和校验规则不匹配:

会出错。
相同的字符集用不同的校验规则读取会出现什么情况
下面的两个d1和d2字符集用的都是utf8,但d1的校验规则是utf8_general_ci,d2的校验规则用的是utf8_bin。

utf8_general_ci是不区分大小写的,但utf8_bin区分,但是光说也体会不出来,得创建两个表看看。
对数据库操作时必须先选中数据库:use db_name。
先选定d1建一张表:

表的相关操作我后续博客会详谈,这里先认识一下。
这里创建了一个person表,其中有一列,往里面插入点数据:

我往里面插入了小写的a、b、c,又插入了大写的A、B、C。
插入的本质就是存,那么存的时候用的就是字符集,select查询的时候是取,取的时候要进行对比库中的数据和你想取的数据是否一致,所以用的就是编码集。
查看一下其中的a:

这里查出来了两个,一个a,一个A。这就可以说明utf8_general_ci是不区分大小写的。
再来按照name升序排序:

排序的时候要进行比较,比较就要对其编码进行校验,所以用的是校验集,可以看到小写和大写是放在一块的,都是一样的。
再用d2做同样的工作:

d2却只查出来了a。所以utf8_bin区分大小写。
排序:

大写在前,小写在后,其实这里就是按照ASCII排的。
后面我创建库默认的字符集就是utf8,默认校验规则就是utf8_general_ci。
数据库的字符集和校验规则会间接(并非直接,你也可以再改)影响库中表的字符集和校验规则,不过这都是后话了,等我下一篇讲表的操作的时候再细说。
alter修改数据库
show create database
不过说alter之前先说一下这个:
show create database xxx; # xxx为数据库名
这条语句可以查看你在创建xxx数据库的时候的细节(其实就是编码的细节,没有别的)。
比如说刚刚的d1和d2:

alter
再来说alter,一般alter操作是为了修改数据库编码的。
来改一下d1:

改了之后的db.opt文件:

show:

再来看看d2,改成gbk:

这里gbk_chinese_ci就是gbk的默认校验规则,所以没有显示。
到这里库的增(create)删(drop)查(show)改(alter)工作就已经搞完了。
下面说说库的备份和恢复
库的备份和恢复
如何在Linux中对一个文件做备份?
很简单,cp一下再重命名或者直接重命名就行。
那数据库文件也是一个文件,能不能也像普通文件那样备份呢?
不行。mysql专门给出了备份相关的操作的。
mysqldump备份整个库
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
就拿刚刚的d1来做备份。

注意这个路径下是空的。就备份到这个路径下面。

可以看到其中多了一个文件。
用vim打开,里面的内容是这样的:

里面保存了历史上做过的一些操作,不光是存放数据。
现在我删除掉d1:

现在datadir中就不存在d1这个目录了。
现在想要快速恢复出d1,怎么搞呢?
source。

直接source后面跟路径,就能将历史中记录的sql命令全部执行一次。
此时就d1就还原了:

其实上面的操作还可以搞成远端的,现在本地搞个备份,然后发送到远端的另一台主机上,这样那台主机专门用来做备份,等出现问题的时候再将备份通过远端发回来就好。
注意备份整个库的时候一定要加上-B,不然就没有备份上,备份出来的是空的。
mysqldump备份某张(某几张)表
如果备份的不是整个数据库,而是其中的一张表,怎么做?
mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
我先来再创建三张表:

删掉person表,此时只有这三个:

备份:

解释一下,这里因为我配置文件中设置了不需要密码,所以没有加-p。
d1就是数据库名,person、t1、t3就是表名。
如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据
库,再使用source来还原。
删掉d1数据库:

再创建一个空的d1:

注意一定要先选中数据库再进行还原,不然就出错:

选中后:

因为刚刚只备份了t1和t3,所以还原出来的只有这两张表:

注意,如果你备份整个数据库的时候没有加上-B,那还原的时候也得要先创建一个数据库,然后再选中这个数据库才能还原:

如果备份整个数据库没有加B,可以实现对数据库重命名:

上面用的还是刚刚d1备份的数据,但是可以直接还原到test中。
其实mysql以前是支持重命名的,但是现在不支持了。
库的操作该讲的都讲了,下一篇说表的操作。
补充一个小点:
show processlist可以显示当前数据库的连接情况。

这里只有我一个root用户登录。
到此结束。。。
相关文章:
【MySQL】库的相关操作 + 库的备份和还原
库的操作 前言正式开始创建数据库删除数据库编码集查看系统默认字符集以及校验规则字符集校验规则 所有支持的字符集和校验规则所有字符集所有校验规则 指明字符集和校验规则创建数据库相同的字符集用不同的校验规则读取会出现什么情况 alter修改数据库show create databasealt…...
网络安全基础之php开发文件上传的实现
前言 php是网络安全学习里必不可少的一环,简单理解php的开发环节能更好的帮助我们去学习php以及其他语言的web漏洞原理 正文 在正常的开发中,文件的功能是必不可少,比如我们在论坛的头像想更改时就涉及到文件的上传等等文件功能。但也会出…...
[文件读取]cuberite 文件读取 (CVE-2019-15516)
1.1漏洞描述 漏洞编号CVE-2019-15516漏洞类型文件上传漏洞等级⭐⭐⭐漏洞环境VULFOCUS攻击方式 描述: Cuberite是一款使用C语言编写的、轻量级、可扩展的多人游戏服务器。 Cuberite 2019-06-11之前版本中存在路径遍历漏洞。该漏洞源于网络系统或产品未能正确地过滤资源或文件路…...
SpringBoot 自定义参数校验(5)
文章目录 前言方式一 @Pattern方式二 自定义参数校验Controller层请求示例前言 本文基于SpringBoot 3.1.2,使用自定义参数规则来处理参数校验。 方式一 @Pattern 使用@Pattern,自定义正则表达式,以下是一个校验IP地址的示例: import jakarta.validation.constraints.Not…...
Win Docker Desktop + WSL2 部署PyTorch-CUDA服务至k8s算力集群
Win Docker Desktop WSL2 部署PyTorch-CUDA服务至k8s算力集群 Win Docker Desktop WSL2 安装安装WSL-Ubuntu拉取镜像并测试挂载数据并开放端口导出镜像或导入镜像在k8s集群部署 Win Docker Desktop WSL2 安装 首先根据你的操作系统版本 安装WSL ,记得切换WSL2&a…...
JLMR Micro Super Resolution Algorithm国产微超分算法DEMO
一、简介 目前,做超分算法基本还是以AI训练为主,但是AI基本上都是基于既定场景的训练。而传统的算法基本上都是利用上下文的纹理预测、插值等方案,在图像放大过程中会出现模糊,或马赛克等现象。 我们基于加权概率模型,…...
Docker的安装配置与使用
1、docker安装与启动 首先你要保证虚拟机所在的盘要有至少20G的空间,因为docker开容器很吃空间的,其次是已经安装了yum依赖 yum install -y epel-release yum install docker-io # 安装docker配置文件 /etc/sysconfig/docker chkconfig docker on # 加…...
macOS文本编辑器 BBEdit 最新 for mac
BBEdit是一款功能强大的文本编辑器,适用于Mac操作系统。它由Bare Bones Software开发,旨在为开发者和写作人员提供专业级的文本编辑工具。 以下是BBEdit的一些主要特点和功能: 多语言支持:BBEdit支持多种编程语言和标记语言&…...
Android Audio实战——音量设置Hal(二十)
本来上一篇分析音量设置中对于 setCurrentGainIndex 方法我们分析到了 native 层就没有往下分析,但这这里还有准备再看看下面的流程。 一、源码分析 1、android_media_AudioSystem.cpp 源码位置:frameworks/base/core/jni/android_media_AudioSystem.cpp static jint and…...
jetson配置笔记
typora-root-url: /home/msj/ubuntu笔记本台式机环境配置说明/images Ubuntu18.04 配置 说明:我们所有文档配置都是按照ubuntu18.04,保证x86架构(笔记本台式机)和 ARM架构(jetson Nano只能安装18.04)的一致性 1. 更换各类源 我们所有源都更换清华源&a…...
使用select实现定时任务
selectOutOfTime.c里边的代码如下: #include<stdio.h> #include<sys/time.h> #include<sys/types.h> #include<unistd.h> #include <string.h>#define BUF_SIZE 100int main(void){fd_set reads;struct timeval tv;int errorNum;cha…...
uniapp的实战总结大全
🙂博主:冰海恋雨 🙂文章核心:uniapp部分总结 目录 编辑 目录 前言: 解决方案 1. 跨平台开发 2. Vue.js生态 3. 组件库 4. 自定义组件 5. Native能力 6. 插件生态 7. 性能优化 写法 1. 模板…...
No205.精选前端面试题,享受每天的挑战和学习
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...
保序回归:拯救你的校准曲线(APP)
保序回归:拯救你的校准曲线(APP) 校准曲线之所以是评价模型效能的重要指标是因为,校准曲线衡量模型预测概率与实际发生概率之间的一致性,它可以帮助我们了解模型的预测结果是否可信。一个理想的模型应该能够准确地预测…...
清华镜像源地址,适用于pip下载速度过慢从而导致下载失败的问题
清华地址 https://pypi.tuna.tsinghua.edu.cn/simple下载各种各样的包的指令模板 pip install XXX -i https://pypi.tuna.tsinghua.edu.cn/simple这样就行了,XXX代表的是你将要下载的包名称。 比如: pip install opencv-python -i https://pypi.tuna.…...
arcgis--NoData数据处理
方法一:利用【栅格计算器】可以对NoData的值进行修改。【Spatial Analyst工具】-【地图代数】-【栅格计算器】,将NoData修改为某一个值。 方法二:先对原始数据进行重分类,分成1类,将NoData赋值为2,。然后,将…...
基于单片机教室人数实时检测系统仿真及源程序
一、系统方案 1、本设计采用51单片机作为主控器。 2、红外传感器检测进出人数,液晶1602显示。 3、按键最多容纳人数,烟雾报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void lcd_init() { lcd_write_com(0x38…...
【Linux笔记】Linux环境变量与地址空间
【Linux笔记】Linux环境变量与地址空间 一、命令行参数1.1、main函数的参数1.2、main函数的第三个参数 二、环境变量的概念与内容2.1、环境变量的概念2.2、环境变量的分类2.3、环境变量的组织形式2.4、常见的环境变量 三、设置环境变量3.1、通过命令获取或设置环境变量3.2、通过…...
【springboot】@restcontroller和@controller的区别
返回值不同:RestController注解的类中的所有方法都会返回JSON或XML等数据格式,而Controller注解的类中的方法可以返回JSP或HTML等视图页面。 默认注解不同:RestController注解中包含了ResponseBody注解,表示返回的数据会直接作为…...
oracle 不支持的字符集 orai18n.jar ZHS16GBK 异常问题解决
项目场景: 项目中有使用到oracle数据库来存在数据。 问题描述 在使用查询语句是,oracle会报错。 java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK 原因分析: 经排查发现缺少oracle字符集的依赖包导致的。…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
