zoukankan      html  css  js  c++  java
  • 通过.frm .ibd文件恢复MySQL数据

    重新安装完mysql,当我初始化MySQL的时候,报错提示以前的数据目录还存在着,于是把之前的数据拷贝到其他目录,然后初始化成功。由于以前的数据还存在,我便想将以前的数据迁移的刚安装的MySQL中。

    MySQL的版本:Server version: 5.7.24 MySQL Community Server (GPL) 注:Permitted Values (>= 5.6.6) innodb_file_per_table=ON DEFAULT mysql版本大于等于5.6时是默认使用独立表空间来进行数据存储。

    1.通过.frm文件恢复表结构

    1.1 使用mysql utilities 工具恢复表结构

    关于mysql utilities 的安装,嫌麻烦可以采用mysql的yum源,直接yum install mysql-utilities.noarch

    用拷贝出来的.frm直接导出了原来的表创建的sql语句
    [root@docker1 ~]# mysqlfrm --server=root:123456@localhost:3306 /backup/mysql-backup/db1/teacher.frm --port=3434 --user=mysql --diagnostic ........ CREATE TABLE `db1`.`teacher` ( `TNO` varchar(3) COLLATE `utf8_general_ci` NOT NULL, `TNAME` varchar(4) COLLATE `utf8_general_ci` NOT NULL, `TSEX` varchar(2) COLLATE `utf8_general_ci` NOT NULL, `TBIRTHDAY` datetime NOT NULL, `PROF` varchar(6) COLLATE `utf8_general_ci` DEFAULT NULL, `DEPART` varchar(10) COLLATE `utf8_general_ci` NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; #...done.

    2.通过.ibd文件恢复表数据

    2.1 根据mysqlfrm导出的sql语句,创建teacher表,删除.idb文件

    mysql -uroot -p
    mysql> create database db1;

    mysql> CREATE TABLE `db1`.`teacher` (
      `TNO` varchar(3) COLLATE `utf8_general_ci` NOT NULL, 
      `TNAME` varchar(4) COLLATE `utf8_general_ci` NOT NULL, 
      `TSEX` varchar(2) COLLATE `utf8_general_ci` NOT NULL, 
      `TBIRTHDAY` datetime NOT NULL, 
      `PROF` varchar(6) COLLATE `utf8_general_ci` DEFAULT NULL, 
      `DEPART` varchar(10) COLLATE `utf8_general_ci` NOT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      mysql> alter table teacher discard tablespace;
      Query OK, 0 rows affected (0.01 sec)

    2.2 将拷贝出来的.ibd文件代替现teacher表的ibd文件,再导入ibd文件

    [root@docker1 ~]# service mysqld stop
    Stopping mysqld:                                           [  OK  ]
    [root@docker1 ~]# cp /backup/mysql-backup/db1/teacher.ibd /var/lib/mysql/db1/teacher.ibd
    [root@docker1 ~]# chown mysql:mysql /var/lib/mysql/db1/teacher.ibd
    [root@docker1 ~]# service mysqld start
    Starting mysqld:                                           [  OK  ]
    [root@docker1 ~]# mysql -uroot -p db1
    Enter password: 
    mysql> alter table teacher import tablespace;
    Query OK, 0 rows affected, 1 warning (0.01 sec)
    mysql> select * from teacher;
    +-----+--------+------+---------------------+-----------+-----------------+
    | tno | tname  | tsex | tbirthday           | prof      | depart          |
    +-----+--------+------+---------------------+-----------+-----------------+
    | 804 | 李诚   | 男   | 1958-12-02 00:00:00 | 副教授    | 计算机系        |
    | 856 | 张旭   | 男   | 1969-03-12 00:00:00 | 讲师      | 电子工程系      |
    | 825 | 王萍   | 女   | 1972-05-05 00:00:00 | 助教      | 计算机系        |
    | 831 | 刘冰   | 女   | 1977-08-14 00:00:00 | 助教      | 电子工程系      |
    +-----+--------+------+---------------------+-----------+-----------------+
    4 rows in set (0.00 sec)

    数据恢复成功。

  • 相关阅读:
    JAVA-初步认识-第七章-static关键字-数据共享
    JAVA-初步认识-第七章-this关键字应用
    JAVA-初步认识-第七章-this关键字的使用场景二和细节
    JAVA-初步认识-第七章-this关键字的使用场景和原理图解
    未能找到Microsoft.Office.Core.MsoTriState的引用
    Windows Server 2012 FTP配置 后客户机一直登录不上
    ArcEngine 不能再打开其他表了
    CreateFeatureClass 异常,尝试读取或写入受保护的内存 Access
    ArcEngine开发异常:无当前记录
    一个文科妹子的前端悲欢编程之路
  • 原文地址:https://www.cnblogs.com/hana-alice/p/10370904.html
Copyright © 2011-2022 走看看