php mysql 自动备份_php – 自动或定期备份mysql数据

我想使用定期备份我的mysql数据库中的一些表. / plain php /我最喜欢的第二语言.我希望它是自动化的,以便以后可以在出现问题时恢复备份.

我尝试执行查询并将结果保存到文件中.结束看起来有点像这样的代码.

$sql = 'SELECT * FROM my_table ORDER id DESC';

$result = mysqli_query( $connect, $sql );

if( mysqli_num_rows( $result ) > 0){

$output=fopen('/tmp/dumpfile.csv','w+');

/* loop through recordset and add that to the file */

while( $row = mysqli_fetch_array( $result ) ) {

fputcsv( $output, $row, ',', '"');

}

fclose( $output );

}

我在本地计算机上设置了一个cron作业,使用此代码访问网页.我也尝试在服务器上编写一个cronjob作为CLI运行脚本.但它造成了各种各样的问题.这些包括

>有时数据不一致

>该文件似乎被截断

>输出无法导入另一个数据库

>有时脚本会超时

我也听说过mysqldump.我试图用exec运行它,但它会产生错误.

我怎么解决这个问题?

解决方法:

CSV和SELECT INTO OUTFILE

SELECT … INTO OUTFILE writes the selected rows to a file. Column and

line terminators can be specified to produce a specific output format.

这是一个完整的例子:

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导入到另一个数据库中

虽然这种方法优于迭代结果集并逐行保存到文件,但它不如使用….

mysqldump的

mysqldump在许多方面优于SELECT INTO OUTFILE,生成CSV只是该命令可以做的许多事情之一.

The mysqldump client utility performs logical backups, producing a set

of SQL statements that can be executed to reproduce the original

database object definitions and table data. It dumps one or more MySQL

databases for backup or transfer to another SQL server. The mysqldump

command can also generate output in CSV, other delimited text, or XML

format.

理想情况下,应该从shell调用mysqldump.可以在php中使用exec来运行它,但由于生成转储可能需要很长时间,具体取决于数据量,并且php脚本通常只运行30秒,因此您需要将其作为后台进程运行.

mysqldump并非没有它的公平份额的问题.

It is not intended as a fast or scalable solution for backing up

substantial amounts of data. With large data sizes, even if the backup

step takes a reasonable time, restoring the data can be very slow

because replaying the SQL statements involves disk I/O for insertion,

index creation, and so on.

一个经典的例子看到这个问题:Server crash on MySQL backup using python其中一个mysqldump似乎在前一个完成之前启动并使网站完全没有响应.

Mysql复制

Replication enables data from one MySQL database server (the master)

to be copied to one or more MySQL database servers (the slaves).

Replication is asynchronous by default; slaves do not need to be

connected permanently to receive updates from the master. Depending on

the configuration, you can replicate all databases, selected

databases, or even selected tables within a database.

因此,replication的运行方式与SELECT INTO OUTFILE或msyqldump的运行方式不同.理想的是保持本地副本中的数据几乎是最新的(完全同步,但有一些称为slave lag)另一方面,如果你使用一个计划任务来运行mysqldump每24小时一次.想象一下,如果服务器在23小时后崩溃会发生什么?

每次运行mysqldump时,你都会生成大量数据,定期继续操作,你会发现你的硬盘已经填满,或者你的文件存储费用已经达到顶峰.使用复制时,只会将更改传递给服务器(通过使用所谓的binlog)

XtraBackup

Percona XtraBackup is an open-source hot backup utility for MySQL –

based servers that doesn’t lock your database during the backup.

虽然Percona,它与Mysql和Mariadb兼容.它具有执行增量备份的能力,缺少这是mysqldump的最大限制.

标签:php,mysql,database,mysql-backup

来源: https://codeday.me/bug/20190911/1803959.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值