导出和导入mysql数据库的最佳做法是什么?

时间:2014-09-04 18:20:56

标签: mysql sql database

我一直在从事涉及Mysql和PHP的项目。在创建用于测试的包时,我已经从MySql Workbench导出mysql数据库作为sql文件,并导入到linux机器的mysql服务器中

mysql>source mydatabase.sql;

这是导出和导入mysql数据库的正确方法吗?此外,数据库文件还包含模式的创建,插入数据和创建索引脚本。使用此文件导入需要很长时间。我的直接经理建议我导出没有索引和导入数据库,然后执行索引创建脚本。这是正确的方法吗?导入数据库时​​索引需要很长时间吗?

提前致谢!

3 个答案:

答案 0 :(得分:1)

我更喜欢使用mysqldump! (检查一下:http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html

答案 1 :(得分:1)

导出取决于您运行的MySQL版本/供应商!

  • MySQL(旧版本) - 使用mysqldump
  • MySQL(percona) - 使用XtraBackup
  • MySQL(EE - 5.6) - 使用更复杂的MySQL企业备份 而且要快得多。

最快的方法是避免使用mysqldump。

我比其他人更喜欢Percona!
另一种方式,但更高级,我认为是在目标服务器上创建数据库,并直接复制数据库文件。假设用户可以访问目标服务器的mysql目录:
以root用户身份:

[root@server-A]# /etc/init.d/mysqld stop
[root@server-A]# cd /var/lib/mysql/[databasename]
[root@server-A]# scp * user@otherhost:/var/lib/mysql/[databasename]
[root@server-A]# /etc/init.d/mysqld start

重要的是:在复制数据库文件之前,在两台服务器上停止mysqld,确保在目标服务器上启动mysqld之前,目标文件的所有权和权限是正确的。

[root@server-B]# chown mysql:mysql /var/lib/mysql/[databasename]/*
[root@server-B]# chmod 660 /var/lib/mysql/[databasename]/*
[root@server-B]# /etc/init.d/mysqld start

随着时间的推移,压缩的使用将取决于等待压缩/解压缩(使用gzip等)的时间是否大于传输未压缩数据所浪费的时间;也就是你的连接速度。

答案 2 :(得分:1)

Percona Server附带了一个经过修改的mysqldump工具,因此您可以选择--innodb-optimize-keys选项。这会导出表格,数据和索引定义,例如stock mysqldump,但在导入期间,它会推迟创建二级索引,直到数据加载到表中后。这利用了InnoDB的fast index creation功能。

另一种选择是使用物理备份工具,例如Percona XtraBackup(如用户@Up_One)。这意味着备份完整数据文件,包括索引。在还原时,不需要重建任何内容,因为索引已经填充。使用物理备份工具也有利有弊,但恢复时间是一个很大的优势。