MySQL数据库恢复攻略:从备份到Binlog,全面解析数据恢复方法

创始人
2024-12-16 01:51:26
0 次浏览
0 评论

如何正确还原MySQL数据库mysql数据库如何还原

MySQL是目前使用最广泛的关系数据库。
它具有强大的功能和高性能,广泛用于存储内部/外部企业系统和网站系统,以及外部应用程序的数据源。
在使用MySQL数据库时,可能会因为各种原因导致数据表损坏或丢失,这就需要正确恢复MySQL数据库表。
下面详细介绍如何正确恢复MySQL数据库表。
1.可以使用MySQLDump数据库备份程序。
MySQLDump可以快速将MySQL数据库备份到磁盘并轻松将备份恢复到原始状态。
它使用以下代码来备份MySQL数据库:mysqldump-uroot-pdatabase_name>database_name.sql2您可以使用MySQLAdministrator工具来实现数据库备份和恢复。
MySQLAdministrator工具提供详细的数据库管理功能。
它可以备份当前的数据库状态,并将备份的数据恢复到之前的备份状态。
3.如果数据库表丢失,可以使用CREATETABLE语句重新创建它。
示例:createtablestudent(idintprimarykeynotnull,namevarchar(20)notnull,ageintnotnull)4.如果数据表丢失,可以从另一台MySQL服务器恢复表结构和数据。
可以使用MySQL官方提供的mysqldbcompare命令来比较两台MySQL服务器上的表结构。
在这里,您可以在RDS中选择要恢复的表结构,将表结构和数据恢复到原始位置也可以实现MySQL表恢复。
以上就是正确恢复MySQL数据库表的方法的介绍。
正确恢复MySQL数据库可以解决数据丢失的问题,有助于保护数据完整性并避免数据库损坏。
恢复数据库表并不是一件容易的事。
根据实际情况,我们可以选择合适的方案来恢复上述MySQL数据库表。

能实现清空表数据(数据库误删了表数据怎么恢复)

