【mysql】基于mysqldump备份数据库

1.备份数据库

1.1mysql备份类型

在操作之前,我们先来看一下mysql有哪些备份类型

1). 按照备份数据库对数据库的影响,我们可以分为

Hot backup(热备):也叫在线备份。指在数据库运行中直接备份,对正在运行的数据库没有任何影响。

Cold backup(冷备):也叫离线备份。指在数据库停止的情况下备份。

Warm backup(温备):在数据库运行时备份,会加一个全局锁以保证数据的一致性,会对当前数据库的操作有影响。

2). 按照备份后的文件内容分为

逻辑备份:指备份后的文件内容是可读的,通常为文本文件,内容一般是SQL语句或表内的实际数据(mysqldump和select * into outfile),一般适用于数据库的升级和迁移,还原时间较长。

裸文件备份:也叫物理备份。拷贝数据库的物理文件,数据库既可以处于运行状态(mysqlhotcopy、ibbackup、xtrabackup一类工具),也可以处于停止状态,还原时间较短。

3). 按照备份数据库的内容分为

完全备份:对数据库进行完整的备份。

增量备份:在上一次完整备份的基础上,对更新的数据进行备份(xtrabackup)

日志备份:二进制日志备份,主从同步。

1.2mysqldump备份数据库

mysqldump命令备份数据库是将数据库中的数据备份成一个文件,也就是后缀名为.sql的文件,将表的结构和数据存储在文件中。首先mysqldump会查找指定数据库中的所有表,然后执行create语句,然后将表中的数据转变为一条insert语句,这样一个sql文件就好了。

mysqldump是逻辑备份工具,支持MyISAMInnoDB引擎。数据库运行时,MyISAM引擎只支持温备,InnoDB支持热备和温备。

1.2.0mysqldump的基本操作

mysqldump -u username -p dbname table1 table2...>BackupName.sql;
其中:
-u username为用户的用户名,跟数据库登录操作一样
-p 为要登录的密码,但是注意一点,不要将密码直接写在-p的后面,例如:-p123456,这样会警告提示输入的指令安全性差。
dbname 为数据库名
table1,table2为数据库表名
> BackupName.sql 为所要备份到哪个文件夹,也可以指定路径,比如
> e:mysqlStore\BackupName.sql
可以备份到指定的文件夹内


;KL

1.2.1备份全部数据库

mysqldump -u root -p -x  --all-databases > e:mysqlStore\allDB.sql

注意


这里有一个 -x,如果不加,写成以下命令

mysqldump -u root -p  --all-databases > e:allDB.sql

有可能会出现

mysqldump: Got error: 1449: The user specified as a definer ('root'@'%') does not exist when using LOCK TABLES

网上查很多都是说 root 用户访问权限不够的问题,于是为root用户授权;

grant all privileges on *.* to root@"192.168.0.0/255.255.0.0" identified by "2008";

然后进行查看授权

mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
+-------------------------------------------------+

| query                                           |

+-------------------------------------------------+

| User: 'root'@'%';                               |

| User: 'root'@'localhost';                       |

+-------------------------------------------------+

9 rows in set (0.00 sec)

在次执行,却发现还是没有用

mysqldump -u root -p  --all-databases > e:allDB.sql

执行结果:

The user specified as a definer (‘root’@’%’) does not exist when using LOCK TABLES


所以我又继续查找,发现是因为这个数据库是在使用状态,导致导出数据时失败,在mysqldump时使用 -x 选项解决此问题。

–lock-all-tables,-x

在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction--lock-tables 选项。

执行带有 -x 的选项

mysqldump -u root -p -x  --all-databases > e:allDB.sql

发现还有问题,报错为

mysqldump: Couldn’t execute 'SHOW FIELDS FROM v_attendance': View ‘class_schedule.v_attendance’ references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them (1356)

这个原因是因为在class_schedule这个数据库中有视图的问题,所以解决办法是优化视图和删除,本次视图没有用,所以我直接删了,但还是看大家需求,毕竟删库跑路这方法挺危险的。

删除视图后,执行带有 -x 的命令

mysqldump -u root -p -x  --all-databases > e:allDB.sql

发现可以执行,并且在e盘下面导出一个allDB.sql文件


1.1.2备份指定的数据库

我们现在举例来备份数据库中已经存在的mysql数据库,

mysqldump -u root -p  --databases mysql > e:mysqlStore\singelDB.sql

注意

  1. databases前面是两个 - -,而且必须连在一起,如果没连在一起,那么有可能提示

Got error: 1049: Unknown database ‘xxx’ when selecting the database

原因:
该命令表示您要在提示符下输入密码并myDB从xxx数据库中转储表。如果您删除了“ xxx”部分并在提示符下输入密码,则它应该可以工作。

如果您实际上想在命令行上指定密码,则必须这样做-pWHATEVER(其中“ WHATEVER”是文字密码,切换后没有空格),或–password=WHATEVER:

在命令行上指定密码应该被认为是不安全的。

也就是说如果我们- -和databases没有连在一起,那么有可能会误认为 - -是一个密码,从而使得失败,可谓是细节决定成败啊!

在我们执行完sql命令后,也会发现在指定文件夹中会有一个singleDB.sql文件
在这里插入图片描述


1.1.3备份指定数据库中指定表

比如说我们现在要备份数据库 mysql 中的 db 表,执行以下命令

mysqldump -u root -p mysql db > e:mysqlStore\dbTable.sql

这里我们发现 -p 后面就是 数据库+对应的表

在这里插入图片描述

1.1.4备份指定数据库的指定的表结构

有时候我们可能只想备份数据库中表的结构,不想要数据,那么只需要在前面加一个 -d就好,我们还是以mysql数据库的db表为例

mysqldump -u root -p -d mysql db >e:mysqlStore\dbStruct.sql

在这里插入图片描述

1.1.5备份指定数据库中的所有表结构

同理,如果我们想备份指定数据库中所有的表结构,只需把数据库后面的db删除便可以了,还是以mysql数据库为例,执行以下命令

mysqldump -u root -p -d mysql >e:mysqlStore\mysqlAllStruct.sql

在这里插入图片描述

1.1.6备份指定数据库中的指定表的数据

如果我们只想要指定数据库中指定表的数据,而不是结构,那么只需将-d换成-t便可以了,我们还是以mysql中的db表为例

mysqldump -u root -p -t mysql db >e:mysqlStore\dbData.sql

在这里插入图片描述

1.1.7备份指定数据库中的所有表的数据

还是一样的道理,如果我们要备份指定数据库中的所有表的数据,只需把后面对应的表名删除便可以了,执行以下命令
在这里插入图片描述

mysqldump -u root -p -t mysql >e:mysqlStore\mysqlAllData.sql

猜你喜欢

转载自blog.csdn.net/Black_Customer/article/details/112552854