在CentOS系统中,使用PHP进行备份和恢复通常涉及到以下几个方面:
数据库备份与恢复:
mysqldump或mysqlpump命令行工具来备份和恢复MySQL数据库。exec()函数来调用这些命令。文件备份与恢复:
copy()、file_put_contents()等来备份和恢复文件。网站文件备份与恢复:
定时任务:
以下是一些基本的示例代码:
<?php
$host = 'localhost';
$dbname = 'your_database';
$user = 'your_username';
$pass = 'your_password';
$backupFile = '/path/to/backup/' . $dbname . '_' . date('Y-m-d_H-i-s') . '.sql';
// mysqldump command
$command = "mysqldump --user={$user} --password={$pass} --host={$host} {$dbname} > {$backupFile}";
// Execute the command
exec($command, $output, $return_var);
if ($return_var == 0) {
echo "Backup successful!";
} else {
echo "Backup failed.";
}
?>
<?php
$sourceDir = '/path/to/source';
$backupDir = '/path/to/backup';
// Ensure backup directory exists
if (!is_dir($backupDir)) {
mkdir($backupDir, 0755, true);
}
// Copy files from source to backup directory
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($sourceDir, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($files as $fileinfo) {
if (!$fileinfo->isDir()) {
$filePath = $fileinfo->getRealPath();
$relativePath = substr($filePath, strlen($sourceDir));
$backupFilePath = $backupDir . '/' . $relativePath;
// Ensure the directory for the file exists in the backup
$backupDirPath = dirname($backupFilePath);
if (!is_dir($backupDirPath)) {
mkdir($backupDirPath, 0755, true);
}
// Copy the file
copy($filePath, $backupFilePath);
}
}
echo "Backup completed.";
?>
在CentOS中,你可以使用crontab -e命令来编辑Cron作业。例如,每天凌晨2点执行备份脚本:
0 2 * * * /usr/bin/php /path/to/your/backup_script.php
请注意,使用PHP执行系统命令时要非常小心,确保输入是安全的,以防止命令注入攻击。此外,备份文件应该存储在安全的位置,并定期检查备份的完整性。