Windows下根据.frm和ibdata1恢复mysql数据库
使用 Windows cmd 进行数据库备份和还原教程

使用 Windows cmd 进行数据库备份和还原教程在日常的工作中,数据库备份和还原是非常重要的任务之一。
无论是为了防止数据丢失,还是为了应对意外情况,学会使用 Windows cmd 进行数据库备份和还原是一项必备的技能。
本文将为您详细介绍如何使用 Windows cmd 进行数据库备份和还原。
1. 准备工作在开始之前,您需要确保已经安装了数据库管理系统,并且已经设置了正确的环境变量。
本文以 MySQL 数据库为例进行演示,但是大部分数据库管理系统的备份和还原命令都类似。
2. 数据库备份首先,打开命令提示符窗口(cmd)。
然后,进入到 MySQL 的安装目录下的bin 文件夹。
在命令提示符窗口中,输入以下命令来进行数据库备份:```mysqldump -u 用户名 -p 密码数据库名 > 备份文件名.sql```其中,用户名是您的数据库登录用户名,密码是您的数据库登录密码,数据库名是您要备份的数据库名称,备份文件名是您要保存备份文件的名称和路径。
例如,如果您的用户名是 "root",密码是 "123456",要备份的数据库名是"mydatabase",备份文件名是 "backup.sql",则命令如下:```mysqldump -u root -p 123456 mydatabase > C:\backup.sql```执行完毕后,您将在指定的路径下找到备份文件。
3. 数据库还原如果您需要还原数据库,首先需要创建一个空的数据库。
在命令提示符窗口中,输入以下命令来创建数据库:```mysqladmin -u 用户名 -p 密码 create 数据库名```然后,使用以下命令来还原数据库:```mysql -u 用户名 -p 密码数据库名 < 备份文件名.sql```其中,用户名是您的数据库登录用户名,密码是您的数据库登录密码,数据库名是您要还原的数据库名称,备份文件名是您要还原的备份文件的名称和路径。
MySQL数据库备份和恢复教程

MySQL数据库备份和恢复教程引言MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种Web应用程序和服务器端开发中。
作为一种数据库管理系统,备份和恢复是非常重要的环节。
本文将为您讲解MySQL数据库备份和恢复的方法和步骤,以帮助您保护和恢复数据库中的重要数据。
一、MySQL数据库备份方法1. 手动备份手动备份是最简单的备份方法之一。
您只需要登录到MySQL服务器,使用命令行或者图形界面工具,执行相应的备份命令即可。
以下是手动备份的步骤:步骤一:登录到MySQL服务器您可以使用命令行工具,如MySQL命令行客户端或者PuTTY等,输入相应的主机名、用户名和密码。
例如:```mysql -h localhost -u root -p```步骤二:选择要备份的数据库使用以下命令选择要备份的数据库:```use database_name;```步骤三:执行备份命令使用以下命令执行备份:```mysqldump -h localhost -u root -p database_name > backup_file.sql```这将把数据库的数据和结构导出到一个名为backup_file.sql的文件中。
2. 自动备份手动备份虽然简单,但是可能会忘记执行备份操作,因此自动备份是更为常见的备份方式。
以下是几种自动备份的常见方法:a. Shell脚本您可以编写一个Shell脚本来定期执行备份操作。
脚本可以使用crontab等工具来设置定时任务,例如每天凌晨执行一次备份操作。
以下是一个使用Shell脚本的备份示例:```#!/bin/bashmysqldump -h localhost -u root -p database_name > /path/to/backup_file.sql```您可以将这个脚本保存为backup.sh,并通过crontab设置每天凌晨执行:```0 0 * * * /bin/bash /path/to/backup.sh```b. MySQL事件MySQL还提供了事件功能,可以定时执行一些SQL语句,包括备份命令。
如何恢复MYSQL数据库中误删除的数据

如何恢复MYSQL数据库中误删除的数据MySQL数据库中误删除了数据时,可以通过以下几种方式来进行数据恢复:1.从备份中恢复数据:如果在删除数据之前定期进行了数据库备份,可以通过恢复备份文件来恢复误删除的数据。
恢复备份文件的过程包括将备份文件拷贝到MySQL的数据目录,停止MySQL服务,将备份文件解压缩并替换掉现有的数据文件,然后重新启动MySQL服务。
2. 使用二进制日志(binary log)进行恢复:MySQL中的二进制日志记录了对数据库的所有更改操作,包括删除数据。
可以通过分析二进制日志来找到并恢复误删除的数据。
首先需要确保MySQL的binlog_format参数设置为ROW,以便记录详细的更改信息。
然后可以使用mysqlbinlog工具来解析二进制日志文件,并查找误删除的数据的相关操作。
找到后可以将相应的SQL语句复制到MySQL客户端中执行,即可恢复误删除的数据。
3. 使用第三方工具进行数据恢复:有一些第三方工具可以帮助恢复误删除的MySQL数据。
这些工具可以通过扫描数据库文件或者日志文件来还原被删除的数据。
一些流行的工具包括UndeleteMyFiles、MySQL-FR、DataNumen、ApexSQL Log等。
这些工具通常提供了直观的用户界面,可以通过简单的操作来恢复数据。
4. 手动恢复数据:如果以上方法都无法恢复误删除的数据,还可以尝试手动恢复。
首先需要停止MySQL服务,然后备份数据库文件以防止意外操作导致数据进一步丢失。
接下来可以使用文件系统级别的操作来恢复被误删除的数据文件。
可以使用一些低级别的工具如foremost、extundelete、TestDisk等来扫描磁盘并尝试恢复误删除的数据文件。
恢复完成后,需要将恢复的数据文件放回到MySQL的数据目录中,并重新启动MySQL服务。
5.寻求专业数据恢复服务:如果以上方法都无法恢复误删除的数据,可以考虑寻求专业的数据恢复服务。
MySQL数据库备份与恢复方法介绍

