繁体   English   中英

导出和导入mysql数据库的最佳实践是什么?

[英]What is the best practice to export and import mysql database?

我一直在一个涉及Mysql和PHP的项目中工作。 在创建测试包时,我已经从MySql Workbench中将mysql数据库作为sql文件导出,并使用以下命令导入到Linux机器的mysql服务器中:

mysql>source mydatabase.sql;

这是导出和导入mysql数据库的正确方法吗? 数据库文件还包含架构的创建,数据的插入以及索引脚本的创建。 此文件的导入需要很长时间。 我的直接经理建议我不带索引导出并导入数据库,然后执行索引创建脚本。 这是正确的方法吗? 导入数据库时​​索引会花费很长时间吗?

提前致谢!

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

  • MySQL(旧版本)-使用mysqldump
  • MySQL(percona)-使用XtraBackup
  • MySQL(EE-5.6)-使用MySQL Enterprise Backup,它更加复杂且速度更快。

最快的方法是避免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之类)所浪费的时间是否大于传输未压缩数据所浪费的时间。 即您的连接速度。

Percona Server附带了一个经过修改的mysqldump工具,因此您可以选择--innodb-optimize-keys选项。 这将导出表,数据,以及像股票指数的mysqldump的定义,但在导入过程中它推迟二级索引的创建的数据被加载到表,直到。 这利用了InnoDB的快速索引创建功能。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM