【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字符集的依赖包导致的。…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...