将Mysql数据库转移到另一台计算机

30

我有一个在Windows电脑上运行并填充了mysql数据库,有没有工具可以将数据库传输到另一台计算机(运行Ubuntu)?

否则我只能编写一个脚本将所有数据库数据转化成SQL格式并在其他计算机上进行插入。只是试图省点时间 :)

谢谢大家。

9个回答

33

你所说的工具已经存在:mysqldump

它可以将数据导出为SQL文件,然后可以将其复制到其他机器上并重新加载。

例如:

在源主机上执行:

mysqldump -u username -p databasename > dumpfile.sql

然后使用ftp/rsync/其他工具将文件移动到目标机器上,在那里创建一个空的数据库进行导入并运行:

mysql -u username -p databasename < dumpfile.sql

您还需要为已转移用户设置权限,因为它们不保存在数据库中。

或者,您可以将文件从mysql数据目录复制-但mysqldump是最简单/最可靠的方法。

值得注意的是,在原系统上表名可能不区分大小写,但在另一系统上可能会变成区分大小写。这取决于两端的配置-特别是文件系统的大小写敏感性(或非大小写敏感性)。


1
如果两个版本都支持它(我认为即使4.1也支持),使用“-e”选项应该会大大加快进程。 - MBCook
如果操作系统损坏,无法执行mysqldump怎么办?我听说可以复制.frm、.MYI和.MYD文件。 - Artur Kedzior
1
在这种情况下,您可以复制整个 /var/lib/mysql/<dbname> 文件夹。对于 myisam 表格效果很好,但 innodb 可能会出现问题。有时您需要在新服务器上“创建数据库<dbname>”,然后用复制的文件夹替换它,以便让 mysql 注意到它 - 我没有做过足够多次来正确理解其变幻莫测的特性! - benlumley
1
解决方案已经过时。使用新的MySQL Workbench,您可以轻松地导出/导入数据库。 - zhongxiao37

19

您可以使用单个命令将所有数据库一起导出,而不是逐个导出。 然后再进行导入。

例如:

mysqldump -u username -p --all-databases > c:\alldbs.sql

PS- 最大的优势是您不会失去用户权限。


6
用一条命令还原:mysql -u 用户名 -p < alldbs.sql - Pratyush

2

在所有版本的MySQL之间,磁盘上的文件是100%兼容的。您只需要注意文件名的大小写,因为在Unix上它很重要,而在Windows上有时候也很重要。

并且请记住,在复制之前停止MySQL。在运行时可以复制MyISAM文件,但是复制InnoDB文件不是真正安全的,而Windows的MySQL默认使用InnoDB文件。


2

在使用mysqldump时,特别是在Windows上时,要注意字符集。我建议明确设置我的数据库使用的字符集,并使用--result-file=file而不是使用>操作符,以防止出现混乱。


1

来自MySQL文档: http://dev.mysql.com/doc/refman/5.0/en/copying-databases.html

(注:该文档介绍了如何复制数据库的内容)
shell> mysqldump --quick db_name | gzip > db_name.gz

将包含数据库内容的文件传输到目标机器,并在那里运行以下命令:
shell> mysqladmin create db_name
shell> gunzip < db_name.gz | mysql db_name

0

0

mysqldump 应该正确地转储并保留数据库中任何内容的字符集。如果您不想遇到问题,建议移动到相同版本的 mysql。

由 mysqldump 生成的文件不是文本文件,尽管外观如此,请勿使用 notepad.exe 等编辑它,否则您将陷入麻烦。

第三方 GUI 工具(特别是 phpmyadmin)生成的转储通常不准确,并且不一定能够正确还原。


0

0

使用新的MySQL Workbench(GUI工具),您可以轻松地将数据库导出并导入到您想要迁移的数据库中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接