它可以删除表数据。
如果数据库不小心删除了表数据,如何恢复。
小编会告诉你更多相关信息。
作者:杨晓云,艾克森数据库工程师,负责支持MySQL和DMP产品的日常维护。
很好的MySQL故障排除。
情况:客户误删除了一张表,想要恢复某张表的数据,希望恢复删除前的数据。
前提:如何恢复数据库误删除的表下面介绍的方法是针对每日备份且启用binlog的数据库。
注:本文中的测试数据库是测试数据库,测试表是学生正在测试的表。
1、启用binlog和数据备份1、检查数据库是否启用binlog。
如果没有,则需要启用以下方法(1)在Linux系统中,修改文件/etc/my.cnfvi/。
etc/my.cnfserver_id=2log_bin=mysql-binbinlog_format=ROWexire_logs_days=30log_bin_basename=/数据库实例安装目录/log/binlog/端口号/mysql-binlog_bin_index=/数据库实例安装目录data/log/binlog/端口号/mysql-bin.index(2)重复开始翻译mysql服务systemctlrestartmysqld。
这里启用了Binlog。
您可以使用测试命令来查看它是否已启用。
2.检查数据表中的数据。
3、备份备份命令格式:mysqldump。
]数据库名称[表名称]mysqldump脚本名称[选项]--数据库名称[选项表名称]真实名称mysqldump[选项]--all-databases[选项]脚本名称(1)备份所有数据库mysqldump-h10.186.63.4-P4149-uu1-p1234567890q@-all-databases/test1.sql(2)备份单个数据库(多个库用空格分隔)[email protected](3)备份单表(多表用空格分隔)mysqldump-h10.186.63.4-P4149-uu1-p1234567890q@databasetabletest3.sql(4)备份指定数据库并排除某些表mysqldump-h10.186.63.4-P4149-uu1-p1234567890q@database--ignore-table=db.tb--ignore-table=db.tb2/test4.sql4.Insert导入数据后,删除数据库数据并插入数据,并创建binlog日志mysqlinsertintostudentvalues('201215130','张三','M',21,'IS');QueryOK,1rowaffected(0.03sec)mysqlinsertintostudentvalues('201215131','李思','女',20,'MA');QueryOK,1rowaffected(0.02sec)删除数据库mysqldropdatabasetest;QueryOK,1rowaffected(0.10sec)记住此时不要进行任何操作!!!2.恢复数据1.查看当前binlogmysqlshowmasterstatusG;****************************1.row****************************文件:mysql-bin.000021位置:68403303Binlog_Do_DB:Binlog_Ignore_DB:已执行_Gtid_Set:130df5fa-01c1-11ed-916a-02000aba3f04:1-4461511rowinset(0.00sec)Noqueryspecified注意:文件mysql-bin.000021将作为恢复删除数据的来源之一2.复制日志binlog。
将当前binlog复制到其他文件夹,避免进一步的操作影响binlog。
测试/数据/mysql/log/binlog/4149/mysql-bin.000021/root3。
binlog日志会转换为sql命令格式:filemysqlbinlog-ddatabasemysql-binxx.sql例如:/data/mysql/base/5.7。
25/bin/mysqlbinlog-dtestmysql-bin.0000210021bin.sql警告:选项--数据库已在使用中,但在所有情况下都将包含GTID如果要排除或包含事务,则应使用theooption,s--exclude-gtidsor--include-gtids编辑转换后的sql文件vi0021bin.sql,删除其中所有行为不当的命令(DROP命令),保存并开始数据恢复4.恢复文件/数据备份/mysql/base/5.7.25/bin/[email protected]检查数据库备份文件是否恢复mysqlshowdatabases;mysqlusetest;mysqlshowtables;mysqlselect*fromtable;5.备份后恢复删除的数据,并在binlog转换的sql文件SET@@GLOBAL.GTID_PURGED中注释掉这一行。
=/*SET@@GLOBAL.GTID_PURGED=XXXX*/;指定删除表所在数据库,导入data/data/mysql/base/5.7.25/bin/[email protected]查看恢复的数据mysqlselect*fromtest.student;+-------------+-------------+--------+-----+-------+|Sno|Sname|Ssex|Sage|Sdept|+-----------+---------+------+-----+--------+|201215121|李勇|男|20|CS||201215122|刘陈|女|19|CS||201215123|王敏|女|18|MA||201215125|张莉|男|19|IS||201215126|李一平|男|18|IS||201215127|张勤|女|19|CS||201215128|王芳|女|20|MA||201215129|黄林林|男|21|IS||201215130|李思|女|20|MA||201215131|张三|男|21|ARE|+------------+------------+-----+--------+--------+10rowsinset(0.00秒)

Windows下mysql中如何恢复某一个指定的表?