MySQL数据库备份与恢复方法介绍导言数据库是现代应用系统不可或缺的核心组件之一,而备份与恢复是数据库管理的重要任务之一。
MySQL作为一种常用的关系型数据库管理系统,具有稳定性和可靠性而备受广大开发人员的喜爱。
在本文中,我们将介绍MySQL数据库备份与恢复的一些常用方法,帮助读者了解如何有效地保护和恢复MySQL数据库。
一、物理备份与恢复1.1 数据库备份物理备份是通过复制数据库文件和目录来实现的。
在备份数据库之前,我们需要停止数据库服务,以确保备份文件的一致性。
下面是备份数据库的一般步骤:1) 停止MySQL服务:在Linux系统中,使用`systemctl stop mysql`命令停止MySQL服务;在Windows系统中,通过服务管理器停止MySQL服务。
2) 复制数据库文件和目录:复制MySQL数据目录(默认是/var/lib/mysql或C:\Program Files\MySQL\MySQL Server\data)及其子目录到备份位置。
3) 启动MySQL服务:在完成备份后,根据需要启动MySQL服务。
1.2 数据库恢复在发生数据灾难或数据库丢失时,我们需要使用备份文件进行数据库恢复。
下面是数据库恢复的一般步骤:1) 停止MySQL服务:同样,我们需要停止MySQL服务,以确保恢复的一致性。
2) 清空数据目录:在恢复之前,我们需要确保数据目录是空的。
这可以通过删除现有的数据目录或将其重命名来实现。
3) 恢复数据库备份:将备份文件中的数据目录及其子目录复制到MySQL数据目录下。
4) 启动MySQL服务:在完成数据库恢复后,启动MySQL服务以恢复正常的数据库操作。
二、逻辑备份与恢复2.1 数据库备份逻辑备份是将数据库数据导出为文本格式的SQL语句,并通过执行这些语句来恢复数据库。
下面是逻辑备份数据库的一般步骤:1) 登录到MySQL服务器:使用MySQL客户端工具(如mysql命令行或phpMyAdmin)登录到MySQL服务器。
利用frm 和 idb文件批量还原数据

利用frm 和idb文件批量还原数据最近碰到一个问题,一个平时不怎么用数据库在一次搬机器过程中弄挂了,然后在重启过程中不小心把ibdata给弄坏了。
于是无奈只能通过frm和idb文件来做数据恢复。
因为是整个库的数据有问题,因此在这过程中写了一些脚本来帮助恢复。
下面是这次操作的过程:首先说明,本方案只适用于innodb_file_per_table = 1 这种情况下的做数据恢复。
下面是用来说明恢复案例的环境:原数据库数据文件的位置: /data/dbdata库名称: user新库的用户名、密码:root/111111新库的数据文件位置:/data/newdata1、首先做好frm和idb文件的备份,并准备一个全新的MySQL环境,至于为什么要全新的,稍后就会明白。
2、通过frm文件导出表结构如果你本身就有创建数据的schema的sql脚本,这一步可以略过。
a、首先创建user库;> create database user;b、接下来需要在user库创建原库的frm对应的表,这一步可通过create_init_table.sh【https:///iamxhu/devops_tools/blob/master/mysql/recovery/create_init_sql.sh】生成创建表的脚本。
具体使用方法参加文件中的说明。
$ ./create_init_table.sh /data/dbdata/user root 111111 user运行上面的脚本后,会生成三个文件:create_tmp_table.sql,discard_tablespace.sh,import_tablespace.sh。
在这一步只需要将create_tmp_table.sql导入到mysql中。
> mysql -uroot -p user < create_tmp_table.sql这样表就都创建好了。
.frm文件怎么导入到数据库

.frm⽂件怎么导⼊到数据库如题想搞个私服游戏,但是数据库⽂件按⽂档的操作⽅法⾏不通。
只能⾃⾏导⼊。
其实.frm⽂件就是mysql表结构⽂件,你拷贝data那⼀块的⽂件到你电脑安装的mysql的data⽂件下就⾏了。
⼀、⾸先查找你mysql安装的位置select @@basedir as basePath from dual当然mysql5.7不在这个路径下,在安装盘符找ProgramData这个⽂件我的实际数据就是这个地址 C:\ProgramData\MySQL\MySQL Server 5.7\Data⼆、拷贝数据可以看到data⽂件夹⾥⾯,⼀个⽂件对应⼀个数据库,其他都是⽇志等配置⽂件。
把你的数据⽂件放进去即可。
但是结果很遗憾,导⼊的表数据是空的,且查询错误。
原因是版本不同,我装的5.7⽽原⽂件是5.5三、替换⽂件上⾯刷新数据库没有数据,是因为少了ib_logfile0,ib_logfile1,ibdata1这⼏个⽂件。
①:把原来数据库的ib_logfile0,ib_logfile1,ibdata1这⼏个⽂件备份到⼀个⽂件夹。
②:关闭mysql服务,把当前数据下的这⼏个⽂件删掉,⽤要拷贝的数据这三个⽂件替换。
③:打开mysql服务,登录刷新,发现有数据了。
把这些数据以.sql⽂件导出,这样数据就拿到了。
四、还原同上,关闭mysql服务,把原来的ib_logfile0,ib_logfile1,ibdata1这⼏个⽂件还原回去,再启动mysql服务。
此时你原来导⼊的那⼏个表有没数据了,删掉库名,重新导⼊你的.sql⽂件就好了。
因此想要别⼈的数据,直接拷贝这个⽂件就⾏了。
当然犯罪的事情不能⼲啊!。
如何将frm文件导入MySql数据库

