在ThinkPHP框架中,可以使用以下步骤进行数据备份和恢复操作:
config/database.php
文件中配置数据库信息,如下所示:return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => 'localhost',
// 数据库名
'database' => 'database_name',
// 用户名
'username' => 'username',
// 密码
'password' => 'password',
// 端口
'hostport' => '3306',
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'think_',
];
在项目根目录下创建backup
目录用于存放备份文件。
创建一个备份控制器Backup.php
,并添加以下代码:
namespace app\admin\controller;
use think\Db;
use think\facade\Config;
use ZipArchive;
class Backup
{
// 备份数据库
public function backup()
{
// 获取数据库配置信息
$config = Config::get('database');
// 数据库名
$database = $config['database'];
// 数据库连接信息
$dsn = "mysql:host={$config['hostname']};dbname={$database};port={$config['hostport']};charset={$config['charset']}";
// 数据库用户名
$username = $config['username'];
// 数据库密码
$password = $config['password'];
// 数据库表前缀
$prefix = $config['prefix'];
// 备份文件名
$filename = date('YmdHis') . '.sql';
// 备份文件路径
$path = ROOT_PATH . 'backup/' . $filename;
// 执行备份命令
exec("mysqldump -u{$username} -p{$password} -h{$config['hostname']} -P{$config['hostport']} {$database} > {$path}");
// 压缩备份文件
$zip = new ZipArchive();
$zipName = $filename . '.zip';
if ($zip->open(ROOT_PATH . 'backup/' . $zipName, ZipArchive::CREATE) === TRUE) {
$zip->addFile($path, $filename);
$zip->close();
}
// 删除原始备份文件
unlink($path);
// 下载备份文件
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename={$zipName}");
header("Content-Length: " . filesize(ROOT_PATH . 'backup/' . $zipName));
readfile(ROOT_PATH . 'backup/' . $zipName);
exit();
}
}
backup
方法,即可下载备份文件。Restore.php
,并添加以下代码:namespace app\admin\controller;
use think\Db;
use think\facade\Config;
use ZipArchive;
class Restore
{
// 恢复数据库
public function restore()
{
// 获取备份文件名
$filename = input('filename');
// 备份文件路径
$path = ROOT_PATH . 'backup/' . $filename;
// 解压备份文件
$zip = new ZipArchive();
if ($zip->open($path) === TRUE) {
$zip->extractTo(ROOT_PATH . 'backup/');
$zip->close();
}
// 获取数据库配置信息
$config = Config::get('database');
// 数据库名
$database = $config['database'];
// 数据库连接信息
$dsn = "mysql:host={$config['hostname']};dbname={$database};port={$config['hostport']};charset={$config['charset']}";
// 数据库用户名
$username = $config['username'];
// 数据库密码
$password = $config['password'];
// 数据库表前缀
$prefix = $config['prefix'];
// 执行恢复命令
exec("mysql -u{$username} -p{$password} -h{$config['hostname']} -P{$config['hostport']} {$database} < " . ROOT_PATH . "backup/{$filename}");
// 删除解压后的备份文件
unlink(ROOT_PATH . 'backup/' . $filename);
unlink(str_replace('.sql', '', ROOT_PATH . 'backup/' . $filename));
return '恢复成功';
}
}
restore
方法,并传递备份文件名参数,即可恢复数据。