怎么恢复mysql数据库怎么恢复数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么恢复mysql数据库怎么恢复数据相关的知识,希望对你有一定的参考价值。
简单情况下:进入原来mysql安装路径下的data文件夹下,找到相应的库和ibdata1,进行copy,就可回复原来的数据。复杂情况下:
从另一台机上把MySQL数据库的mysql文件夹拷贝到本地机上,目的是恢复本地机对数据的访问和操作。经过如下几种情况的操作。
1.
在本地重装MySQL(安装目录D:\Program
Files\MySQL\MySQL
Server
5.0),直接把mysql文件夹拷贝至D:\Program
Files\MySQL\MySQL
Server
5.0\。结果,失败:数据库连接错误。
2.
卸载后重装MySQL,将D:\Program
Files\MySQL\MySQL
Server
5.0\下的数据备份,只把mysql\data文件夹全部内容拷贝到D:\Program
Files\MySQL\MySQL
Server
5.0\data下。结果,失败:数据库连接错误。将备份的数据还完覆盖。结果,失败,还是连接不上数据库。
3.
卸载后重装MySQL,将mysql\data文件夹里的cf1,last文件夹(这两个是原来MySQL里的数据库)拷贝进D:\Program
Files\MySQL\MySQL
Server
5.0\data。连接成功,在Navicat
for
MySQL里看到数据库cf1和last,但是不能访问,因为数据全为零。明白了原来data里以数据库命名的文件存储的是数据库的表结构,不是元数据。下一步,把data文件夹里的ibdata1文件(3.4G大,明显存储了元数据)拷贝到D:\Program
Files\MySQL\MySQL
Server
5.0\data里,代替原来的ibdata1文件。重启电脑,打开Navicat
for
MySQL,连接成功,数据可以访问操作。
至此,操作终于成功。其实当初在那台机上把数据导出来,而不是现在直接把文件夹mysql复制过来会更容易恢复。但那台机已经重装了系统,也就是说MySQL失效了。 参考技术A 另外,如果想要实现在线备份,还可以使用
--master-data
参数来实现,如下:
/usr/local/mysql/bin/mysqldump
-uyejr
-pyejr
\
--default-character-set=utf8
--opt
--master-data=1
\
--single-transaction
--flush-logs
db_name
>
db_name.sql
它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入change
master
语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。
1.2
还原
用
mysqldump
备份出来的文件是一个可以直接倒入的
sql
脚本,有两种方法可以将数据导入。
直接用
mysql
客户端
例如:
/usr/local/mysql/bin/mysql
-uyejr
-pyejr
db_name
<
db_name.sql
用
source
语法
其实这不是标准的
sql
语法,而是
mysql
客户端提供的功能,例如:
source
/tmp/db_name.sql;
这里需要指定文件的绝对路径,并且必须是
mysqld
运行用户(例如
nobody)有权限读取的文件。
2、
mysqlhotcopy
2.1
备份
mysqlhotcopy
是一个
perl
程序,最初由tim
bunce编写。它使用
lock
tables、flush
tables
和
cp
或
scp
来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy
只能用于备份
myisam,并且只能运行在
类unix
和
netware
系统上。
mysqlhotcopy
支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:
root#/usr/local/mysql/bin/mysqlhotcopy
-h=localhost
-u=yejr
-p=yejr
\
db_name
/tmp
(把数据库目录
db_name
拷贝到
/tmp
下)
root#/usr/local/mysql/bin/mysqlhotcopy
-h=localhost
-u=yejr
-p=yejr
\
db_name_1
...
db_name_n
/tmp
root#/usr/local/mysql/bin/mysqlhotcopy
-h=localhost
-u=yejr
-p=yejr
\
db_name./regex/
/tmp
mysql binlog没有开启数据怎么恢复
参考技术A mysql binlog没有开启数据恢复mysql 不小心误删了一个数据表的数据,通过delete,没有开启binlog,如何才可以恢复数据。MYI MYD文件还是原大小。
SQL code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MariaDB [(none)]> show variables like '%bin%';
+-----------------------------------------+----------------------+
| Variable_name | Value |
+-----------------------------------------+----------------------+
| binlog_annotate_row_events | OFF |
| binlog_cache_size | 32768 |
| binlog_checksum | NONE |
| binlog_direct_non_transactional_updates | OFF |
| binlog_format | STATEMENT |
| binlog_optimize_thread_scheduling | ON |
| binlog_stmt_cache_size | 32768 |
| innodb_locks_unsafe_for_binlog | OFF |
| log_bin | OFF |
| log_bin_trust_function_creators | OFF |
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_size | 1073741824 |
| max_binlog_stmt_cache_size | 18446744073709547520 |
| sql_log_bin | ON |
| sync_binlog | 0 |
+-----------------------------------------+----------------------+
15 rows in set (0.00 sec)
如何恢复,数据库还未重启。
SQL code?
1
2
3
4
5
6
7
8
9
10
11
[root@flxx dada002]# ll
total 512332
drwxr-xr-x 2 dada002 root 4096 Dec 22 23:10 bak
-rw-r----- 1 root root 13880 Mar 13 11:52 gk_info_info.frm.bak
-rw-r----- 1 root root 485853324 Mar 13 11:51 gk_info_info.MYD.bak
-rw-r----- 1 root root 9374720 Mar 13 11:51 gk_info_info.MYI.bak
-rw-r----- 1 root root 18874368 Mar 13 12:02 ibdata1
-rw-r----- 1 root root 5242880 Mar 13 12:02 ib_logfile0
-rw-r----- 1 root root 5242880 Mar 13 12:02 ib_logfile1
drwxrwxrwx 2 dada002 root 12288 Mar 9 14:25 logs
drwxr-xr-x 16 dada002 root 4096 Mar 8 15:10 www
以上是关于怎么恢复mysql数据库怎么恢复数据的主要内容,如果未能解决你的问题,请参考以下文章