2014-09-04 187 views
0

我一直在一个涉及Mysql和PHP的项目中工作。在创建包测试中,我已经出口MySQL数据库从MySQL工作台SQL文件,并导入到Linux机器上的MySQL服务器和导出和导入mysql数据库的最佳做法是什么?

mysql>source mydatabase.sql; 

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

在此先感谢!

+0

这听起来对于我来说,无论哪种方式,你的时间都会被索引表所消耗。无论如何,这似乎是正确的。你只有其他的选择是做一个SELECT INTO另一个数据库。这可能甚至可能不可能。但它应该节省时间。 – durbnpoisn 2014-09-04 18:26:40

回答

1

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

  • 的MySQL(旧版本) - 使用mysqldump的
  • 的MySQL(Percona的) - 使用XtraBackup
  • 的MySQL(EE - 5.6) - 使用MySQL企业备份这是更复杂的 和快得多。

最快的方法是避免mysqldump。

我喜欢Percona而不是其他人!
另一种更高级的方式,我认为是在目标服务器上创建数据库,并直接复制数据库文件。假设用户有权访问目标服务器的mysql目录:
作为root用户:这里

[[email protected]]# /etc/init.d/mysqld stop 
[[email protected]]# cd /var/lib/mysql/[databasename] 
[[email protected]]# scp * [email protected]:/var/lib/mysql/[databasename] 
[[email protected]]# /etc/init.d/mysqld start 

重要的事情是:复制DB文件之前停止这两个服务器上的mysqld,确保文件的所有权和权限是正确的在目标服务器上启动mysqld之前在目标上。

[[email protected]]# chown mysql:mysql /var/lib/mysql/[databasename]/* 
[[email protected]]# chmod 660 /var/lib/mysql/[databasename]/* 
[[email protected]]# /etc/init.d/mysqld start 

随着时间的推移在这儿你的优先级,压缩的使用将取决于时间是否失去了等待的压缩/解压缩(用类似的gzip)会比浪费传输未压缩数据的时间更大;也就是连接的速度。

1

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

另一种选择是使用物理备份工具,如提到的Percona XtraBackup(如user @Up_One)。这意味着将备份完整的数据文件,包括索引。在恢复时,不需要重建,因为索引已经填充。使用物理备份工具也有优点和缺点,但恢复时间是一大优势。

相关问题