如何恢复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类型的表却不行。解决方法就是:
同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。启动MySQL的Windows服务 由于MySQL这样数据混杂的形式, 往往很容易让使用者在备份时忘记了备份InnoDB, 从而导致了上述错误.
意思就是说在数据库引擎类型为InnoDB时,拷贝数据文件的同时还需要拷贝ibdata1,于是把ibdata1也拷贝过去覆盖,发现还是有点问题,于是停止mysql服务,将目录下的ib_logfile*文件全部删除掉,重新启动mysql服务,well done,可以了
高兴啊,于是稍微总结了,希望以后遇到相同的问题,能够快速解决。
1,在进行mysql数据库备份的或迁移的时候,尽量备份完成所需要的数据;
2,如果直接拷贝原有数据库文件"*.frm"、"*.MYD"、"*.MYI"等文件时候,如果原数据库引擎是InnoDB,切记还需拷贝ibdata1文件
3,备份数据库的时候,最好是用相关的工具进行备份或是导出sql文件,以免浪费时间在数据库恢复上
4,msyql版本或是备份工具的版本不同,也可能引起数据恢复有问题。
实践证明以上问题是存在的,解决方案是可行的,哈哈,为了以后方便,写了这篇博客随笔,希望大牛看到了不要鄙视,欢迎拍砖。
1:MyISAM类型的数据文件可以在不同操作系统中COPY,这点很重要,布署的时候方便点。(只需要拷贝 数据库名字文件夹下面的文件,这样数据库就拷贝完了)
2: InnoDB类型的 要注意多拷贝 ibdata1 , 最好不要是直接复制文件夹,而是应该用sql导入导出
相关推荐
-
关于mysql数据库误删除后的数据恢复操作说明
在日常运维工作中,对于mysql数据库的备份是至关重要的!数据库对于网站的重要性使得我们对mysql数据的管理不容有失! 然后,是人总难免会犯错误,说不定哪天大脑短路了来个误操作把数据库给删除了,怎么办??? 下面,就mysql数据库误删除后的恢复方案进行说明. 一.工作场景 (1)MySQL数据库每晚12:00自动完全备份. (2)某天早上上班,9点的时候,一同事犯晕drop了一个数据库! (3)需要紧急恢复!可利用备份的数据文件以及增量的binlog文件进行数据恢复. 二.数据恢复思路 (1
-
MySQL误操作后快速恢复数据的方法
摘要: 利用binlog闪回误操作数据. 基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,MySQL误操作后如何快速回滚?比如,delete一张表,忘加限制条件,整张表没了.假如这还是线上环境核心业务数据,那这事就闹大了.误操作后,能快速回滚数据是非常重要的. 传统解法 用全量备份重搭实例,再利用增量binlog备份,恢复到误操作之前的状态.然后跳过误操作的SQL,再继续应用binlog.此法费时费力,不值得再推荐. 利用binlog2sql快速闪回 首先,确认你的MySQ
-
MySQL中数据导入恢复的简单教程
有两个简单的方法MySQL中的数据加载到MySQL数据库从先前备份的文件. LOAD DATA导入数据: MySQL提供了LOAD DATA语句,作为一个大容量数据加载.下面是一个例子声明中,读取一个文件dump.txt,,从当前目录加载到当前数据库中的表mytbl: mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl; 如果本地的关键字是不存在的,MySQL的外观使用绝对路径名寻找到完全指定位置的文件在服务器主机上的数据文件,从文
-
MySQL数据库误操作后快速回滚的方法
基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,MySQL误操作后如何快速回滚?比如,delete一张表,忘加限制条件,整张表没了.假如这还是线上环境核心业务数据,那这事就闹大了.误操作后,能快速回滚数据是非常重要的. binlog2sql快速回滚 首先,确认你的MySQL server开启了binlog,设置了以下参数: [mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log max_binlog_siz
-
mysql 误删除ibdata1之后的恢复方法
mysql 误删除ibdata1之后如何恢复 如果误删除了在线服务器中mysql innodb相关的数据文件ibdata1以及日志文件 ib_logfile*,应该怎样恢复呢? 这时候应该一身冷汗了吧?==================================先抽根烟,冷静一下.==================================再观察一下网站,发现一切都很正常,数据的读取与写入操作都完全正常.这是怎么个情况? 其实,mysqld在运行状态中,会保持这些文件为打开状态,
-
详解MySQL误操作后怎样进行数据恢复
一.开启binlog. 首先查看binlog是否开启 mysql> show variables like "log_bin"; +---------------+-------+ |Variable_name | Value +---------------+-------+ | log_bin OFF +---------------+-------+ 1 row in set (0.00 sec) 值为OFF,需开启,开启binlog方式如下: #vim /etc/my.c
-
如何恢复Mysql数据库的详细介绍
由于在一台测试机器上打算重新安装Mysql数据库,由于简单粗暴的直接卸载了,没有备份公司Discuz和Redmine使用的Mysql数据库,过程可想的悲惨. 还好的是只是卸载掉了Mysql的程序,所有的数据文件还是存在的. 下面是在恢复数据库的过程 1. Discuz数据库 Discuz数据库的恢复非常顺利, 在安装好新版本的Mysql后,直接将原来的数据库文件copy到新的数据目录中,重新启动mysql, 就能看到恢复的数据库了 2. Redmine数据库 本打算直接使用上面的经验,也能看到所
-
Linux上通过binlog文件恢复mysql数据库详细步骤
一.binlog 介绍 服务器的二进制日志记录着该数据库的所有增删改的操作日志(前提是要在自己的服务器上开启binlog),还包括了这些操作的执行时间.为了显示这些二进制内容,我们可以使用mysqlbinlog命令来查看. 用途1:主从同步 用途2:恢复数据库(也是线上出现一次数据库文件丢失后,才对这个有所了解并学习的) mysqlbinlog命令用法:shell> mysqlbinlog [options] log_file ... <!--[if !supportLists]-->
-
Centos7下使用yum安装mysql数据库的详细教程(增强版)
在之前给大家分享过这篇文章:CentOS 7.0下使用yum安装mysql的方法详解,小编觉得不够详细,今天给大家通过本文给大家做个补充,感兴趣的朋友可以参考下. 1. 下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2. 安装mysql-community-release-el7-5.noarch.rpm包 $ sudo rpm -ivh mysql-community-re
-
linux环境下安装mysql数据库的详细教程
1.安装数据库 1)yum -y install mysql-server(简单) yum命令自动从网上寻找mysql服务资源,下载至本地并完成安装 2)也可以自己在网上下载mysql服务,通过xftp传输至Linux系统,自己安装(一般安装在usr或opt目录下) 2.启动数据库 安装完毕,执行命令service mysqld start 3.登录数据库 mysql -u root -p回车后输入密码(mysql的默认用户是root,密码为空) 4.使用数据库 登录成功切换到mysql数据库,
-
Java连接mysql数据库的详细教程(推荐)
该教程是面向那些不知道如何通过java连接mysql数据库的新手,所以该教程用的方法不是最优的方法,但求是最好理解的方法. 需要的工具: eclipse.mysql.mysql的驱动 mysql驱动链接:mysql-connector-java-5.1.7.zip 如果该链接下载不了的话,可以私信我 1.在eclipse中创建一个工程:jdbc 2.在工程下创建lib文件夹 鼠标右键点击jdbc工程 --> New -->Folder. 文件夹命名为lib 3.导入mysql驱动 解压上述连接
-
阿里云服务器安装Mysql数据库的详细教程
前言 由于在学习过程中需要安装zookeeper,我的虚拟机一直有问题,就够买了阿里云服务器.安装完zookeeper后想着把数据库也安装在服务器上,释放一下电脑的压力,在安装数据库的时候遇到了很多问题,通过查看有些大佬的作品终于安装好了数据库.现在就我遇到的问题总结如下: 一.卸载Mysql 1.查看是否安装mysql 首先检查是否已经安装,如果已经安装先删除以前版本,以免安装不成功 [root@localhost ~]# php -v 或 [root@localhost ~]# rpm -q
-
MySQL 中字符集详细介绍
目录 MySQL 中的 UTF8 修改MySQL数据库的编码 字符集的比较规则 MySQL查询时区分大小写 MySQL 中的 UTF8 在 MySQL 中, utf8 编码格式有点特殊, 它不是我们通常用到的 utf8, 而是 utf8mb3 编码的缩写. 而 utf8mb4 才是我们常说的那个 utf8. utf8mb3:阉割过的 utf8 字符集, 只使用 1-3 个字节表示字符. utf8mb4:正宗的 utf8 字符集, 使用 1-4 个字节表示字符. 通常情况下, utf8mb3 和
-
MySql约束超详细介绍
目录 1. 什么是约束 2. 约束包括哪些 3. 非空约束 4. 唯一性约束 1. 单字段唯一性约束 2. 多字段唯一性约束 5. 主键约束 1. 主键约束的相关术语 2. 什么是主键以及有啥用 3. 单一主键 4. 复合主键 5. 其他主键 6. 外键约束 1. 外键约束的相关术语 2. 外键出现的原因 3. 创建外键表 1. 什么是约束 约束对应的英语单词:constraint 在创建表的时候,我们可以给表中的字段加上一些约束,来保证表中的数据的完整性.有效性!!! 约束的作用就是为了保证:
-
Java连接MYSQL数据库的详细步骤
本文主要以MySQL为例讲下Java如何连接到数据库的,具体内容如下 当然,首先要安装有JDK(一般是JDK1.5.X).然后安装MySQL,这些都比较简单,具体过程就不说了.配置好这两个环境后,下载JDBC驱动mysql-connector-java-5.0.5.zip(这个是最新版的).然后将其解压缩到任一目录.我是解压到D盘,然后将其目录下的mysql-connector-java-5.0.5-bin.jar加到classpath里,具体如下:"我的电脑"-> "
-
关于Redis数据库入门详细介绍
目录 1.Redis是什么? 2.Redis特点: 单线程为何如此快? 3.redis 对比 memcached 4.redis 典型应用场景: 5.Redis下载与安装: Redis服务控制: Redis 命令工具: redis-benchmark 测试工具 redis-cli 命令行工具: 1.Redis是什么? 非关系型数据库:NoMsql 主流的 NoSQL 数据库有Redis. MongBD. Hbase. Memcached 等. Redis译为"远程字典服务",它是一款基
随机推荐
- AngualrJs清除定时器遇到的坑
- iOS 中使用正则表达式判断身份证格式及银行卡号格式是否正确(推荐)
- Android应用开发SharedPreferences存储数据的使用方法
- eclipse如何忽略js文件报错(附图)
- 关于换行和回车的图文小结
- 详解在Vue中有条件地使用CSS类
- Objective-C处理空字符串和页面传值及自定义拷贝
- js Array对象的扩展函数代码
- Python转换HTML到Text纯文本的方法
- C语言中自动隐式转换与类型强制转换实例分析
- Android使用Activity实现从底部弹出菜单或窗口的方法
- Advanced SQL Injection with MySQL
- 浅谈JavaScript的push(),pop(),concat()方法
- 使用cluster 将自己的Node服务器扩展为多线程服务器
- php.ini save_handler 修改不生效的解决办法
- jQuery动态添加 input type=file的实现代码
- 利用jQuery实现CheckBox全选/全不选/反选的简单代码
- Ubuntu16.04 静态IP地址设置(NAT方式)
- Hibernate的Annotation版Hello world实例
- Maven模版Bug及解决办法