在ThinkPHP框架中,可以使用Db
类的export
方法进行数据库备份,使用import
方法进行数据库恢复。
备份数据库的方法如下:
use think\Db;
// 备份数据库
Db::execute('SET sql_mode=\'\'');
$result = Db::query('SHOW TABLES');
$tables = array_column($result, 'Tables_in_' . env('database.database'));
foreach ($tables as $table) {
$sql = Db::query('SHOW CREATE TABLE ' . $table);
$sqlStr = "/* 数据库表结构 {$table} */\n";
$sqlStr .= $sql[0]['Create Table'] . ";\n\n";
$sqlStr .= "/* 数据库表数据 {$table} */\n";
$list = Db::query('SELECT * FROM ' . $table);
if (!empty($list)) {
foreach ($list as $item) {
$sqlStr .= "INSERT INTO {$table} VALUES (";
foreach ($item as $key => $value) {
$sqlStr .= "'" . addslashes($value) . "',";
}
$sqlStr = rtrim($sqlStr, ',');
$sqlStr .= ");\n";
}
}
$sqlStr .= "\n\n";
file_put_contents('./backup/' . date('YmdHis') . '_' . $table . '.sql', $sqlStr, FILE_APPEND);
}
恢复数据库的方法如下:
use think\Db;
// 恢复数据库
$files = glob('./backup/*.sql');
foreach ($files as $file) {
$sqlStr = file_get_contents($file);
$sqlArr = explode(";\n", $sqlStr);
foreach ($sqlArr as $sql) {
if (trim($sql) != '') {
Db::execute($sql);
}
}
}
需要注意的是,备份和恢复数据库都需要对数据库具有足够的权限。同时,为了保证数据安全性,备份和恢复操作应该在具有足够权限的人员监督下进行。