重装Ubuntu系统后Mysql 数据恢复历程

1.概况

为服务器重装了Ubuntu 16.04-server, 之前的一些数据丢失了, 好在硬盘并未格式化, 至少还有点希望能恢复Mysql的数据

2.现有条件

  • 把旧的硬盘挂载到电脑上, 找到数据库目录下的文件: 默认的数据库目录为: /var/lib/mysql
    硬盘挂载目录为: /media/user/f101a309-d55a-4a50-8e1c-d63534146b6f
$ ll /media/user/f101a309-d55a-4a50-8e1c-d63534146b6f/var/lib/mysql
-rw-r-----  1   122 vboxusers       56 9月   6  2019 auto.cnf
-rw-------  1   122 vboxusers     1680 11月 19 06:09 ca-key.pem
-rw-r--r--  1   122 vboxusers     1112 11月 19 06:09 ca.pem
-rw-r--r--  1   122 vboxusers     1112 11月 19 06:09 client-cert.pem
-rw-------  1   122 vboxusers     1676 11月 19 06:09 client-key.pem
-rw-r--r--  1   122 vboxusers        0 2月  25 09:40 debian-5.7.flag
drwxr-x---  2   122 vboxusers     4096 9月  17  2019 FactoryTest/
-rw-r-----  1   122 vboxusers      750 4月   1 09:07 ib_buffer_pool
-rw-r-----  1   122 vboxusers 79691776 4月   1 09:07 ibdata1
-rw-r-----  1   122 vboxusers 50331648 4月   1 09:07 ib_logfile0
-rw-r-----  1   122 vboxusers 50331648 9月   6  2019 ib_logfile1
drwxr-x---  2   122 vboxusers     4096 10月 22 15:27 kanboard/
drwxr-x---  2   122 vboxusers     4096 2月  25 09:41 mysql/
-rw-r--r--  1   122 vboxusers        6 2月  25 09:41 mysql_upgrade_info
drwxr-x---  2   122 vboxusers     4096 2月  25 09:40 performance_schema/
-rw-------  1   122 vboxusers     1676 11月 19 06:09 private_key.pem
-rw-r--r--  1   122 vboxusers      452 11月 19 06:09 public_key.pem
-rw-r--r--  1   122 vboxusers     1112 11月 19 06:09 server-cert.pem
-rw-------  1   122 vboxusers     1680 11月 19 06:09 server-key.pem
drwxr-x---  2   122 vboxusers    12288 11月 19 06:09 sys/
drwxr-x---  2   122 vboxusers    12288 10月 22 10:18 zentao/

需要恢复的数据库 FactoryTest, 所以, 不管如何先将它压缩保存下来, 丢到服务器去试试先.

3.粗暴的尝试

  • 停止mysql /etc/init.d/mysql stop
  • 直接把上面找到的文件丢到服务器对应的mysql目录下, 并修改相应的文件权限
  • 启动mysql /etc/init.d/mysql start
  • 尝试访问读取数据失败…果然没那么简单.

停止数据库, 删除前面的暴力尝试拷贝进去的文件夹


4.Google 后, 见参考.1

4.1恢复表格

  • 需要用到工具mysqlfrm
  • 找不到, 就装一个sudo apt install mysql-utilities
  • 命令执行的效果 mysqlfrm --diagnostic FactoryTest/Wifi.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 the resulting statement may not be syntactically correct.
# Reading .frm file for FactoryTest/Wifi.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:

CREATE TABLE `FactoryTest`.`Wifi` (
  `id` int(11) NOT NULL AUTO_INCREMENT, 
  `ssid` varchar(32) NOT NULL, 
  `pwd` varchar(32) NOT NULL, 
PRIMARY KEY `PRIMARY` (`id`)
) ENGINE=InnoDB;

#...done.
  • 表格的query语句出来了, 接下来就简单了, 拷贝粘贴, 执行完, 表格都有了.

4.2恢复数据

  • 进mysql执行下面的命令(所有的表格):
ALTER TABLE example_table DISCARD TABLESPACE;
  • 执行完后, 数据库目录下的 .idb 文件都不见了
  • 执行上面的暴力拷贝, 只拷贝 .idb 文件: sudo cp -rn . /var/lib/mysql/FactoryTest/
  • 记得修改文件权限: sudo chown mysql:mysql -R /var/lib/mysql/FactoryTest
  • 再进mysql为每个表格执行语句
ALTER TABLE example_table IMPORT TABLESPACE;

完成

5.参考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章