本节介绍如何将myisamchk(扩展名.MYI和.MYD)与MyISAM表一起使用。
您还可以(并且应该,如果可能)使用CHECKTABLE和REPAIRTABLE语句来检查和修复MyISAM表。
请参见第13.5.2.3节“CHECKTABLE语法”和第13.5.2.6节“REPAIRTABLE语法”。
表损坏的症状通常是查询意外停止,并显示错误,指出“tbl_name.frm”已锁定且无法更改。
未找到文件“tbl_name.MYI”(错误代码:nnn)。
文件意外终止。
日志文件已被破坏。
表处理器中发生错误nnn。
您可以运行perrornnn来获取有关错误的更多信息。
其中nnn是错误号。
以下示例展示了如何使用perror查找最常见错误号的含义(在表格中指出问题)。
shell>perror126127132134135136141144145126=索引文件已崩溃/错误文件格式127=历史文件已崩溃132=旧数据库文件134=历史已被删除(或历史文件冲突)135=没有更多空间。
Recordfile136=索引文件中没有更多空间141=唯一键重复、写入受限或已更新144=表存在冲突且上次恢复失败145=表被标记为冲突并需要恢复。
错误135(记录文件中没有更多空间)和错误136(索引文件中没有更多空间)不是可以通过简单修复解决的错误。
在这种情况下,您必须使用ALTERTABLE来增加MAX_ROWS和AVG_ROW_LENGTH表选项值。
ALTERTABLEtbl_nameMAX_ROWS=xxxAVG_ROW_LENGTH=yyy;如果您不知道当前表选项值,请使用SHOWCREATETABLE或DESCRIBE进行查询。
对于其他错误,必须修复表。
myisamchk通常可以检测并修复大多数问题。
恢复过程包括此处描述的四个步骤:在开始恢复之前,您必须进入数据库目录并检查表文件的权限。
在Unix上,确保运行mysqld的用户可以读取该文件(由于需要访问所识别的文件,因此用户也必须可以读取该文件)。
如果需要修改该文件,您还必须具有写入权限。
使用myisamchk恢复表的选项在前面的第5.9.5节“myisamchk:MyISAM表维护实用程序”中进行了描述。
以下部分列出了上述命令失败或您想要使用myisamchk提供的扩展的情况的示例。
要通过命令行恢复表,必须首先停止mysqld服务器。
如果你在远程服务器上运行mysqladminshutdown,即使在mysqladmin返回后,mysqld服务器也会继续运行一段时间,直到所有查询停止并且所有键都刷新到硬盘。
步骤1:如果需要大量表检查时间,请运行myisamchk*.MYI或myisamchk-e*.MYI。
使用-s(静默)选项来抑制不必要的消息。
如果mysqld服务器关闭,则必须使用--update-state选项告诉myisamchk将表标记为“已检查”。
仅应修复myisamchk报告错误的表。
对于这些表,请继续执行步骤2。
如果验证过程中遇到奇怪的错误(例如内存不足错误)或myisamchk崩溃,请转到步骤3。
步骤2:简单安全的恢复注意:为了更快地恢复,运行myisamchk时,您应该将sort_buffer_size和Key_buffer_size变量的值设置为可用内存的大约25%。
首先尝试myisamchk-r-qtbl_name(-r-q表示“快速恢复模式”)。
这将尝试恢复索引文件而不触及数据文件。
如果数据文件包含您需要的所有内容,并包含指向数据文件中正确位置的删除链接,则此操作将起作用并且可以恢复表。
然后开始修理你的桌子。
如果没有,请执行以下过程:在继续之前备份您的数据文件。
使用myisamchk-rtbl_name(-r表示“恢复模式”)。
这将从数据文件中删除无效或已删除的记录并重建索引文件。
如果前面的步骤失败,请使用myisamchk--safe-recovertbl_name。
安全恢复模式使用较旧的恢复方法来处理常规恢复模式不起作用但速度较慢的某些情况。
如果您在修复过程中遇到奇怪的错误(例如内存不足错误)或myisamchk崩溃,请转到步骤3。
步骤3:仅当索引文件的前16K块损坏或包含不正确的信息,或者索引文件损坏时,只有文件丢失时才应执行此步骤。
在这种情况下,您将需要创建一个新的索引文件。
请按照以下步骤操作:将您的数据文件移至安全位置。
使用表描述文件创建新的(空)数据文件和索引文件。
shell>mysqldb_namemysql>SETAUTOCOMMIT=1;mysql>TRUNCATETABLEtbl_name;mysql>quit如果您的MySQL版本没有TRUNCATETABLE,请使用DELETEFROMtbl_name。
将旧数据文件复制到新创建的数据文件中。
(不要只是将旧文件移回新文件。
您需要保留一份副本,以防出现问题。
)返回步骤2。
现在myisamchk-r-q应该可以工作了。
(它不应该是无限循环。
)您还可以使用REEPAIRTABLEtbl_nameUSE_FRM,它会自动执行整个程序。
步骤4:恢复非常困难仅当.frm描述文件也损坏时才应执行此步骤。
这种情况不应该发生,因为创建表后描述文件不会更改。
从备份中恢复您的个人资料并返回到步骤3。
您还可以恢复索引文件并返回到步骤2。
在后一种情况下,必须以myisamchk-r启动。
如果您没有备份,但确切地知道该表是如何创建的,请在另一个数据库中创建该表的副本。
删除新的数据文件并将描述文件和索引文件从另一个数据库移动到损坏的数据库。
这提供了新的描述和索引文件,但保持.MYD数据文件不变。
返回步骤2并尝试重建索引文件。
热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...