关于mysql:记一次MySQL数据库恢复附方案

7次阅读

共计 1163 个字符,预计需要花费 3 分钟才能阅读完成。

复原步骤概要

  • 备份 frm、ibd 文件
  • 如果 mysql 版本发生变化,装置回本来的 mysql 版本
  • 创立和本来库名统一新库,字符集都要放弃一样
  • 通过 frm 获取到原先的表构造,通过的失去的表构造创立一个和原先构造一样的空表。
  • 应用“ALTER TABLE DISCARD TABLESPACE;”命令卸载掉表空间
  • 将原先的 ibd 拷贝到 mysql 的仓库下
  • 增加用户权限“chown . .ibd”, 如果是操作和 mysql 的应用权限统一能够跳过
  • 通过“ALTER TABLE IMPORT TABLESPACE;”命令复原表空间
  • 实现

实际操作

1)备份文件

mkdir /usr/local/backup
cp * /usr/local/backup

2)装置本来版本的数据库

3)创立和本来统一的库

创立和本来库名统一新库,字符集都要放弃一样

4)frm 获取到原先的表构造

这里应用 dbsake 读取 frm 的表构造

(1)dbsake 装置

# 下载
curl -s get.dbsake.net > dbsake
#增加执行权限
chmod u+x dbsake

(2)应用 dbsake 读取表构造

# 根底应用
./dbsake frmdump [frm-file-path]

#将所有读取后果输出到文件中
./dbsake frmdump [frm-file-path] > < 文件名 >
例如:./dbsake frmdump student.frm teacher.frm > school.txt

(3)复原表构造

文件中寄存的是 frm 对应表构造的 sql,间接复制进去运行就行了,此时数据库中所有的构造都复原了,就是还没有数据

5)卸载表空间

在 mysql 中执行命令,卸载掉表空间

ALTER TABLE <tabelName> DISCARD TABLESPACE;

例如:ALTER TABLE student DISCARD TABLESPACE;
ALTER TABLE teacher DISCARD TABLESPACE;

6)拷贝本来的 ibd,到新的库中

(1)确定新数据库的数据寄存地位

在 mysql 中执行命令

show variables like 'datadir';

进入对应文件夹中,会有一个和须要复原的数据库名齐全一样的文件夹,进入文件夹

(2)将 ibd 文件复制过去

cp 命令间接复制过去就行了

7)命令复原表空间

在 mysql 执行命令,复原表空间

ALTER TABLE <tabelName> IMPORT TABLESPACE;

例如:ALTER TABLE student IMPORT TABLESPACE;
ALTER TABLE teacher IMPORT TABLESPACE;

8)实现

如果 mysql 有什么特地配置,还须要在增加一下,比方:本来的用户账户、原先配置的 sql_mode 等等

起源:blog.csdn.net/qq_34886352/article/details/112469998

正文完
 0