如何将frm⽂件导⼊MySql数据库
只要在mysql的安装⽂件中找到data⽂件夹,然后在⾥⾯建⽴⼀个⽂件夹,⽐如test。
这个test其实就对应着数据库的名称,所以,你想要起什么样的数据库名称就把⽂件夹起什么名字。
然后把.frm⽂件导进去。
注意还要在data⽬录下加⼊ib_logfile0,ib_logfile1,ibdata1这⼏个⽂件。
要不然在mysql⾥只能找到表名(其实⼀个.frm⽂件就是对应的数据库中的⼀个表。
)
⽽不能对其进⾏操作。
说明:
⽐如你原来的mysql中有⼀些数据库了。
可以先把原来的data改名字备份在同⼀⽬录下。
(可能要改名字系统会提⽰有另⼀程序在使⽤这个⽂件,这个时候可以到控制⾯板的服务⾥⾯,把mysql的服务先关掉,等改完名字,把东西都导进去后再开服务)
然后另建⼀个data,把在⾥⾯建好数据库名把.frm导进去。
================================================================================
2007年9⽉23⽇再整理:
停⽌服务可以通过管理⼯具⾥⾯的服务来停,或者⽤cmd 打开dos界⾯输⼊net stop mysql,启动⽤net start mysql;
只要⽤旧的ibdata1覆盖原来的,再把相关的数据库copy过去,然后重新启动数据库,
就ok了,进⼊以后要是对表不能操作可能是数据表已经损坏了.
(如果不⾏报1146错,建议重启⼀下机器在看看)
ib_logfile0,ib_logfile1好象也可以不⽤覆盖,不然有时候mysql数据库启动不了了,报1067错误。
恢复数据库_把后缀.frm,.myd,myi转换为.sql导入mysql数据库

恢复数据库_把后缀.frm,.myd,myi转换为.sql导入mysql数据库恢复数据库—把.frm,.myd,myi转换为.sql导入数据库以前的blog服务器瘫痪后终于从客服那里拿回了数据,但是空间商给备份的数据库是一堆.frm,.myd,.myi文件,而现在恢复数据库要求导入.sql文件,我对数据库一窍不通,这可咋整。
没办法,又得求助Google,倒腾…磨叽…倒腾……终于给解决了。
先说说这几种文件是干什么的,*.frm是描述了表的结构,*.myd 保存了表的数据记录,*.myi则是表的索引。
现在将.frm,.myd,myi转换为.sql有两种方法:1、把这些乱七八糟的文件一并复制到你的数据库的data下的数据库文件夹,直接就可以使用,无需转换为sql格式。
前提是mysql 的版本一致,字体一致。
此方法简单快捷但不是没个人都能做到。
其实根本就无法做到,除非你是在本地测试或者你是个人独霸一台服务器。
像我这种用虚拟主机的,空间商一般是不会把数据库目录都给你让你去瞎折腾的,所以此方法基本无用,弃之。
2、在本地安装MySQL数据库,将.frm,.myd,myi转换为.sql,再导入即可。
这种方法当然会麻烦一些了,首先得会安装MySQL才行。
反正我不大会装,设置也不懂,干脆把安装MySQL的方法也贴在这儿吧,图我就不贴了,只贴文字和每一步要选择的选项,安装的MySQL 为当前最新版本5.1.44。
安装MySQL:MySQL请自行下载,大概一百零几兆,下载后双击打开,出来欢迎安装界面,点Next,出来安装选项,有三种:Typical、Complete、Custom,默认是Typical,建议改成Custom,因为Typical模式不允许改变安装路径,只能安装在C盘(我介绍的就是Custom的安装方法)。
点Next,到这一步需要选择要安装的组件和安装路径,组件就用默认的,安装路径自己选择,在根目录下最好,因为后面要用到Dos 命令,这样方便。
MYSQL 数据库ibdata1、MYI、MYD损坏解决方案

