MySQL——数据库的高级操作(一)数据备份与还原(1)数据的备份

ops/2024/11/10 12:14:01/

        在操作数据库时,难免会发生一些意外造成数据丢失。例如,突然停电、管理员的操作失误都可能导致数据的丢失。为了确保数据的安全,需要定期对数据库进行备份,这样,当遇到数据库中数据丢失或者出错的情况,就可以将数据进行还原,从而最大限度地降低损失。本节将针对数据的备份和还原进行详细的讲解。

        日常生活中,人们经常需要为自己家的房门多配几把钥匙,为自己的爱车准备一个备胎,这些事情其实都是在做备份。在数据库的维护过程中,数据也经常需要备份,以便在系统遭到破坏或其他情况下重新加以利用,为了完成这种功能,MySQL 提供了一个mysqldump 命令,它可以实现数据的备份。

        mysqldump 命令可以备份单个数据库、多个数据库和所有数据库,由于这三种备份方式比较类似,所以本节就以备份单个数据库为例来讲解 mysqldump 命令,其他方式只列举语法格式,具体如下。

1、备份单个数据库

        mysqldump 命令备份数据库的语法格式如下:

mysqldump -uusername -ppassword dbname [tbname1 [tbname2……]]>filename.sql

        上述语法格式中,-u后面的参数 username 表示用户名,p后面的参数 password 表示登录密码,dbname表示需要备份的数据库名称,tbname表示数据库中的表名,可以指定一个或多个表,多个表名之间用空格分隔,如果不指定则备份整个数据库,filename.sql表示备份文件的名称,文件名前可以加上绝对路径。

        需要注意的是,在使用 mysqldump 命令备份数据库时,直接在 DOS 命令行窗口中执行该命令即可,不需要登录到 MySQL 数据库

        接下来通过具体的案例来演示,在演示之前创建一个名称为 chapter08 的数据库,并在数据库中创建表 student,插人相应数据,SQL 语句如下:

mysql> CREATE DATABASE chapter08;
Query OK, 1 row affected (0.02 sec)mysql> USE chapter08;
Database changed
mysql> CREATE TABLE student(-> id int primary key auto_increment,-> name varchar(20),-> age int-> );
Query OK, 0 rows affected (0.02 sec)mysql> INSERT INTO student(name,age) VALUES('Tom',20);
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO student(name,age) VALUES('Jack',16);
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO student(name,age) VALUES('Lucy',18);
Query OK, 1 row affected (0.01 sec)

        上述 SQL语句执行成功后。为了验证数据是否添加成功,使用 SELECT语句查询表 student,查询结果如下:

mysql> SELECT * FROM student;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Tom  |   20 |
|  2 | Jack |   16 |
|  3 | Lucy |   18 |
+----+------+------+
3 rows in set (0.00 sec)

        从上述查询结果可以看出,数据添加成功了.

        例如,首先在用户目录下创建一个名为 backup 的文件夹用于存放备份好的文件,然后重新开启一个 DOS 命令行窗口(不用登录到 MySQL 数据库),使用 mysqldump 命令备份 chapter08 数据库mysqldump 语句如下:

mysqldump -uroot -p123456 chapter08>/Users/enjoy/buckup/chapter08.sgl

        上述语句执行成功后,会在 backup 文件夹中生成一个名为 chapter08.sql的备份文件,使用记事本打开该文件,可以看到如下所示的内容:

-- MySQL dump 10.13  Distrib 8.0.31, for macos12 (arm64)
--
-- Host: localhost    Database: chapter08
-- ------------------------------------------------------
-- Server version	8.0.31/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
-- Table structure for table `student`
--DROP TABLE IF EXISTS `student`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `student` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `student`
--LOCK TABLES `student` WRITE;
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
INSERT INTO `student` VALUES (1,'Tom',20),(2,'Jack',16),(3,'Lucy',18);
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;-- Dump completed on 2024-09-11 16:52:21

        从上述文件可以看出,备份文件中会包含 mysqldump 的版本号、MySQL的版本号主机名称、备份的数据库名称,以及一些 SET 语句、CREATE 语句、INSERT 语句、注释信息等。其中以“_”字符开头的都是 SQL的注释;以“/*!”开头、*/”结尾的语句都是可执行的 MySQL 注释,这些语句可以被 MySQL执行,但在其他数据库管理系统中将被作为注释忽略,这可以提高数据库的可移植性。

        需要注意的是,以“/*!40101”开头、“*/”结尾的注释语句中,40101是 MySQL数据库的版本号,相当于 MySQL 4.1.1,在还原数据时,如果当前 MySQL 的版本比MySQL 4.1.1高,“/* !40101”和“*/”之间的内容就被当作 SQL命令来执行,如果比当前版本低,“/*!40101”和“*/”之间的内容就被当作注释。

