1.利用原数据库的创建SQL创建一个数据库,确保表及表结构与原数据库一致:
CREATE TABLE <table_name> …;
2.删除新建的表空间:
ALTER TABLE <table_name> DISCARD TABLESPACE;
每个表都需要操作一次。
3.将待恢复的<table_name>.ibd文件copy到目标数据库文件夹下,并修改文件权限:
4.导入表空间:
ALTER TABLE <table_name> IMPORT TABLESPACE;
一样需要每个表都操作一次
异常处理:
直接复制DADA下的数据库文件覆盖会导致MYSQL无法正常启动。此时删除data目录下的除数据库文件夹以及ibdata1之外的文件可以让MYSQL恢复正常启动
导入表空间出错的时候注意一下源数据库跟现在使用的数据库版本是否一致。版本不一致会导致导入表空间报错。
*注意: 一定不要删除ibdata1, 查了资料, 说这个是很重要的文件,保存着innodb相关的数据(有这个文件说不定直接覆盖后可以正常使用)。万一删除的话就按上面的操作来恢复。当然前提是数据库文件夹下的文件是完整可用的。
以上为本知识库数据误删除后 的恢复记录,历时六天,必须记下备用。
自动备份数据库脚本:
新建一个批处理文件,如:mysql_backup_tool.bat,文件内容如下:
rem MySQL backup start
@echo off
::删除一周前的备份数据
forfiles /p “c:\mysql_backup” /m backup_*.sql -d -7 /c “cmd /c del /f @path”
::设置时间变量
set “Ymd=%date:0,4%%date:5,2%%date:8,2%%time:0,2%%time:3,2%%time:6,2%”
::进入mysql安装目录的bin目录下
cd C:\Program Files\MySQL\MySQL Server 5.7\bin\
::执行备份操作
mysqldump --opt --single-transaction=TRUE --user=root --password=123456 --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events “用数据库名替换” > c:\mysql_backup\backup_%Ymd%.sql
@echo on
rem MySQL backup end
forfiles 为删除过期文件的命令,-d -7 删除7天的文件;
关于时间参数的参考:
%date:~0,10% //提取年月日信息
%date:~-3% //提取星期几信息
%time:~0,5% //提取时间中的时和分
%time:~0,-3% //提取时和分和秒信息
mysqldump 为MySQL提供的备份命令,该命令所在目录为MySQL安装目录下的bin文件夹中,此处直接使用该命令的前提是该命令所在bin文件夹已被设置为系统环境变量,如未设置,则要写全路径;
mysqldump -u username -p password --default-character-set=utf8 dbname > backupfile.sql