詳解MYSQL的備份還原(PHP實現)
手把手教你實現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;
}
四、查詢表結構
複製程式碼 程式碼如下:
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]} --rn";
$sql.="{$temp[1]}";
$sql.=";--
}
return $sql;
}
注:$sql.=";--
五、INSERT INTO語句
複製程式碼 程式碼如下:
function sqlinsert() {
$sql='';
$tb=$this->tblist();
foreach ($tb as $v) {
$rs=mysql_query("SELECT * FROM $v");
if (!mysql_num_rows($rs)) {//無資料返回
continue;
}
$sql.="-- 表的資料:$v --rn";
$sql.="INSERT INTO `$v` VALUESrn";
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.="),rn";
}
$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.=";--
六、備份操作
複製程式碼 程式碼如下:
function beifen($filename) {
$this->db(); //連線資料庫
$sql=$this->sqlcreate();
$sql2=$this->sqlinsert();
$data=$sql.$sql2;
return file_put_contents($filename, $data);
}
七、還原操作
複製程式碼 程式碼如下:
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
function beifen($filename) {
$this->db(); //連線資料庫
$sql=$this->sqlcreate();
$sql2=$this->sqlinsert();
$data=$sql.$sql2;
return file_put_contents($filename, $data);
}
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;
}
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]} --rn";
$sql.="{$temp[1]}";
$sql.=";--
}
return $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 --rn";
$sql.="INSERT INTO `$v` VALUESrn";
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.="),rn";
}
$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);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3705/viewspace-2804058/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL的資料備份與還原MySql
- Oracle資料庫備份還原詳解XKUSOracle資料庫
- 雲伺服器mysql備份與還原資料庫命令詳解伺服器MySql資料庫
- mysql資料庫-備份與還原實操MySql資料庫
- Mysql資料備份和還原MySql
- 「MySQL」資料庫備份和還原MySql資料庫
- 詳解SQL Server 2012資料庫備份與還原的教程SQLServer資料庫
- 圖解MySQL邏輯備份的實現流程圖解MySql
- Mysql備份和還原資料庫-mysqldumpMySql資料庫
- 陪玩系統原始碼中mysql資料庫備份還原的實現程式碼原始碼MySql資料庫
- java mysql 資料庫備份和還原操作JavaMySql資料庫
- 備份還原剪下板
- (7) MySQL資料庫備份詳解MySql資料庫
- Centos-Mysql複製備份還原資料庫CentOSMySql資料庫
- mysql多執行緒備份與還原工具mydumperMySql執行緒
- 實現MySQL資料庫的實時備份MySql資料庫
- debian9安裝指定版本gitlab,並實現備份還原Gitlab
- Ubuntu Desktop: 備份與還原Ubuntu
- mysqlbinlog命令詳解 Part 9 MySQL備份策略MySql
- sqlserver資料庫的備份還原SQLServer資料庫
- 基於percona xtrabackup 2.4.14的增量備份恢復還原mysql 5.6MySql
- MySQL資料庫的備份還原方案——不同伺服器間MySql資料庫伺服器
- golang實現mysql資料庫備份GolangMySql資料庫
- win10備份檔案後怎麼還原_win10備份檔案還原的方法Win10
- Ghost備份及還原系統
- 【SQL Server】本地備份和還原SQLServer
- 詳解MySQL資料備份之mysqldump使用方法MySql
- oracle 12c中CDB和PDB的備份還原實驗Oracle
- win10怎麼備份還原win8_win10備份還原win8的操作步驟Win10
- linux實現mysql資料庫每天自動備份定時備份LinuxMySql資料庫
- oracle 還原 .dmp 格式備份檔案Oracle
- sqlserver資料庫備份,還原操作SQLServer資料庫
- elasticsearch備份和還原(基於hdfs)Elasticsearch
- 「Oracle」Oracle 資料庫備份還原Oracle資料庫
- 【Mongodb】資料庫備份與還原MongoDB資料庫
- 達夢資料庫的備份與還原資料庫
- 怎麼備份分割槽表?還原備份表怎麼操作?
- win10驅動如何備份還原_win10驅動備份和還原怎麼操作Win10