MYSQL 数据库ibdata1、MYI、MYD损坏解决方案
【故障类型】
ibdata1、MYI、MYD损坏
【典型特征】
◎数据库无法进行查询等操作;
◎使用mysqlcheck和myisamchk无法修复数据库。
◆检测流程
a. 对损坏的数据库进行备份,防止进一步破坏;
b. 手工对MYD和MYI文件进行内部结构检测;
c. 使用自主开发的程序对ibdata1文件进行检测。
◆恢复流程
a. 将损坏的数据库文件进行手工备份拷贝,以防止二次破坏;
b. 通过自主开发的程序对数据库进行完整检测;
c. 修复损坏的索引或数据文件;
d. 使用自主开发的程序对数据进行提取。
e. 生成数据库;
◆验收流程
a. 挂载数据库,启动服务;
b. 对数据库做mysqlcheck检测;
c. 对重要表进行数据查询,检验数据的更新日期。
◎发现数据库损坏后,请及时对数据库备份,不要在没有备份的情况下对数据进行任何修复操作。
◎故障出现的可能原因:
◆数据库正在操作过程中,机器突然断电
◆人为误操作或其它原因
◎文件保护措施:
◆做好数据库备份工作。
mysql利用frm和idb文件恢复数据库

mysql利⽤frm和idb⽂件恢复数据库⼀、将data⽬录下的对应的数据库⽬录复制备份到另外⼀个地⽅[root@orderer /]# mkdir /home/data_bak[root@orderer /]# cp -r /home/mysql-5.7.26/data/hl_central_sms_deduction/ /home/data_bak/[root@orderer /]#⼆、连接MYSQL,删除原来的数据库,新建⼀个跟同名的数据库mysql> create database hl_central_sms_deduction DEFAULT CHARSET utf8;Query OK, 1 row affected (0.01 sec)三、利⽤MySQL Utilitie⼯具提供的mysqlfrm命令,导出数据库表结构SQL⽂件安装MySQL Utilitie⼯具,参考https:///sky-cheng/p/12218112.html[root@orderer hl_central_sms_deduction]# mysqlfrm --diagnostic sms_deduction_log_20191201.frm# WARNING: Cannot generate character set or collation names without the --server option.# CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and t # Reading .frm file for sms_deduction_log_20191201.frm:# The .frm file is a TABLE.# CREATE TABLE Statement:CREATE TABLE `sms_deduction_log_20191201` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`phone` varchar(60) DEFAULT NULL,`epid` varchar(60) DEFAULT NULL,`message` varchar(3000) DEFAULT NULL,`subcode` varchar(60) DEFAULT NULL,`channel_id` varchar(150) DEFAULT NULL,`push_url` varchar(3000) DEFAULT NULL,`db_ip` varchar(150) DEFAULT NULL,`db_name` varchar(150) DEFAULT NULL,`created` timestamp DEFAULT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`sms_len` int(11) DEFAULT NULL,`stype` char(4) CHARACTER SET <UNKNOWN> NOT NULL,`dtype` varchar(80) CHARACTER SET <UNKNOWN> NOT NULL,`msg_template` varchar(3000) DEFAULT NULL,`province` varchar(150) DEFAULT NULL,`qxt_fast_num` int(1) DEFAULT NULL,`link_id` varchar(150) DEFAULT NULL,`report_code` varchar(150) DEFAULT NULL,PRIMARY KEY `PRIMARY` (`id`),KEY `pk_sms_deduction_log_20191201_phone` (`phone`,`epid`,`created`) USING BTREE) ENGINE=InnoDB;#...done.将SQL语句粘贴到客户端执⾏,报错`stype` char(4) CHARACTER SET <UNKNOWN> NOT NULL,`dtype` varchar(80) CHARACTER SET <UNKNOWN> NOT NULL,将这两句修改为`stype` char(4) NOT NULL,`dtype` varchar(80) NOT NULL,再执⾏上⾯的建表语句,成功。
MySQL单表ibd文件恢复方法详解

MySQL单表ibd⽂件恢复⽅法详解随着innodb的普及,innobackup也成为了主流备份⽅式。
物理备份对于新建slave,全库恢复的需求都能从容应对。
但当⾯临单表数据误删,或者单表误drop的情况,如果使⽤物理全备进⾏恢复呢?下⽂将进⾏详细分析。
恢复过程中需要⽤到的⼯具,percona data recover tool : https:///percona-innodb-recovery-tool来⾃同⼀台机器的ibd恢复覆盖,且备份后table没有被recreate过。
这种情况是最简单的,备份时的ibd⽂件(后称⽼ibd)中的space id和index id 与新ibd的space id 和index id⼀致。
且和ibdata⽂件中的space id和index id⼀致。
因此,物理⽂件可以直接覆盖做恢复。
Step -1 : 物理备份innobackupex --defaults-file=/usr/local/mysql3321/f --socket=/xfs/mysql3321/mysql.sock --user=root --password=password /xfs/backup/Step 0 : apply loginnobackupex --apply-log --defaults-file=/usr/local/mysql3321/f /xfs/backup/2012-10-17_11-29-20/Step 1 : 备份现在的ibd⽂件(可选)cp -a testibd.ibd testibd.bakStep 2 : 舍弃现在ibd⽂件mysql> alter table testibd discard tablespaceStep 3 : 复制备份ibd⽂件shell> cp /xfs/backup/2012-10-17_11-29-20/test/testibd.ibd /xfs/mysql3321/test/shell> chown mysql:mysql /xfs/mysql3321/test/testibd.ibdStep 4 : 导⼊ibd⽂件mysql> alter table testibd import tablespace这种情况稍复杂,不过恢复过程还是⽐较容易操作的。
通过.frm和.ibd恢复mysql数据

