请选择 进入手机版 | 继续访问电脑版

林海谐缘

 找回密码
 审核注册
搜索
查看: 1658|回复: 1

mysql数据库的拷贝移动

[复制链接]
发表于 2009-3-30 18:46:59 | 显示全部楼层 |阅读模式
方法大致分为两种:

一是将mysql里的数据库导出得到.sql数据文件,导出可以通过mysql中自带的mysqldump实现(mysqldump -uroot -p databse > test.sql)或者利用phpmyadmin等工具.在要导入数据的机器上执行.sql文件,即可实现数据的移动。

导入数据可以参照如下步骤:

(1)   运行-〉cmd,进入到mysql的bin目录下;

(2)   执行bin目录下的mysqld,启动mysql服务;

(3)   执行"mysql -uroot –p”,输入密码,即如数据库;

(4)   执行”create database dbname character set gbk;”创建要到入的数据库;

(5)   执行exit,退出mysql;

(6)   执行” mysql -uroot -ppw --default-character-set=gbk -f dbname<demo.sql”,导入数据;

(7)   执行”mysqladmin shutdown”,停止mysql.

但是如果不能导出.sql文件呢?比如原来机器宕掉,而只能从硬盘拷贝出数据文件,此时第一种方法不可行。

二是mysql数据库的拷贝移动,此方法即是直接将原mysql/data目录下的数据文件拷贝到新机器的相应目录中。但因为存储引擎的不同,会遇到一些问题。

在mysql中常用的有两种存储引擎InnoDB和MyiSAM:

MyISAM是默认存储引擎。它基于更老的ISAM代码,但有很多有用的扩展。(注意MySQL 5.1不支持ISAM)。每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。

对于MyISAM存储引擎,直接将data下与数据库名同名的文件夹拷贝至相应目录,重起数据库服务即可。

InnoDB存储引擎是默认地被允许的。如果你不想用InnoDB表,你可以添加skip-innodb选项到MySQL选项文件。被InnoDB存储引擎管理的两个重要的基于磁盘的资源是InnoDB表空间数据文件和它的日志文件。如果你指定无InnoDB配置选项,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。InnoDB给MySQL提供具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。

对于InnoDB存储引擎,mysql从MySQL 4.1.1开始,innodb支持Per-Table Tablespaces,当我们用类似于MyISAM中的方法时,发现会提示错误:

[127.0.0.1] ERROR 1016: Can't open file: 'academicbackground.ibd' (errno: 1)

即使注释掉#innodb_file_per_table,可能还会寻找找.ibd文件。而且在data目录找不到后缀为.ibd的文件,疑惑??

于是想到InnoDB还有ibdata1,ib_logfile0,ib_logfile1三个文件,遂再次拷贝过来,还是不行,而且会导致mysql不能启动。再次疑惑??

最后,经过N次尝试,发现只需拷贝ibdata1文件即可,查网上很多人说InnoDB不能通过直接拷贝移动数据库,其实还是可以的,只需要移动数据库的.frm文件和ibdata1文件即可。重起数据库,数据无丢失。

另外对于数据损坏的情况,可以利用isamchk等工具进行修复。
发表于 2009-5-13 10:07:28 | 显示全部楼层
强。。。。。
您需要登录后才可以回帖 登录 | 审核注册

本版积分规则

QQ|手机版|小黑屋|林海谐缘论坛 ( 豫ICP备07015145号 ) |
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论 | 管理员:linker(QQ:80555546) 群:3067918

GMT+8, 2021-10-18 19:03 , Processed in 0.033091 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表