2、备份多个数据库

        myeqldump 而令不仅可以备份一个数据,还网时可以备份多个数据痒,其语法格武如下:

mysqldump -uusername -ppassword --database dbname1 [dbname2 dbname3...]>filename.sql

        上述语法格式中,"--databnses"参数后面至少原指定一个数据库名称,如果有多个势据库,名称之间用空格隔开。

3、备份所有数据库

        使用myeqldump 命令备份所有教据库时,只需在该命今后使用“-alldatabaees”参数即可,其语法格式如下:

mysqldump -uusername -ppassword --all-databases>filename.sql

        需要注意的是,如果使用“--all-databases”参教备份了所有的教据库,那么在还原数据库时,不需要创建数据库并指定要操作的教据库,因为对应的备份文件申包含CREATE DATABAS语句和 USE 语句。


http://www.ppmy.cn/ops/113118.html

相关文章

vue3+ant design vue 中弹窗自定义按钮设置及以冒号为基准布局

1、自定义弹窗按钮&#xff0c;去除取消和确定按钮。&#xff08;网上很多方法都是说通过插槽来实现&#xff0c;但是试了下不生效&#xff0c;那既然插槽不生效的话&#xff0c;干脆直接写按钮就好了&#xff09; <a-modalv-model:open"open"title"人员信息…

探索Go语言中的Goroutine并发机制

什么是Goroutine 在Go语言中,Goroutine 是程序中最基本的并发单位。事实上,每个Go程序都会自动创建一个goroutine,那就是主goroutine,程序启动时会立即执行。Goroutine是Go语言中处理并发问题的核心工具,因此理解它的工作原理至关重要。 简而言之,Goroutine是并发执行的…

ubuntu20.04编译mesa

依赖 # drm git clone https://gitlab.freedesktop.org/mesa/drm.git meson builddir/ ninja -C builddir/ install# wayland git clone https://gitlab.freedesktop.org/wayland/wayland.git meson setup builddir -Ddocumentationfalse ninja -C builddir/ install编译 sud…

qt绘制时钟

代码 #include "widget.h" #include "ui_widget.h"#include <QWidget> #include <QPaintEvent> //绘图事件 #include <QDebug> //测试 #include <QPainter> //画家 #include <QPen> //笔 #include <QBrush> //画刷 …

Vue路由:Vue router

目录 路由的基本概念 1. 路由 2. 单页应用SPA 3.前端路由的实现方式 3.1Hash模式 3.2History模式 Vue router 4 1.概述 2.安装使用 3.基础用法 3.1路由匹配规则声明 3.2动态路由匹配 3.3路由命名 3.4路由重定向 3.5路由嵌套 3.6命名视图 3.6声明式导航&编程…

python-奖金/贪心的小明

一&#xff1a;奖金 题目描述 企业发放的奖金根据利润提成。利润低于或等于 100000 元的&#xff0c;奖金可提 10%&#xff1b; 利润高于 100000 元&#xff0c;低于 200000 元&#xff08; 100000<I≤200000&#xff09;时&#xff0c;低于 100000 元的部分按 10% 提成&…

adb install失败: INSTALL_PARSE_FAILED_NO_CERTIFICATES

这个错误表明在尝试安装 APK 文件时出现了问题&#xff0c;原因是 APK 文件中的 AndroidManifest.xml 没有签名证书。在 Android 系统中&#xff0c;所有的应用都必须经过签名才能安装到设备上。以下是解决此问题的方法&#xff1a; 方法一&#xff1a;使用 Android Studio 或命…

一个好的云渲染,在动画渲染需要具备哪些条件

在当今快节奏的影视动画行业中&#xff0c;云渲染技术已经成为设计师和公司不可或缺的工具。它不仅减少了对昂贵硬件的依赖&#xff0c;还显著提高了工作效率&#xff0c;缩短了项目周期。云渲染提供高效、稳定、灵活且成本效益高的渲染服务&#xff0c;关键在于以下几个方面&a…