通过.frm和.ibd恢复mysql数据.frm⽂件:保存了每个表的元数据,包括表结构的定义等;.ibd⽂件:InnoDB引擎开启了独⽴表空间(my.ini中配置innodb_file_per_table = 1)产⽣的存放该表的数据和索引的⽂件。
1、安装相同版本的mysql;找回表结构2、找回表结构(若有表结构,直接导⼊表即可)建⽴同名的表(InnoDB),不知道列数的话随意⼀个字段即可(如果字段个数不⼀致会报错,去⽇志⽂件中查看有列数重复这些步骤)关闭mysql服务⽤需要恢复的.frm⽂件覆盖新⽣成的.frm⽂件。
修改my.ini配置innodb_force_recovery = 6进⼊恢复模式(只读)。
启动mysql服务。
desc tble_name或者show create table tbl_name获取创建表结构语句。
(直接查看表设计字段会导致数据库异常)复制建表sql,删除表(不能直接删.frm和.ibd会导致新建时报已存在,如果直接删除⽂件,需要将frm⽂件拷贝回来,再drop表),执⾏sql创建表结构。
(这个步骤要把innodb_force_recovery = 6注解掉或者回复为0,不然提⽰只读)。
这⾥会出现启动后没有表结构,这是需要查看mysql的⽇志⽂件找到⽇志⽂件位置:show variables like'%error%'这⾥的.是相对于mysql的,windows可以根据快捷⽅式找到mysql位置然后再找.err错误⽂件找到报错信息为2018-12-18T08:52:30.314230Z 2 [Warning] InnoDB: Table bookkeeping/concategory contains 1 user defined columns inInnoDB, but 3 columns in MySQL.意思是新建的有1列,但是复制过来的frm⽂件中含有3列。
Windows下根据.frm和ibdata1恢复mysql数据库

Windows下根据.frm和ibdata1恢复InnoDB类型MySQL数据库MySQL的数据库文件直接复制便可以使用,但是那是指“MyISAM”类型的表。
而使用MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的一个表在磁盘上只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。
MyISAM类型的表直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表却不行。
解决方法就是:1.安装完成新服务器之后,通过命令行新建了与原来一样的数据库:数据库名称、用户名、密码都一样。
如果有多个数据库需要恢复,就都给建好。
跟配置新服务器一样。
2.停止mysql服务net stop mysql3.将原来数据库原始数据库文件中的所有.frm文件和ibdata1文件复制到新服务器的数据库文件目录中(保持原来的目录结构)。
4.在MySQL安装目录中找到my.ini配置文件,在里面添加节innodb_force_recovery=6(可选4,5,6详见选项说明)5.重新启动mysql服务net start mysql如果不能成功的话,查看data文件夹中有个“*.err”错误日志文件,其中会对启动失败的原因有所描述的。
比如我碰到过两种错误原因。
一种是类似这样的错误信息:INIFile codeInnoDB: Error: log file .\ib_logfile0 is of different size 0 10485760 bytes InnoDB: than specified in the .cnf file 0 25165824 bytes!这是因为在mysql配置文件中配置的日志文件大小与实际的不相符。
解决方法是直接删掉旧的“ib_logfile0”等日志文件,重启MySQL后会自动生成新的日志文件的。
另一中则是这样的错误信息INIFile codeInnoDB: Operating system error number 5 in a file operation. InnoDB: The error means mysqld does not have the access rights to InnoDB: the directory. It may also be you have created a subdirectory InnoDB: of the same name as a data file. InnoDB: File name .\ibdata1 InnoDB: File operation call: ‘open’. InnoDB: Cannot continue operation.经检查原来是“ibdata1”文件在复制的过程中不知怎的被加上只读属性了。
mysql数据库备份恢复的过程和方法

mysql数据库备份恢复的过程和方法MySQL数据库备份恢复的过程和方法一、引言在使用MySQL数据库时,数据库备份是非常重要的一项工作。
数据库备份可以保证数据的安全性,一旦数据库发生故障或数据丢失,可以通过备份文件进行恢复。
本文将介绍MySQL数据库备份恢复的过程和方法。
二、数据库备份的意义数据库备份是指将数据库中的数据和结构以某种方式进行复制,并存储在一个外部位置。
数据库备份的意义在于:1. 数据安全性:备份可以保证数据的安全性,防止因为意外故障或人为操作失误导致数据丢失。
2. 数据恢复:备份文件可以用于恢复数据库中的数据,将数据库恢复到备份时的状态。
3. 数据迁移:备份文件可以用于将数据库从一个服务器迁移到另一个服务器。
三、数据库备份方法MySQL数据库备份可以使用多种方法,下面介绍几种常用的备份方法。
1. 使用mysqldump命令备份mysqldump是MySQL提供的备份工具,可以将整个数据库或者单个表导出为SQL文件。
使用mysqldump命令备份数据库的步骤如下:1) 打开命令行终端。
2) 输入以下命令进行备份:```mysqldump -u username -p password database > backup.sql ```其中,username为数据库用户名,password为数据库密码,database为要备份的数据库名,backup.sql为备份文件名。
3) 等待备份完成,备份文件将保存在当前目录下。
2. 使用MySQL Workbench备份MySQL Workbench是MySQL提供的一款图形化管理工具,其中包含了数据库备份功能。
使用MySQL Workbench备份数据库的步骤如下:1) 打开MySQL Workbench软件。
2) 连接到需要备份的数据库。
3) 在左侧导航栏中选择“Server”选项,然后选择“Data Export”。
4) 在弹出的窗口中选择要备份的数据库和表,设置备份文件的保存路径和文件名,点击“Start Export”开始备份。
服务器崩溃后,Mysql数据恢复过程记录

