如何从MySQL全备份中恢复单个数据库或表?
创始人
2024-12-31 21:57:52
0 次浏览
0 评论
MySQL全备份如何只恢复一个库或者一个表?
在实际工作中,一个MySQL实例中可以有多个数据库。当我们进行备份时,通常会使用完整备份将所有数据库复制到一个文件中。
但是,有时您会遇到只需要恢复一个数据库或表的情况。
如何选择科达数据带您看看。
1、使用全量备份恢复数据库(database)的数据案例:有朋友在群里问关于MySQL数据库全量备份的问题。
如何仅恢复一个数据库1.使用–one-database选项?不建议使用此方法,经常会出现问题。
#mysql-uroot-pxx-Ddb1-o2从完整备份文件中删除CREATETABLE语句和INSERT所需的库数据,然后导入#sed-n'/^--CurrentDatabase:`db1`/,/^--Current数据库:`/p'all.dmp>db1.sql#mysql-uroot-pxx-Ddb12、使用全量备份恢复一张(表)的数据生产过程中,一位开发同事在更新表时没有添加where条件,所以所有的order_status列中的数据被删除为0。
通常情况下,mysqldump会备份整个数据库。
如果在恢复期间恢复整个数据库,这将非常耗时且不必要。
所以我们只恢复我们想要的表。
在mysqldump备份中,既有包含数据的表结构,也有INSERTINTO语句。
所以获胜者可以获得两份内容。
1、获取表结构#sed-e'/./{H;$!d;}'-e'x;/CREATEABLE`ecs_ugo_order_info`/!d;q'mysqldump_2017-05-23.sql2获取INSERTINTO语句用于数据恢复#grep-i'INSERTINTO`ecs_ugo_order_info`'mysqldump_2017-05-23.s。
ql>data.sql&3根据获取的表结构创建表,导入数据mysql-uroot-pxxxx4。
;')fromecs_ugo_order_infointooutfile'/tmp/ecs_ugo_order_info_recovery.sql';结果如下:1.updatexx.ecs_ugo_order_infosetorder_status=6whereorder_id=3254778;2.updatexx.ecs_ugo_order_infosetorder_status=6whereorder_id=3254778;tus=6whereorder_id=3254824;3.updatexx.ecs_ugo_order_infosetorder_status=6whereorder_id=3254870;5将order_status返回生产库中的正常值#mysql-uroot-pxxxxx.ugosl_derec。
SQL备份表(mysql备份表)
1.提取整个数据库:包括表结构和数据分区
mysqlmp-u用户名-p数据库名
示例:mysqlmp_uroot_p111111test1
2提取数据库内的一张表。
/p>
mysqlmp-u用户名-p数据库名表名
示例:mysqlmp_uroot_p111111test1user1
3提取多个表:
mysqlmp_uroot_p111111test1user1user2
4.导出数据库结构:只导出除数据部分之外的表结构
mysqlmp-uroot_p111111-d--add-drop-tabletest1
-d没有数据
--add-drop-table每当以下情况时将每个表添加到数据库中:如果发现表存在。
删除首先
5。
导入数据库
使用source命令访问mysql数据库控制台。
例如:
c:
mysql
然后使用source命令,以下参数适用于脚本文件(如之前备份的.sql语句文件):
mysql
备份mysql数据
其实你的问题是mysql的核心问题。备份和恢复mysql数据有3种方法。
1.使用SQL语句导入导出2.使用mysqldump和mysqlimport工具3.直接复制数据文件既然我们已经详细介绍了冷备份,那么我们就给大家点分。
使用SQL语句完成mysql的备份和恢复。
您可以使用SELECTINTOOUTFILE语句来备份数据。
使用LOADDATAINFILE语句恢复数据。
此方法允许您仅导出数据内容。
表结构无法导出。
如果表结构文件损坏,必须先恢复原来的表结构。
语法:SELECT*INTO{OUTFILE|DUMPFILE}'file_name'FROMtbl_nameLOADDATA[LOW_PRIORITY][LOCAL]INFILE'file_name.txt'[REPLACE|IGNORE]INTOTABLEtbl_nameSELECT...INTOOUTFILE'file_name'表单的SELECT语句记录所选行。
写信给.该文件必须在服务器主机上创建,并且不能已存在(这可以防止数据库表和文件(例如“/etc/passwd”)损坏)。
SELECT...INTOOUTFILE是LOADDATAINFILE的逆操作。
LOADDATAINFILE语句可以非常快速地将文本文件读入表中。
如果指定了LOCAL关键字,则从客户端主机读取文件。
如果未指定LOCAL,则文件必须驻留在服务器上。
(LOCAL在MySQL3.22.6及更高版本中可用。
)出于安全原因,读取位于服务器上的文本文件时,该文件必须位于数据库目录中或者是全局可读的。
此外,对服务器上的文件使用LOADDATAINFILE需要服务器主机上的文件权限。
此SELECTINTOOUTFILE语句需要服务器主机上的FILE权限。
为了避免重复记录,表必须有PRIMARYKEY或UNIQUE索引。
如果新记录与具有唯一索引值的旧记录重复,则REPLACE关键字将用新记录替换旧记录。
IGNORE会跳过为具有唯一索引的现有行输入重复行。
如果两个选项均未指定,则在找到重复索引值时会发生错误,并且文本文件的其余部分将被忽略。
LOW_PRIORITY关键字推迟LOADDATA语句的执行,直到没有其他客户端正在读取该表。
使用LOCAL需要将文件内容从客户端主机传输到服务器主机,这比服务器直接访问文件时慢。
另一方面,读取本地文件不需要文件权限。
本地使用LOCAL关键字从文件加载数据时,服务器无法在操作过程中停止文件传输,因此默认行为就像指定了IGNORE一样。
在服务器主机上搜索文件时,服务器使用以下规则:如果指定了绝对路径名,服务器将使用该路径名。
如果指定了包含一个或多个前面部分的相对路径名,服务器将搜索相对于服务器数据目录的文件。
如果指定不带前导部分的文件名,服务器将在当前数据库的数据库目录中查找该文件。
假设表tbl_name有PRIMARYKEY或UNIQUE索引,则数据表备份过程如下:1.锁定数据表,防止备份过程中数据表被更新。
了解有关mysql>LOCKTABLESREADtbl_name的表锁的更多信息。
这将在下一章中解释。
2.导出数据mysql>SELECT*INTOOUTFILE'tbl_name.bak'FROMtbl_name;3.解锁表mysql>UNLOCKTABLES;恢复备份数据对应的流程为:1.添加写锁:mysql>LOCKTABLEStbl_nameWRITE;恢复数据mysql>LOADDATAINFILE‘tbl_name.bak’->REPLACEINTOTABLEtbl_name;如果指定LOW_PRIORITY关键字,则不需要像上面那样锁定表。
数据导入被推迟到客户不读取该表为止,因此:mysql>LOADDATALOW_PRIORITYINFILE‘tbl_name’->REPLACEINTOTABLEtbl_name;3.解锁表mysql->UNLOCAKTABLES。
2如果您只是想使用mysqlimport来恢复数据,则不需要在客户端运行任何SQL语句,因为您只需要使用mysqlimport程序即可。
该程序完全支持LOADDATA语句和服务器LOADDATAINFILE命令。
运行命令mysqlimport-。
-help,仔细查看输出。
您可以在这里获得帮。
shell>mysqlimport[options]db_namefilename...对于在命令行上指定的每个文本文件,mysqlimport会去除文件扩展名并使用它来确定将文件内容导入到哪个表中。
例如,名称“Patient.txt”、“Patient.text”和“Patient”均导入到名为Patient的表中。
常用的选项有:-C,--compress如果客户端和服务器都支持压缩,则压缩两者之间的所有信息。
-d,--delete在导入文本文件之前清空表。
l,--lock-tables在处理文本文件之前写入所有指定的表。
这可确保所有表在服务器上同步。
--low-priority、--local、--replace和-ignore分别对应于LOADDATA语句中的LOW_PRIORITY、LOCAL、REPLACE和IGNORE关键字。
例如数据库db1中的表tbl1要恢复数据,假设要保存数据的文件是tbl1.bak。
shell>mysqlimport--lock-tables--replacedb1tbl1.bak。
在恢复数据之前锁定表。
--low-priority选项可用:shell>mysqlimport--low-priority--replacedb1tbl1.bak如果要在远程服务器上恢复数据,还可以执行以下操作:shell>mysqlimport-C--lock-tables--replacedb1tbl1.bak当然,解包是消耗CPU的。
时间。
与任何其他客户端一样,您可能需要指定-u、-p选项进行身份验证。
您还可以将这些参数保存到可选文件my.cnf中。
具体方法和其他客户端是一样的,这里就不详细解释了。
2.使用mysqldump备份数据。
与mysqlimport类似,还有一个备份数据的工具mysqldump,它可以在导出的文件中包含SQL语句,从而改变数据库表的结构。
您还可以备份数据库或整个数据库系统。
mysqldump[OPTIONS]database[tables]mysqldump[OPTIONS]--databases[OPTIONS]DB1[DB2DB3...]mysqldump[OPTIONS]--all-databases[OPTIONS]如果没有指定表,则转储整个数据库。
。
您可以通过运行mysqldump--help获取您的mysqldump版本支持的选项列表。
1.如何备份数据库例如,假设您要备份服务器主机上的数据库db_nameshell>mydqldumpdb_name。
当然,mysqldump默认将其输出放在标准输出上,因此您需要重定向标准输出。
例如,将数据库备份到bd_name.bak。
shell>mydqldumpdb_name>db_name.bak请注意,您无法使用此方法指定数据表。
shell>mydqldump--databasesdb1db1>db.bak。
您还可以备份整个数据库系统的副本,但对于大型系统这没有实际价值:shell>mydqldump--all-databases>db.bak但是,如果您使用mysqldump导出表结构是很有用的。
如果您要恢复大量数据,则它不起作用。
大量的SQL语句降低了恢复效率。
--tab选项允许您将数据和创建表的SQL语句分开。
-T,在--tab=选项指定的目录中创建一个包含制表符分隔的列值的数据文件和一个包含用于创建表结构的SQL语句的文件。
它们分别由扩展名.txt和.sql表示。
。
此选项不能与--databases或--all-databases一起使用。
此外,mysqldump必须在服务器主机上运行。
例如,假设数据库db包含表tbl1和tbl2,并且您计划将它们备份到/var/mysqldbshell>mysqldump--tab=/var/mysqldb/db。
结果在/目录下生成了四个文件。
var/mysqldb,即tbl1.txt、tbl1.sql、tbl2.txt和tbl2.sql。
2.mysql转储该实用程序的身份验证问题与任何其他客户端的身份验证问题相同。
如果您不使用匿名用户,则可能需要手动指定参数或使用选项。
文件::shell>mysql-uroot–pmypassdb_name>db_name.sql或在选项文件中如下参数:运行[mysqldump]user=rootpassword=mypass和shell>mysqldumpdb_name>db_name.sql一切正常,没有任何问题,但请注意,您的命令历史记录会泄露您的密码或使其无法访问。
如果将选项文件发送给您以外的用户,数据库服务器也需要此选项文件,因此为了避免泄漏,选项文件由启动服务器的用户(例如mysql)拥有和访问。
在Unix上,有一个解决方案:在用户目录(例如/home/some_user/.my.cnf)中提供一个个人选项文件(~/.my.cnf),并将上述内容添加到该文件中。
注意防止泄漏。
在NT系统上,您只需使指定用户可以访问c:\my.cnf。
您可能想知道为什么这么麻烦。
例如,使用命令行:shell>mysql-uroot–pdb_name>db_name.sql或[mysqldump]user=rootpassword添加到选项文件并运行命令行。
Shell>mysqldb_name>db_name.sql你发现了什么?标准输出被重定向到文件db_name.sql,所以你看不到熟悉的Enterpassword:提示符,程序正在等待你输入密码。
对于重定向,使用交互模式会导致问题。
对于上述情况,您也可以直接输入密码。
然后文件db_name.sql的第一行显示:Enterpassword:#......这个问题可能看起来微不足道,但mysqldump将结果打印到标准输出,这样做的原因是像这样重定向:其他程序的标准输入使脚本编写更加容易。
例如,使用另一个数据库的信息来丰富您的MySQL数据库也很有用。
shell>mysqldump--optdatabase|mysql--host=remote-host-Cdatabase如果mysqldump仍在提示输入密码的交互模式下运行,则此命令将不会成功,但mysql会提示输入密码。
交互模式。
如果在选项文件的[client]或[mysqldump]部分中指定了密码选项,但未指定密码,则可以在其他部分中指定密码(例如,[client]user)。
optionpassword=mypass=root密码[mysqldump]]user=adminpassword=mypass那么mysqldump需要输入admin用户的密码:mysql>mysqldumpdb_name即使您使用如下命令行:mysql>mysqldump–uroot–ppass1db,情况也是如此,但您将需要使用-u指定的用户的密码。
对于使用选项文件的其他客户端程序也是如此。
3.关于add-lock生成的SQL语句的优化控制对于add-lock生成的SQL语句,在每个表恢复数据之前添加LOCKTABLES,之后添加UNLOCKTABLE。
(加快MySQL的插入速度)。
--add-drop-table生成的SQL语句在每个create语句之前添加删除表。
-e,--extended-insert使用新的多行INSERT语法。
有两个选项可以加快表备份速度(如果您的插入语句更严格且更快):-l,--lock-tables在开始导出数据之前,您可以对表进行读锁定。
-q,--quick不缓冲查询并将其直接转储到标准输出。
理论上,您应该在备份时指定所有有争议的选项。
这使得命令行非常复杂,但您只需指定--opt选项即可,上述所有选项都会生效。
例如,导出一个大型数据库:shell>mysqldump--optdb_name>db_name.txt当然,如果使用--tab选项,则不会生成SQL语句来恢复数据,所以使用--opt只会加快速度。
开始导出数据。
4、恢复mysqldump备份的数据。
备份文件是SQL语句的集合,因此如果要使用mysqldump备份单个数据库或表,必须使用带有shell>mysqldump的客户端。
--optdb_name>db_name.sql。
Create不包含在db_name.sql中。
选择一个或多个数据库的语句必须指定数据库shell>mysqldb2
示例:shell>mysqldump--databasesdb_name>db_name.sqlshell>mysql
shell>mysqldump--tab=/path/to/dir--opttest如果你想恢复表结构,你可以这样做:shell>mysqlmysqlimport-ldb/path/to/dir/tbl1.txt…在Unix平台上使用时(推荐)),更方便:shell>ls-l*.sql|mysqldbshell>mysqlimport--lock-tablesdb/path/to/dir/*.txt使用3.中所述的直接复制方法进行备份和恢复。
在本章的前两节中,您将了解到MySQL数据库和表是直接通过目录和表文件实现的,因此在MySQL中通过直接复制文件来备份数据库数据特别方便。
从MySQL3.23开始,MyISAM表是默认的表类型,这个表可以确保系统内数据共享。
使用直接复制方法进行备份时,请特别注意该表未被使用。
该表必须首先被读锁定。
备份一个表需要三个文件:对于MyISAM表:tbl_name.frm表描述文件,tbl_name.MYD表数据文件,tbl_name.MYI表索引文件,对于ISAM表:tbl_name.frm表描述文件,tbl_name.ISD表数据文件tbl_name对于.ISM的索引文件表,您可以将文件直接从一台数据库服务器复制到另一台数据库服务器。
对于MyISAM表,与您的问题类似,您可以在不同硬件系统上运行的服务器之间复制文件。
将远程机器的mysql数据ftp到本地mysql目录并重新启动mysql。
下一篇:
C语言代码实例:高效提取数组中的素数方法
相关文章
三招教你快速检查Redis服务启动状态及...
2024-12-18 20:29:38SQL Server实例启动与关闭命令大...
2024-12-16 10:43:57MySQL启动与连接全攻略:Workbe...
2025-01-05 17:40:31PL/SQL导出DMP文件与SQL数据导...
2024-12-21 03:34:06移动云MySQL:高效管理、灵活扩展,揭...
2024-12-16 20:01:01sql代码查询
2025-01-07 00:23:30SQL表结构操作指南:基础语句与实际应用
2024-12-17 00:30:48SQL数据附加失败错误3456解决方案:...
2024-12-17 09:24:53SQL日期时间函数:获取和操作日期与时间...
2024-12-31 17:23:16SQL Server 2008 远程连接...
2024-12-18 17:57:18最新文章
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
12
2025-01
热门文章
1
Python代码实现:如何判断三角形的三...
python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...
2
高效掌握:CMD命令轻松启动、关闭及登录...
如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...
3
SQL字段默认值设置全攻略:轻松实现自动...
sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...
4
MySQL查询加速秘籍:PolarDB ...
mysql中in大量数据导致查询速度慢怎么优化?在MySQL中处理大量数据时,查...
5
SQL2000数据库备份压缩技巧:优化空...
怎么将SQL2000中的较大的备份数据库压缩变小更改数据库属性-选项-恢复模型很...
6
SQL字符串处理技巧:单引号使用与转义标...
SQL语句中,字符串类型的值均使用什么符号标明?单引号如果字符串内有单引号,请小...
7
Windows环境下Redis安装指南与...
redis安装windowsredis基本简介与安装安装Redis首先需要获取安...
8
深度解析:Redis性能优势与局限性,助...
redis有哪些优缺点?Redis的全称是RemoteDictionary.Se...
9
深入解析:MySQL数据库的特性与应用
mysql是什么MySQL是一个关系数据库管理系统。MySQL是一个开源关系数据...
10
SQL必备:详解常用字符串函数及数据类型...
sql常用的字符串函数都有哪些常用的字符串函数有:1.字符转换功能1.ASCII...