CSV 和 SELECT INTO OUTFILE
http://dev.mysql.com/doc/refman/5.7/en/select-into.html
SELECT ... INTO OUTFILE 将选定的行写入文件。可以指定列和行终止符以产生特定的输出格式。
这是一个完整的例子:
SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
该文件保存在服务器上,并且选择的路径需要是可写的。虽然这个查询可以通过 PHP 和 web 请求执行,但最好通过 mysql 控制台执行。
以这种方式导出的数据可以使用LOAD DATA INFILE导入另一个数据库
虽然这种方法在遍历结果集并逐行保存到文件中的效果更好,但不如使用...。
mysql转储
mysqldump在很多方面都优于 SELECT INTO OUTFILE,生成 CSV 只是这个命令可以做的许多事情之一。
mysqldump 客户端实用程序执行逻辑备份,生成一组 SQL 语句,可以执行这些语句来重现原始数据库对象定义和表数据。它转储一个或多个 MySQL 数据库以进行备份或传输到另一台 SQL 服务器。mysqldump 命令还可以生成 CSV、其他分隔文本或 XML 格式的输出。
理想情况下,应该从您的 shell 调用 mysqldump。可以在 php 中使用exec来运行它,但由于生成转储可能需要很长时间,具体取决于数据量,并且 php 脚本通常只运行 30 秒,因此您需要将其作为后台进程运行。
mysqldump 并非没有问题。
它不是用于备份大量数据的快速或可扩展的解决方案。对于大数据量,即使备份步骤花费了合理的时间,恢复数据也可能非常缓慢,因为重放 SQL 语句涉及用于插入的磁盘 I/O、索引创建等。
一个经典的例子见这个问题:Server crash on MySQL backup using python where 一个 mysqldump 似乎在前一个完成之前就开始了,并且使网站完全没有响应。
mysql复制
复制可以将来自一台 MySQL 数据库服务器(主服务器)的数据复制到一台或多台 MySQL 数据库服务器(从服务器)。复制默认是异步的;从站不需要永久连接来接收来自主站的更新。根据配置,您可以复制数据库中的所有数据库、选定的数据库甚至选定的表。
因此,复制的操作方式与SELECT INTO OUTFILE
或msyqldump
理想的情况是保持本地副本中的数据几乎是最新的(可以说完美同步,但存在所谓的从属滞后)另一方面,如果您使用计划任务mysqldump
每 24 小时运行一次。想象一下如果服务器在 23 小时后崩溃会发生什么?
每次运行 mysqldump 时都会产生大量数据,请定期执行此操作,您会发现硬盘已满或文件存储费用达到顶峰。通过复制仅将更改传递到服务器(通过使用所谓的 binlog)
XtraBackup
复制的替代方法是使用Percona XtraBackup。
Percona XtraBackup 是基于 MySQL 的服务器的开源热备份实用程序,在备份期间不会锁定您的数据库。
虽然来自 Percona,但它与 Mysql 和 Mariadb 兼容。它有做增量备份的能力,这是mysqldump最大的限制。