詳解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
- mysql備份還原-基於binlog的增量備份還原MySql
- 轉享:使用Xtrabackup實現MySQL備份和還原。MySql
- mysql 備份與還原MySql
- MySQL備份和還原MySql
- 透過innobackupex實現對MySQL的增量備份與還原MySql
- MySQL之備份和還原MySql
- Oracle資料庫備份還原詳解XKUSOracle資料庫
- MySQL的資料備份與還原MySql
- 雲伺服器mysql備份與還原資料庫命令詳解伺服器MySql資料庫
- mysql資料庫-備份與還原實操MySql資料庫
- Mysql資料備份和還原MySql
- Linux下MySQL的備份與還原LinuxMySql
- 使用RMAN增量更新備份實現快速還原
- 「MySQL」資料庫備份和還原MySql資料庫
- 【Mysql】innobackupex備份還原單個庫MySql
- MySQL資料庫備份與還原MySql資料庫
- [Mysql]——備份、還原、表的匯入匯出MySql
- Mysql備份和還原資料庫-mysqldumpMySql資料庫
- mysql innobackupex xtrabackup 大資料量 備份 還原MySql大資料
- 利用dump和restore實現Linux的備份和還原RESTLinux
- linux和win下 MySQL的備份與還原LinuxMySql
- 圖解MySQL邏輯備份的實現流程圖解MySql
- 程式設計實現備份和還原資料庫程式設計資料庫
- mysql備份的三種方式詳解MySql
- 陪玩系統原始碼中mysql資料庫備份還原的實現程式碼原始碼MySql資料庫
- java mysql 資料庫備份和還原操作JavaMySql資料庫
- mysql利用binlog增量備份,還原例項MySql
- Xtrabackup2.4.8備份、還原、恢復Mysql5.7.19實操MySql
- mysql多執行緒備份與還原工具mydumperMySql執行緒
- Centos-Mysql複製備份還原資料庫CentOSMySql資料庫
- 使用mysqldump進行mysql資料庫備份還原MySql資料庫
- 詳解SQL Server 2012資料庫備份與還原的教程SQLServer資料庫
- 批處理(bat)實現SQLServer資料庫備份與還原BATSQLServer資料庫
- ORACLE RMAN備份及還原Oracle
- (7) MySQL資料庫備份詳解MySql資料庫
- mysql之 mysqldump 備份恢復詳解MySql
- sqlserver資料庫的備份還原SQLServer資料庫