一、InnoDB 引擎的表 备份导出 数据库文件,以及表结构
在待迁移/备份的 数据库中 执行: show variables like 'datadir';
确定数据库文件存放的目录。
image.png
cd 进入目录下面 数据库名称是文件夹名称
里面有 .frm和 .ibd文件
frm 是表结构 , .ibd 是数据
把数据库下的所有 以上文件 拷贝复制到 目标服务器下面
找到目标服务器数据库存放目录。
导出数据库表结构:
-d 参数 标示只导出结构,不导出数据
mysqldump -uroot -h127.0.0.1 -proot -P3306 -d dbname tablename>d:/dbstaust.sql
二、目标服务器、待迁入、待恢复数据的 服务器上的Mysql上,创建数据库,并恢复表结构。
在目标服务器上 创建新数据库 ,用于存放恢复的数据 ,假设为数据库A。
CREATE DATABASE A ;
USE A; 选择数据库、
SOURCE 表结构.sql # 创建表结构
因为不清楚表结构 ,如果直接替换了 表名.frm 文件会导致错误, 所以新建一个表结构一致的表,
执行 表结构.sql 之后, Mysql 数据库目录下会生成 表名对应的 .frm和 .ibd文件,但是数据是空的
二、把拷贝出来的 .idb 文件进行数据恢复到 新的数据库里面
- 执行以下语句,删除表本身的 .ibd文件 , 这个命令是 删除 InnoDB 结构的 表空间 用的 ,所以不适用于 MyISAM 类型的表
ALTER TABLE t_hospital_order DISCARD TABLESPACE; - 拷贝原始库里面的 .ibd文件到 数据库目录下面 ,执行下面的命令进行恢复
ALTER TABLE t_hospital_order IMPORT TABLESPACE;
发现在 .ibd 文件比较大的时候 1.64G 左右 了 执行 IMPORT TABLESPACE 命令会报错: ERROR 2013 (HY000): Lost connection to MySQL server during query
导致后续整个数据库无法操作: No connection. Trying to reconnect...
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 102
三、如果是 MySAM 引擎的表
直接吧 先关闭数据库,然后拷贝 .frm、.MYD、.MYI 三个文件 到目标数据库的原文件目录下,启动数据库,数据就自动导入恢复了
四、 总结
这种方式备份和迁移数据库,还是非常麻烦的, 比较繁琐, 所以有条件,还是直接 通过 mysqldump 命令全量导出sql 语句,然后在 执行 sourc 命令进行回复。
网友评论