Mysql恢复过程记录测试服务器系统崩溃,但是上面也有很多重要的数据没有备份。
还好硬盘没有损毁,通过优盘引导可以把数据库data目录拷贝出来。
下面就以此为基础进行数据恢复。
一、基础工具1.1.MySQL Recovery Tool Free(1)下载MySQL Recovery Tool Free(2)运行选择数据所在的目录,软件会自动读取其下的frm文件,并生成简单的建表语句。
这里的语句没有注释等信息,不用在意,下一步可以通过操作恢复出来。
(3)这里可能会提示Unknown storage type,不用太在意,点击OK即可1.2.查找本机mysql数据所在目录登录mysql环境后,执行show variables like '%datadir%';1.3.Mysql服务启停(1)点击windows菜单(2)搜索服务两个字(3)找到mysql(点击列表区域,在键盘英文模式下敲击m,可以快速定位到)(4)在对应服务上右键单击,可看到停止、重新启动等操作二、初步还原结构1、先建一个数据库,可以看到mysql的data目录下多了一个同名目录frm文件和ibd文件3、修改my.ini文件,在末尾加上配置innodb_force_recovery = 65、重启mysql服务,查看表结构信息。
到这一步可以看到原来表的注释都已经可以查到到这里已经能够查看表信息,但是想要对表进行其它操作则不行,如果删除会提示表不存在,如果修改会提示表只读。
因此进入下一个环节三、恢复表结构1、复制出来还原的表结构的建表语句(可以使用Navicat快速生成或导出建表语句),每个建表语句末尾加上ROW_FORMAT=COMPACT如果已经有了ROW_FORMAT = Dynamic 那就把Dynamic替换为COMPACT2、注释或删除my.ini中的innodb_force_recovery = 6最好是注释,方便调整。
完美解决mysql启动后随即关闭的问题(ibdata1文件损坏导致)

完美解决mysql启动后随即关闭的问题(ibdata1⽂件损坏导致)机房⼀台服务器上的mysql运⾏⼀段时间了,突然出现了⼀个很奇怪的现象:重启后⽆法恢复了!准确情况是:启动mysql后随即就⼜关闭了。
查看mysql错误⽇志如下:分析⽇志后发现,数据库⽆法重启的原因是因为ibdata1⽂件损坏,重启后⽆法正常恢复。
解决办法:需要跳过恢复步骤,修改f⽂件,在f中的[mysqld]中添加:innodb_force_recovery = 6innodb_purge_threads = 1解释:innodb_force_recovery可以设置为1-6,⼤的数字包含前⾯所有数字的影响。
具体数字对应的含义:1-----(SRVFORCEIGNORECORRUPT):忽略检查到的corrupt页。
2-----(SRVFORCENOBACKGROUND):阻⽌主线程的运⾏,如主线程需要执⾏full purge操作,会导致crash。
3-----(SRVFORCENOTRXUNDO):不执⾏事务回滚操作。
4-----(SRVFORCENOIBUFMERGE):不执⾏插⼊缓冲的合并操作。
5-----(SRVFORCENOUNDOLOGSCAN):不查看重做⽇志,InnoDB存储引擎会将未提交的事务视为已提交。
6-----(SRVFORCENOLOG_REDO):不执⾏前滚的操作。
再次启动mysql就ok了~如果还⽆法启动,则需要删除数据⽬录datafile下的 ibdata1,ib_logfile*等⽂件。
启动后导出MySQL数据库,重新恢复即可。
以上这篇完美解决mysql启动后随即关闭的问题(ibdata1⽂件损坏导致)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
MySQL利用frm文件和ibd文件恢复表数据

MySQL利⽤frm⽂件和ibd⽂件恢复表数据⽬录frm⽂件和ibd⽂件简介frm⽂件恢复表结构ibd⽂件恢复表数据简单总结⼀下frm⽂件和ibd⽂件简介在MySQL中,如果我们使⽤了默认的存储引擎innodb创建⼀张表,那么在⽂件夹下⾯就会出现表名.frm和表名.ibd两个⽂件,如果我们使⽤的是Myisam存储引擎,那么就会出现三个⽂件,这⾥我们给出例⼦:[root@ /data/yeyz]#lltotal 580-rw-rw---- 1 mysql mysql 8586 Apr 3 17:44 a.frm-rw-rw---- 1 mysql mysql 0 Apr 3 17:44 a.MYD-rw-rw---- 1 mysql mysql 1024 Apr 3 17:44 a.MYI-rw-rw---- 1 mysql mysql 8586 Apr 3 17:44 b.frm-rw-rw---- 1 mysql mysql 98304 Apr 3 17:45 b.ibd-rw-rw---- 1 mysql mysql 61 Nov 23 09:54 db.opt-rw-rw---- 1 mysql mysql 8556 Apr 29 21:37 tbl_test_2.frm-rw-rw---- 1 mysql mysql 98304 Apr 29 21:37 tbl_test_2.ibd-rw-rw---- 1 mysql mysql 8556 Apr 29 21:33 tbl_test.frm-rw-rw---- 1 mysql mysql 98304 Apr 29 21:33 tbl_test.ibd-rw-rw---- 1 mysql mysql 8614 Apr 29 21:40 test.frm-rw-rw---- 1 mysql mysql 98304 Apr 29 21:43 test.ibd-rw-rw---- 1 mysql mysql 8666 Apr 2 15:13 unstandard_ins.frm-rw-rw---- 1 mysql mysql 98304 Apr 3 11:46 unstandard_ins.ibd-rw-rw---- 1 mysql mysql 8586 Apr 3 17:44 yeyz.frm-rw-rw---- 1 mysql mysql 28 Apr 3 17:44 yeyz.MYD-rw-rw---- 1 mysql mysql 2048 Apr 3 17:44 yeyz.MYI其中ibd⽂件是innodb的表数据⽂件,⽽frm⽂件是innodb的表结构⽂件,mysiam存储引擎的表中,frm是表结构,MYI⽂件是索引⽂件,⽽MYD⽂件是数据⽂件,从这⾥也可以看出,innodb存储引擎的索引和数据是在⼀起的,⽽Myisam存储引擎索引和数据是分开的。
使用 ibdata 和 frm 文件恢复 MySQL 数据库

