详解MYSQL的备份还原(PHP实现)_MySQL
bitsCN.com
手把手教你实现MYSQL的备份还原
示例代码用我比较熟悉的PHP,当然你看完并理解了其中的思路,相信你也可以快速地用你熟悉的语言自己写出来。
一、新建dbBackup类,设置默认参数。
class dbBackup {
public $host='localhost'; //数据库地址
public $user='root'; //登录名
public $pwd=''; //密码
public $database; //数据库名
public $charset='utf8'; //数据库连接编码:mysql_set_charset
}
二、添加数据库连接function。
/**
* 连接数据库 ...
*/
function db() {
$con = mysql_connect($this->host,$this->user,$this->pwd);
if (!$con){
die('Could not connect');
}
$db_selected = mysql_select_db($this->database, $con);
if (!$db_selected) {
die('Can/'t use select db');
}
mysql_set_charset($this->charset); //设置编码
return $con;
}
三、查询数据库表集合
/**
* 表集合 ...
*/
function tblist() {
$list=array();
$rs=mysql_query("SHOW TABLES FROM $this->database");
while ($temp=mysql_fetch_row($rs)) {
$list[]=$temp[0];
}
return $list;
}
四、查询表结构
/**
* 表结构SQL ...
*/
function sqlcreate() {
$sql='';
$tb=$this->tblist();
foreach ($tb as $v) {
$rs=mysql_query("SHOW CREATE TABLE $v");
$temp=mysql_fetch_row($rs);
$sql.="-- 表的结构:{$temp[0]} --/r/n";
$sql.="{$temp[1]}";
$sql.=";--
}
return $sql;
}
注:$sql.=";--
五、INSERT INTO语句
/**
* 数据插入SQL ...
*/
function sqlinsert() {
$sql='';
$tb=$this->tblist();
foreach ($tb as $v) {
$rs=mysql_query("SELECT * FROM $v");
if (!mysql_num_rows($rs)) {//无数据返回
continue;
}
$sql.="-- 表的数据:$v --/r/n";
$sql.="INSERT INTO `$v` VALUES/r/n";
while ($temp=mysql_fetch_row($rs)) {
$sql.='(';
foreach ($temp as $v2) {
if ($v2===null) {
$sql.="NULL,";
}
else {
$v2=mysql_real_escape_string($v2);
$sql.="'$v2',";
}
}
$sql=mb_substr($sql, 0, -1);
$sql.="),/r/n";
}
$sql=mb_substr($sql, 0, -3);
$sql.=";--
}
return $sql;
}
注:
1.无数据返回时必须跳出本次循环,避免生成多余代码
2.当字段值为(NULL)时,插入字符为(NULL)而不是('NULL'),没有单引号。3.$v2=mysql_real_escape_string($v2),这是必要的转义
4.mb_substr($sql, 0, -1)、mb_substr($sql, 0, -3),必须去除最后一个逗号(,) 否则SQL语句出错5.$sql.=";--
六、备份操作
/**
* 备份 ...
* @param $filename 文件路径
*/
function beifen($filename) {
$this->db(); //连接数据库
$sql=$this->sqlcreate();
$sql2=$this->sqlinsert();
$data=$sql.$sql2;
return file_put_contents($filename, $data);
}
七、还原操作
/**
* 还原 ...
* @param $filename 文件路径
*/
function huanyuan($filename) {
$this->db(); //连接数据库
//删除数据表
$list=$this->tblist();
$tb='';
foreach ($list as $v) {
$tb.="`$v`,";
}
$tb=mb_substr($tb, 0, -1);
if ($tb) {
$rs=mysql_query("DROP TABLE $tb");
if ($rs===false) {
return false;
}
}
//执行SQL
$str=file_get_contents($filename);
$arr=explode('--
array_pop($arr);
foreach ($arr as $v) {
$rs=mysql_query($v);
if ($rs===false) {
return false;
}
}
return true;
}
备份示例:
$x=new dbBackup();
$x->database='test';
$rs=$x->beifen('db.sql');
var_dump($rs);
还原示例:
$x=new dbBackup();
$x->database='test';
$rs=$x->huanyuan('db.sql');
var_dump($rs);
完整代码:
class dbBackup {
public $host='localhost'; //数据库地址
public $user='root'; //登录名
public $pwd=''; //密码
public $database; //数据库名
public $charset='utf8'; //数据库连接编码:mysql_set_charset
/**
* 备份 ...
* @param $filename 文件路径
*/
function beifen($filename) {
$this->db(); //连接数据库
$sql=$this->sqlcreate();
$sql2=$this->sqlinsert();
$data=$sql.$sql2;
return file_put_contents($filename, $data);
}
/**
* 还原 ...
* @param $filename 文件路径
*/
function huanyuan($filename) {
$this->db(); //连接数据库
//删除数据表
$list=$this->tblist();
$tb='';
foreach ($list as $v) {
$tb.="`$v`,";
}
$tb=mb_substr($tb, 0, -1);
if ($tb) {
$rs=mysql_query("DROP TABLE $tb");
if ($rs===false) {
return false;
}
}
//执行SQL
$str=file_get_contents($filename);
$arr=explode('--
array_pop($arr);
foreach ($arr as $v) {
$rs=mysql_query($v);
if ($rs===false) {
return false;
}
}
return true;
}
/**
* 连接数据库 ...
*/
function db() {
$con = mysql_connect($this->host,$this->user,$this->pwd);
if (!$con){
die('Could not connect');
}
$db_selected = mysql_select_db($this->database, $con);
if (!$db_selected) {
die('Can/'t use select db');
}
mysql_set_charset($this->charset); //设置编码
return $con;
}
/**
* 表集合 ...
*/
function tblist() {
$list=array();
$rs=mysql_query("SHOW TABLES FROM $this->database");
while ($temp=mysql_fetch_row($rs)) {
$list[]=$temp[0];
}
return $list;
}
/**
* 表结构SQL ...
*/
function sqlcreate() {
$sql='';
$tb=$this->tblist();
foreach ($tb as $v) {
$rs=mysql_query("SHOW CREATE TABLE $v");
$temp=mysql_fetch_row($rs);
$sql.="-- 表的结构:{$temp[0]} --/r/n";
$sql.="{$temp[1]}";
$sql.=";--
}
return $sql;
}
/**
* 数据插入SQL ...
*/
function sqlinsert() {
$sql='';
$tb=$this->tblist();
foreach ($tb as $v) {
$rs=mysql_query("SELECT * FROM $v");
if (!mysql_num_rows($rs)) {//无数据返回
continue;
}
$sql.="-- 表的数据:$v --/r/n";
$sql.="INSERT INTO `$v` VALUES/r/n";
while ($temp=mysql_fetch_row($rs)) {
$sql.='(';
foreach ($temp as $v2) {
if ($v2===null) {
$sql.="NULL,";
}
else {
$v2=mysql_real_escape_string($v2);
$sql.="'$v2',";
}
}
$sql=mb_substr($sql, 0, -1);
$sql.="),/r/n";
}
$sql=mb_substr($sql, 0, -3);
$sql.=";--
}
return $sql;
}
}
//备份
//$x=new dbBackup();
//$x->database='test';
//$rs=$x->beifen('db.sql');
//var_dump($rs);
//还原
//$x=new dbBackup();
//$x->database='test';
//$rs=$x->huanyuan('db.sql');
//var_dump($rs);
bitsCN.com

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cara mencipta simulator baharu dalam Simulator Kilat - Cara mencipta simulator baharu dalam Simulator Kilat

Apakah perbezaan antara versi pembangun dan versi awam iOS?

Cara membuat dokumen Word baharu pada komputer anda

Selesaikan masalah bahawa tiada pilihan 'Baru' pada klik kanan Win10

Kaedah terperinci untuk membuat laporan bulanan baharu pada WeChat Perusahaan

Bagaimana untuk mencipta versi kelabu volum rentang baharu pada cakera Win10

Panduan langkah demi langkah untuk membuat folder pada telefon mudah alih Realme
