首页 > 数据库 >MySQL数据备份

MySQL数据备份

时间:2024-10-12 09:22:40浏览次数:1  
标签:SET -- 备份 数据备份 id MySQL 数据库

MySQL数据备份是数据库管理员非常重要的工作之一。系统意外崩溃或者硬件的损坏都可能导致数据的丢失,因此MySQL管理员应该定期地备份数据,使得在意外情况发生时最大限度地减少损失。本节将介绍数据备份的3种方法。

11.1.1  使用mysqldump命令备份数据

mysqldump是MySQL提供的一个非常有用的数据库备份工具。mysqldump命令执行时,可以将数据库备份成一个文本文件,该文件中实际包含了多个CREATE和INSERT语句,使用这些语句可以重新创建表和插入数据。

mysqldump备份数据库的基本语法格式如下:

mysqldump  –u user –h host –ppassword dbname[tbname, [tbname...]]> filename.sql

 

user表示用户名称;host表示登录用户的主机名称;password为登录密码;dbname为需要备份的数据库名称;tbname为dbname数据库中需要备份的数据表,可以指定多张需要备份的表,如果不指定,则表示备份所有数据表;右箭头符号(>)告诉mysqldump将备份数据表的定义和数据写入备份文件;filename.sql为备份文件的名称。

1. 使用mysqldump备份单个数据库中的所有表

【例11.1】使用mysqldump命令备份单个数据库中的所有表。

为了更好地理解mysqldump工具是如何工作的,这里给出一个完整的数据库例子。首先登录MySQL,按下面数据库结构创建booksDB数据库和各个表,并插入数据记录。数据库和表定义如下:

CREATE DATABASE booksDB;

use booksDB;

 

CREATE TABLE books

(

bk_id INT NOT NULL PRIMARY KEY,

bk_title VARCHAR(50) NOT NULL,

copyright YEAR NOT NULL

);

INSERT INTO books

VALUES (11078, 'Learning MySQL', 2010),

(11033, 'Study Html', 2011),

(11035, 'How to use php', 2003),

(11072, 'Teach yourself javascript', 2005),

(11028, 'Learning C++', 2005),

(11069, 'MySQL professional', 2009),

(11026, 'Guide to MySQL 9.0', 2024),

(11041, 'Inside VC++', 2011);

 

CREATE TABLE authors

(

auth_id INT NOT NULL PRIMARY KEY,

auth_name VARCHAR(20),

auth_gender CHAR(1)

);

INSERT INTO authors  

VALUES (1001, 'WriterX' ,'f'),

(1002, 'WriterA' ,'f'),

(1003, 'WriterB' ,'m'),

(1004, 'WriterC' ,'f'),

(1011, 'WriterD' ,'f'),

(1012, 'WriterE' ,'m'),

(1013, 'WriterF' ,'m'),

(1014, 'WriterG' ,'f'),

(1015, 'WriterH' ,'f');

 

CREATE TABLE authorbook

(

auth_id INT NOT NULL,

bk_id INT NOT NULL,

PRIMARY KEY (auth_id, bk_id),

FOREIGN KEY (auth_id) REFERENCES authors (auth_id),

FOREIGN KEY (bk_id) REFERENCES books (bk_id)

);

 

INSERT INTO authorbook

VALUES (1001, 11033), (1002, 11035), (1003, 11072), (1004, 11028),

(1011, 11078), (1012, 11026), (1012, 11041), (1014, 11069);

 

完成数据插入后,打开操作系统命令行输入窗口,输入如下备份命令:

C:\ >mysqldump -u root -p booksdb > C:/backup/booksdb_20240301.sql

Enter password: **

 

 这里要保证C盘下的backup文件夹存在,否则将提示错误信息:系统找不到指定的路径。

输入密码之后,MySQL便对数据库进行备份。使用文本查看器打开C:\backup文件夹下刚才备份过的文件,部分文件内容大致如下:

-- MySQL dump 10.13  Distrib 9.0.1, for Win64 (x86_64)

--

-- Host: localhost    Database: booksdb

-- ------------------------------------------------------

-- Server version    9.0.1