一.使用ibdata 和frm 文件恢复MySQL 数据库因为磁盘空间不足,我的一个虚拟机服务器崩溃了。
结果数据库服务器进程无法启动,数据也就无法导出。
只能想办法从数据库原始文件ibdata 和frm 文件中恢复数据库。
因为没有经验,好不容易才找到了恢复方法。
特此记录,以备后用。
磁盘空间不足之后,mysqld 进程无法启动,提示“Can't connect tolocal MySQL server through socket '/var/lib/mysql/mysql.sock' (2)”。
这真是让人无比头大,数据库根本连接不上。
1. 保存原始数据库文件好在数据库原始文件还在。
在我的系统环境和配置情况下,这些文件位于/var/lib/mysql/文件夹下面。
假设数据库名是test,则这些文件表现为:--mysql|--test|--1.frm|--2.frm|...|--mysql|...|--ib_logfile0|--ib_logfile1|--ibdata1|...这些就是原始数据库文件,可以用来恢复数据库。
将这些文件额外保存一份,以防万一。
2. 恢复方法我的原始虚拟机完全没有磁盘空间而无法启动数据库服务器进程。
虽然试着删除一些不需要的文件,但是数据库却始终无法连接。
于是我新建了一个几乎一样的虚拟机(当然磁盘加大了),试图将这些数据库文件导入并恢复数据库。
在经历了很多错误之后,终于找到了正确的方法:1.安装完成新服务器之后,通过命令行新建了与原来一样的数据库:数据库名称、用户名、密码都一样。
如果有多个数据库需要恢复,就都给建好。
(跟配置新服务器一样,参见安装和配置MYSQL 数据库服务器。
)2.停止mysqld 进程service mysqldstop3.将备份的原始数据库文件中的所有.frm文件(保持原来的目录结构)和ibdata1文件复制到新服务器的数据库文件目录中(如果新服务器操作系统和配置环境一样,那么目录结构也一样),其它文件不要。
如何恢复Mysql数据库

如何恢复Mysql数据库这⾥说的MySql恢复数据库,是指没有通过正常备份的情况下,通过Mysql保存的数据⽂件如何恢复数据库。
由于在⼀台测试机器上打算重新安装Mysql数据库,由于简单粗暴的直接卸载了,没有备份公司Discuz和Redmine使⽤的Mysql数据库,过程可想的悲惨。
还好的是只是卸载掉了Mysql的程序,所有的数据⽂件还是存在的。
下⾯是在恢复数据库的过程1. Discuz数据库Discuz数据库的恢复⾮常顺利,在安装好新版本的Mysql后,直接将原来的数据库⽂件copy到新的数据⽬录中,重新启动mysql, 就能看到恢复的数据库了2. Redmine数据库本打算直接使⽤上⾯的经验,也能看到所有的表,但是就是执⾏查询的时候,总是报错"表不存在".后来查了⼀些资料,发现,原因应该是Discuz和Redmine使⽤的Mysql引擎不⼀样导致的。
Discuz使⽤的是MyISAM, ⽽Redmine使⽤的是InnoDB.解决的办法是,除了要copy数据⽬录外,还要记得覆盖ibdata1⽂件。
以表”Table”为例: 如类型是MyISAM, 数据⽂件则以”Table.frm””Table.MYD””Table.MYI””三个⽂件存储于”/data/databasename/”⽬录中.如类型是InnoDB,数据⽂件则存储在”innodb_data_home_dir/″中的ibdata1⽂件中(⼀般情况),结构⽂件存在于table_name.frm中. MySQL的数据库⽂件直接复制便可以使⽤,但是那是指“MyISAM”类型的表。
⽽使⽤MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的⼀个表在磁盘上只对应⼀个“*.frm”⽂件,不像MyISAM那样还“*.MYD,*.MYI”⽂件。
MyISAM类型的表直接拷到另⼀个数据库就可以直接使⽤,但是InnoDB类型的表却不⾏。
MySQL数据库下.frm.MYD.MYI损坏恢复操作

