Php 通用远程数据备份和下载-包括InnoDb支持
我想要一个基于PHP的解决方案来备份远程服务器的数据库(只有数据而不是代码)并下载文件。我知道基于Shell的解决方案更适合做这些事情(在本地系统上运行Shell脚本,并通过SSH连接到远程系统),但需要有一个基于PHP的解决方案,在这个解决方案中,知道URL和拥有数据库凭据就足以让非技术人员进行备份。PHP脚本可以上传到远程服务器并执行 以下是我想要的功能:-Php 通用远程数据备份和下载-包括InnoDb支持,php,shared-hosting,database-backups,Php,Shared Hosting,Database Backups,我想要一个基于PHP的解决方案来备份远程服务器的数据库(只有数据而不是代码)并下载文件。我知道基于Shell的解决方案更适合做这些事情(在本地系统上运行Shell脚本,并通过SSH连接到远程系统),但需要有一个基于PHP的解决方案,在这个解决方案中,知道URL和拥有数据库凭据就足以让非技术人员进行备份。PHP脚本可以上传到远程服务器并执行 以下是我想要的功能:- 至少应支持InnoDb引擎-应导出外键约束。如果它支持所有其他发动机,则不会造成伤害 应能在所有服务器上工作,且存在最大限度的限制(
- 至少应支持InnoDb引擎-应导出外键约束。如果它支持所有其他发动机,则不会造成伤害
- 应能在所有服务器上工作,且存在最大限度的限制(我知道一些限制,如启用了
,安全模式
,exec()
功能禁用等)。我想要一个非常通用的解决方案,它保证在任何地方都能工作system()
- 进程应通过密码验证(要求提供数据库凭据)
exec
、system
等系统功能是否可以在共享主机服务器中完全禁用。如果它们被禁用而无法被覆盖,那么基于mysqldump
的解决方案将无法普遍工作。问题-但是,如果只启用了
安全模式
,系统功能可以在安全模式
执行目录中的文件上执行,那么解决方案能否安全工作mysqldump
的解决方案中,需要在下载之前先创建备份文件)。因此,解决方案不需要在那里创建备份文件(如果在其他位置创建,则没有问题)。问题-但是,共享主机提供商是否允许这样做
mysqldump
的解决方案的用法。他们执行类似于SHOW CREATE TABLE
等操作,以获取所有的表创建、数据插入查询,然后下载这些内容,而不实际将其保存为文件(因此没有安全风险)。问题-我的结论正确吗?他们没有像第一点中的解决方案那样做简单的
mysqldump
,因为这不是一个通用且安全的解决方案?问题-此外,我读到没有任何好的方法可以很好地工作。我个人只使用了这个,当我试图用创建的备份恢复数据库时,它会给我带来mysql错误。转储文件中的查询看起来也与PhpMyAdmin的导出模块创建的查询有些不同。我还检查了其他几个免费用户贡献的PHP类。看起来它们中的大多数不支持InnoDb支持,因此如果数据库中存在外键约束,则导出中不存在外键约束。
问题-PhpMyAdmin本身的导出功能,如果单独提供,我想可能是解决方案。有人知道像这样稳定的图书馆吗
- 直观的web界面
- 支持大多数MySQL功能:
- 浏览和删除数据库、表、视图、字段和索引
- 创建、复制、删除、重命名和更改数据库、表、字段和索引
- 维护服务器、数据库和表,以及服务器配置建议
- 执行、编辑任何SQL语句并为其添加书签,甚至是批处理查询
- 管理MySQL用户和权限
- 管理存储过程和触发器
- 从CSV和SQL导入数据
- 将数据导出为各种格式:CSV、SQL、XML、PDF、ISO/IEC 26300-OpenDocument文本和电子表格、Word、Excel、LATEX和其他格式
- 管理多台服务器
- 创建数据库布局的PDF图形
- 使用示例查询(QBE)创建复杂查询
- 在数据库或其子集中全局搜索
- 使用一组预定义的函数将存储的数据转换为任何格式,如将BLOB数据显示为图像或下载链接
- 还有更多
root@debian:~ # aptitude install phpmyadmin
root@arch:~ # pacman -S phpmyadmin
顺便说一句:如果您没有在http服务器上使用Apache或lighttpd,则需要通读phpmyadmin的conf文件,然后编写phpmyadmin所需的conf脚本,以便与http服务器一起使用
. 它的跨平台和工作非常好。
顺便说一句:使用+
对数据库进行正向工程,我花了一段时间才发现这一点
仅在配置后工作的独立perl文件:(未测试)
使用DBI;
我的$user=“username”;
use DBI;
my $user = "username"; # MySQL Username
my $pass = "xxxx"; # MySQL Password
my $host = "localhost"; # MySQL Host
my $mydb = "zzzz"; # MySQL Database
my $file = "test.sql"; # Import file
my $sqlServer = "mysql"; # What sql-server are we using, oracle/mysql/etc
# I would use the following method to configure it, though the above works fine too.
($user,$pass,$host,$mydb,$file,sqlServer) = (
"username", # MySQL Username
"password", # MySQL Password
"localhost", # MySQL Host
"myDB", # MySQL Database
"test.sql", # Imported file
"mysql" # What sql-server are we using, oracle/mysql/etc
);
# Now lets connect to the MySQL server.
my $dbh = DBI->connect("DBI:$sqlServer:$mydb:$host",$user,$pass)or die DBI->errstr();
# Lets now open the .sql file.
open(INPUT,$file);
# Now lets run each sql-statement.
while ($line = <INPUT>){
print $line;
$dbh->do($line);
print "Query failed (run manually):\n$line\n\n ". $dbh->errstr()."\n" if $dbh->errstr();
}
# Now close the file.
close(INPUT);