/*!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 `authorbook`

--

DROP TABLE IF EXISTS `authorbook`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `authorbook` (

  `auth_id` int NOT NULL,

  `bk_id` int NOT NULL,

  PRIMARY KEY (`auth_id`,`bk_id`),

  KEY `bk_id` (`bk_id`),

  CONSTRAINT `authorbook_ibfk_1` FOREIGN KEY (`auth_id`) REFERENCES `authors` (`auth_id`),

  CONSTRAINT `authorbook_ibfk_2` FOREIGN KEY (`bk_id`) REFERENCES `books` (`bk_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*!40101 SET character_set_client = @saved_cs_client */;

--

-- Dumping data for table `authorbook`

--

LOCK TABLES `authorbook` WRITE;

/*!40000 ALTER TABLE `authorbook` DISABLE KEYS */;

INSERT INTO `authorbook` VALUES (1012,11026),(1004,11028),(1001,11033),(1002,11035),(1012,11041),(1014,11069),(1003,11072),(1011,11078);

/*!40000 ALTER TABLE `authorbook` ENABLE KEYS */;

UNLOCK TABLES;

--

-- Table structure for table `authors`

--

DROP TABLE IF EXISTS `authors`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `authors` (

  `auth_id` int NOT NULL,

  `auth_name` varchar(20) DEFAULT NULL,

  `auth_gender` char(1) DEFAULT NULL,

  PRIMARY KEY (`auth_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `authors`

--

LOCK TABLES `authors` WRITE;

/*!40000 ALTER TABLE `authors` DISABLE KEYS */;

INSERT INTO `authors` VALUES (1001,'WriterX','f'),(1002,'WriterA','f'),(1003,'WriterB','m'),(1004,'WriterC','f'),(1011,'WriterD','f'),(1012,'WriterE','m'),(1013,'WriterF','m'),(1014,'WriterG','f'),(1015,'WriterH','f');

/*!40000 ALTER TABLE `authors` ENABLE KEYS */;

UNLOCK TABLES;

--

-- Table structure for table `books`

--

DROP TABLE IF EXISTS `books`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `books` (

  `bk_id` int NOT NULL,

  `bk_title` varchar(50) NOT NULL,

  `copyright` year NOT NULL,

  PRIMARY KEY (`bk_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*!40101 SET character_set_client = @saved_cs_client */;

--

-- Dumping data for table `books`

--

LOCK TABLES `books` WRITE;

/*!40000 ALTER TABLE `books` DISABLE KEYS */;

INSERT INTO `books` VALUES (11026,'Guide to MySQL 9.0',2024),(11028,'Learning C++',2005),(11033,'Study Html',2011),(11035,'How to use php',2003),(11041,'Inside VC++',2011),(11069,'MySQL professional',2009),(11072,'Teach yourself javascript',2005),(11078,'Learning MySQL',2010);

/*!40000 ALTER TABLE `books` 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-07-25 18:39:42

 

 

可以看到,备份文件中包含了一些信息,文件开头首先表明了备份文件使用的mysqldump工具的版本号;然后是备份账户的名称和主机信息,以及备份的数据库的名称;最后是MySQL服务器的版本号,在这里为9.0.1。

接下来是一些SET语句,这些语句将一些系统变量值赋给用户自定义变量,以确保被恢复的数据库的系统变量和原来备份时的变量相同,例如:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

 

该SET语句将当前系统变量character_set_client的值赋给用户自定义变量@old_character_ set_client。其他变量与此类似。

备份文件的最后几行是使用SET语句恢复服务器系统变量原来的值,例如:

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

 

该语句将用户自定义的变量@old_character_set_client中保存的值赋给实际的系统变量character_set_client。

备份文件中以“--”字符开头的行为注释语句;以“/*!”开头、“*/”结尾的语句为可执行的MySQL注释,这些语句可以被MySQL执行,但在其他数据库管理系统中将被作为注释忽略,以提高数据库的可移植性。

另外,备份文件的一些可执行注释语句以数字开头,该数字代表的是MySQL版本号,表示这些语句只有在指定的MySQL版本或者比该版本高的情况下才能执行。例如“40101”,表明这些语句只有在MySQL版本号为4.01.01或者更高的条件下才可以被执行。

2. 使用mysqldump备份单个数据库中的某张表

mysqldump还可以备份数据库中的某张表。

备份某张表和备份数据库中所有表的语句的不同之处在于,要在数据库名称dbname之后指定需要备份的表名称。

【例11.2】备份booksDB数据库中的表books,SQL语句如下:

mysqldump -u root -p booksDB books > C:/backup/books_20240301.sql 

 

该语句创建名称为“books_20240301.sql”的备份文件,文件中包含了前面介绍的SET语句等内容;不同的是,该文件只包含表books的CREATE和INSERT语句。

3. 使用mysqldump备份多个数据库

如果要使用mysqldump备份多个数据库,就需要使用--databases参数。备份多个数据库的语法格式如下:

mysqldump  –u user –h host –p --databases  [dbname, [dbname...]] > filename.sql

 

使用--databases参数之后,必须指定至少一个数据库的名称,多个数据库名称之间用空格隔开。

【例11.3】使用mysqldump备份数据库booksDB和test_db,SQL语句如下:

mysqldump -u root -p --databases  booksDB test_db>C:\backup\books_testDB_20240301.sql

 

该语句创建名称为“books_testDB_20240301.sql”的备份文件,该文件中包含了创建两个数据库booksDB和test_db所必需的所有语句。

另外,使用--all-databases参数可以备份系统中所有的数据库,SQL语句如下:

mysqldump  –u user –h host –p --all-databases > filename.sql

 

使用参数--all-databases时,不需要指定数据库名称。

【例11.4】使用mysqldump备份服务器中的所有数据库,输入语句如下:

mysqldump  -u root -p --all-databases > C:/backup/alldbinMySQL.sql

 

该语句创建名称为“alldbinMySQL.sql”的备份文件,文件中包含了系统中所有数据库的备份信息。

 如果在服务器上进行备份,并且表均为MyISAM表,就应该考虑使用MySQLhotcopy,因为可以更快地进行备份和恢复。

11.1.2  直接复制整个数据库目录

因为MySQL表保存为文件方式,所以可以直接复制MySQL数据库的存储目录和文件进行备份。MySQL的数据库目录位置不一定相同,在Windows平台下,MySQL 9.0存放数据库的目录通常为“C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 9.0\data”或者其他用户自定义目录;在Linux平台下,数据库目录位置通常为“/var/lib/MySQL/”,不同Linux版本下目录会有所不同,读者应在自己使用的平台下查找该目录。

这是一种简单、快速、有效的备份方式。要想保持备份的一致性,备份前需要对相关表执行LOCK TABLES操作,然后对表执行FLUSH TABLES语句。FLUSH TABLES语句可以确保开始备份前将所有激活的索引页写入硬盘,这样当复制数据库目录中的文件时,将允许其他客户继续查询表。当然,也可以停止MySQL服务再进行备份操作。

这种方法虽然简单,但并不是最好的,因为这种方法对InnoDB存储引擎的表不适用。使用这种方法备份的数据最好恢复到相同版本的服务器中,不同的版本可能不兼容。

 在MySQL版本号中,第一个数字表示主版本号,主版本号相同的MySQL数据库文件格式相同。

11.1.3  使用MySQLhotcopy工具快速备份

MySQLhotcopy是一个Perl脚本,最初由Tim Bunce编写并提供。它使用LOCK TABLES、FLUSH TABLES和cp或scp来快速备份数据库。它是备份数据库或单表最快的途径,但它只能运行在数据库目录所在的机器上,并且只能备份MyISAM类型的表。MySQLhotcopy在UNIX系统中运行。

MySQLhotcopy命令的语法格式如下:

mysqlhotcopy db_name_1, ... db_name_n  /path/to/new_directory

 

db_name_1,…,db_name_n分别为需要备份的数据库的名称;“/path/to/new_directory”指定备份文件目录。

【例11.5】使用MySQLhotcopy备份数据库test_db到“/usr/backup”目录下,SQL语句如下:

mysqlhotcopy  -u root –p test_db /usr/backup

 

要想执行MySQLhotcopy,必须可以访问备份的表文件,具有那些表的SELECT权限、RELOAD权限(以便能够执行FLUSH TABLES)和LOCK TABLES权限。

 MySQLhotcopy只是将表所在的目录复制到另一个位置,只能用于备份MyISAM表和ARCHIVE表,备份InnoDB类型的数据表时会出现错误信息。由于它复制本地格式的文件,因此也不能移植到其他硬件或操作系统下。

 

标签:SET,--,备份,数据备份,id,MySQL,数据库
From: https://www.cnblogs.com/brucexia/p/18459819

相关文章

  • mysql数据库服务器错误怎么回事
    MySQL数据库服务器错误可能由多种原因导致,这里列举一些常见的问题及其解决方法:服务未启动检查MySQL服务是否已经启动。在命令行中使用 netstartmysql (Windows)或 sudoservicemysqlstart (Linux)来尝试启动MySQL服务。配置文件错误确认my.cnf(Linux)或my.ini(Window......
  • 在Java程序中监听mysql的binlog
    目录1、背景2、mysql-binlog-connector-java简介3、准备工作1、验证数据库是否开启binlog2、开启数据库的binlog3、创建具有REPLICATIONSLAVE权限的用户4、事件类型eventType解释1、TABLE_MAP的注意事项2、获取操作的列名5、监听binlog的position1、从最新的binlog位置开始监......
  • MySQL 时间类型 DATE、DATETIME和TIMESTAMP
    1.DATE、DATETIME和TIMESTAMP表达的时间范围TypeRangeRemarkDATE'1000-01-01' to '9999-12-31'只有日期部分,没有时间部分DATETIME'1000-01-0100:00:00' to '9999-12-3123:59:59'时间格式为 YYYY-MM-DDhh:mm:ss,默认精确到秒TIMESTAMP '1970-01-0100:00:01......
  • 毕设项目案例实战II基于Java+Spring Boot+MySQL的学生选课系统的设计与实现(源码+数据
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着信息技术的飞速发展和教育信息化的不......
  • MySQL 表的增删改查、表约束
    本篇博客主要用来记录和分享本人学习MySQL数据库的基本操作指令的笔记和心得,包括数据表操作、数据管理、数据类型的讲解以及表的约束。通过实际的示例和注意事项,帮助大家更好地理解和应用这些知识。一、数据表操作指令1.1创建数据表使用CREATETABLE指令可以创建一个新的数......
  • MySQL基础知识
    基础篇通用语法及分类DDL:数据定义语言,用来定义数据库对象(数据库、表、字段)DML:数据操作语言,用来对数据库表中的数据进行增删改DQL:数据查询语言,用来查询数据库中表的记录DCL:数据控制语言,用来创建数据库用户、控制数据库的控制权限DDL(数据定义语言)数据定义语言数据......
  • mysqldump文件中有SET @@SESSION.SQL_LOG_BIN= 0;解决方法
    mysqldump文件中有SET@@SESSION.SQL_LOG_BIN=0mysqldump-uroot-pmypassword--all-databases>test.sqlmoretest.sql--MySQLdump10.13Distrib5.7.21,forlinux-glibc2.12(x86_64)----Host:localhostDatabase:-------------------------------------......
  • 2024年最详细的mysql主从复制来啦
    mysql主从复制一、主从复制简述MySQL主从复制是一种数据库复制技术,用于在主数据库(Master)和一个或多个从数据库(Slave)之间同步数据。这种技术允许数据从主数据库复制到从数据库,实现数据的冗余存储和读写分离,从而提高数据库的可用性和扩展性。二、主从复制的优势主从复制的......
  • MySQL主从配置及详解
    MySQL主从配置是一种常见的数据库架构模式,旨在提高数据库的可用性、可伸缩性和数据冗余性。以下是对MySQL主从配置的详细解析及案例分析。一、MySQL主从配置详解1.配置原理MySQL主从复制基于主服务器在二进制日志(binarylog)中跟踪所有对数据库的更改(如更新、删除等)。从服务器......
  • php毕业设计下载(全套源码+配套论文)——基于php+mysql的社区交流网站设计与实现
    基于php+mysql的社区交流网站设计与实现(全套源码+配套论文)大家好,今天给大家介绍基于php+mysql的社区交流网站设计与实现,更多精选毕业设计项目实例见文末哦。文章目录:基于php+mysql的社区交流网站设计与实现(全套源码+配套论文)1、项目简介2、资源详情3、关键词:4、资源......