将数据库内容物理文件直接导入到mysql\data下,每只表各3个文件,依次分别为:.frm .MYD .MYI,data下的文件夹名就是数据库名首先我第一想到的是去网上搜索,寻找类似的工具,试图通过工具来恢复已损坏的文件,于是我在GOOGLE上查找,找到一款名为MySQLRecovery 的工具,安装后我用其进行恢复,只可惜效果太不理想,几十M大的数据文件,恢复之后它提示我竟然只有几十K,令我吐血...MySQL数据目录不是太难理解的。
每一个数据库对应一个子目录,每个子目录中包含了对应于这个数据库中的数据表的文件。
每一个数据表对应三个文件,它们和表名相同,但是具有不同的扩展名。
tblName.frm文件是表的定义,它保存了表中包含的数据列的内容和类型。
tblName.MYD文件包含了表中的数据。
tblName.MYI文件包含了表的索引(例如,它可能包含lookup表以帮助提高对表的主键列的查询)。
要检查一个表的错误,只需要运行myisamchk(在MySQL的bin目录下)并提供文件的位置和表名,或者是表的索引文件名:pma.co% myisamchk /usr/local/mysql/var/dbName/tblName% myisamchk /usr/local/mysql/var/dbName/tblName.MYI上面的两个命令都可以执行对指定表的检查。
要检查数据库中所有的表,可以使用通配符:% myisamchk /usr/local/mysql/var/dbName/*.MYI要检查所有数据库中的所有表,可以使用两个通配符:% myisamchk /usr/local/mysql/var/*/*.MYI如果不带任何选项,myisamchk将对表文件执行普通的检查。
如果你对一个表有怀疑,但是普通的检查不能发现任何错误,你可以执行更彻底的检查(但是也更慢!),这需要使用--extend-check选项:% myisamchk --extend-check /path/to/tblName对错误的检查是没有破坏性的,这意味着你不必担心执行对你的数据文件的检查会使已经存在的问题变得更糟。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows下根据.frm和ibdata1恢复InnoDB类型MySQL数据库
MySQL的数据库文件直接复制便可以使用,但是那是指“MyISAM”类型的表。
而使用MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的一个表在磁盘上只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。
MyISAM类型的表直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表
却不行。
解决方法就是:
1.安装完成新服务器之后,通过命令行新建了与原来一样的数据库:数据库名称、用户名、
密码都一样。
如果有多个数据库需要恢复,就都给建好。
跟配置新服务器一样。
2.停止mysql服务
net stop mysql
3.将原来数据库原始数据库文件中的所有.frm文件和ibdata1文件复制到新服务器的数据
库文件目录中(保持原来的目录结构)。
4.在MySQL安装目录中找到my.ini配置文件,在里面添加节
innodb_force_recovery=6(可选4,5,6详见选项说明)
5.重新启动mysql服务
net start mysql
如果不能成功的话,查看data文件夹中有个“*.err”错误日志文件,其中会对启动失败的原因有所描述的。
比如我碰到过两种错误原因。
一种是类似这样的错误信息:
INIFile code
InnoDB: Error: log file .\ib_logfile0 is of different size 0 10485760 bytes InnoDB: than specified in the .cnf file 0 25165824 bytes!
这是因为在mysql配置文件中配置的日志文件大小与实际的不相符。
解决方法是直接删掉旧的“ib_logfile0”等日志文件,重启MySQL后会自动生成新的日志文件的。
另一中则是这样的错误信息
INIFile code
InnoDB: Operating system error number 5 in a file operation. InnoDB: The error means mysqld does not have the access rights to InnoDB: the directory. It may also be you have created a subdirectory InnoDB: of the same name as a data file. InnoDB: File name .\ibdata1 InnoDB: File operation call: ‘open’. InnoDB: Cannot continue operation.
经检查原来是“ibdata1”文件在复制的过程中不知怎的被加上只读属性了。
解决方法是去掉“ibdata1”文件的只读属性便可。
innodb_force_recovery选项说明
•1 (SRV_FORCE_IGNORE_CORRUPT)
即使服务器检测到一个损坏的页,也让服务器运行着;试着让SELECT * FROM tbl_name 跳过损坏的索引记录和页,这样有助于转储表。
•2 (SRV_FORCE_NO_BACKGROUND)
阻止主线程运行,如果崩溃可能在净化操作过程中发生,这将阻止它。
•3 (SRV_FORCE_NO_TRX_UNDO)
恢复后不运行事务回滚。
•4 (SRV_FORCE_NO_IBUF_MERGE)
也阻止插入缓冲合并操作。
如果你可能会导致一个崩溃。
最好不要做这些操作,不要计算表统计表。
•5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
启动数据库之时不查看未完成日志:InnoDB把未完成的事务视为已提交的。
•6 (SRV_FORCE_NO_LOG_REDO)
不要在恢复连接中做日志前滚。
数据库不能另外地带着这些选项中被允许的选项来使用。
作为一个安全措施,当innodb_force_recovery被设置为大于0的值时,InnoDB阻止用户执行INSERT, UPDATE或DELETE操作.
即使强制恢复被使用,你也可以DROP或CREATE表。
如果你知道一个给定的表正在导致回滚崩溃,你可以移除它。
你也可以用这个来停止由失败的大宗导入或失败的ALTER TABLE导致的失控回滚。
你可以杀掉mysqld进程,然后设置innodb_force_recovery为3,使得数据库被挂起而不需要回滚,然后舍弃导致失控回滚的表。