php實現MYSQL的備份與還原

來源:互聯網
上載者:User
  1. class dbBackup {
  2. public $host='localhost'; //資料庫地址
  3. public $user='root'; //登入名稱
  4. public $pwd=''; //密碼
  5. public $database; //資料庫名
  6. public $charset='utf8'; //資料庫連接編碼:mysql_set_charset
  7. }
複製代碼

二、添加資料庫連接function。

  1. /**
  2. * 串連資料庫 ...
  3. */
  4. function db() {
  5. $con = mysql_connect($this->host,$this->user,$this->pwd);
  6. if (!$con){
  7. die('Could not connect');
  8. }
  9. $db_selected = mysql_select_db($this->database, $con);
  10. if (!$db_selected) {
  11. die('Can\'t use select db');
  12. }
  13. mysql_set_charset($this->charset);  //設定編碼
  14. return $con;
  15. }
複製代碼

三、查詢資料庫表集合

  1. /**
  2. * 表集合 ...
  3. */
  4. function tblist() {
  5. $list=array();
  6. $rs=mysql_query("SHOW TABLES FROM $this->database");
  7. while ($temp=mysql_fetch_row($rs)) {
  8. $list[]=$temp[0];
  9. }
  10. return $list;
  11. }
複製代碼

四、查詢表結構

  1. /**

  2. * 表結構SQL ...
  3. */
  4. function sqlcreate() {
  5. $sql='';
  6. $tb=$this->tblist();
  7. foreach ($tb as $v) {
  8. $rs=mysql_query("SHOW CREATE TABLE $v");
  9. $temp=mysql_fetch_row($rs);
  10. $sql.="-- 表的結構:{$temp[0]} --\r\n";
  11. $sql.="{$temp[1]}";
  12. $sql.=";-- --\r\n\r\n";
  13. }

  14. return $sql;

  15. }
複製代碼

註:$sql.=";-- --\r\n\r\n"; 每句SQL後面必須加上分號(;)分割,MYSQL匯入才能識別。-- -- 是程式對SQL語句分割的標識,可以自訂但必須是備註陳述式,否則影響SQL語句。\r\n無實際意義用於文本美觀。

五、INSERT INTO語句

  1. /**
  2. * 資料插入SQL ...
  3. */
  4. function sqlinsert() {
  5. $sql='';
  6. $tb=$this->tblist();
  7. foreach ($tb as $v) {
  8. $rs=mysql_query("SELECT * FROM $v");
  9. if (!mysql_num_rows($rs)) {//無資料返回
  10. continue;
  11. }
  12. $sql.="-- 表的資料:$v --\r\n";
  13. $sql.="INSERT INTO `$v` VALUES\r\n";
  14. while ($temp=mysql_fetch_row($rs)) {
  15. $sql.='(';
  16. foreach ($temp as $v2) {
  17. if ($v2===null) {
  18. $sql.="NULL,";
  19. }
  20. else {
  21. $v2=mysql_real_escape_string($v2);
  22. $sql.="'$v2',";
  23. }
  24. }
  25. $sql=mb_substr($sql, 0, -1);
  26. $sql.="),\r\n";
  27. }
  28. $sql=mb_substr($sql, 0, -3);
  29. $sql.=";-- --\r\n\r\n";
  30. }
  31. return $sql;
  32. }
複製代碼

注意事項: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.=";-- --\r\n\r\n",詳見第四步注

六、備份操作

  1. /**
  2. * 備份 ...
  3. * @param $filename 檔案路徑
  4. */
  5. function beifen($filename) {
  6. $this->db(); //串連資料庫
  7. $sql=$this->sqlcreate();
  8. $sql2=$this->sqlinsert();
  9. $data=$sql.$sql2;
  10. return file_put_contents($filename, $data);
  11. }
複製代碼

七、還原作業

  1. /**
  2. * 還原 ...
  3. * @param $filename 檔案路徑
  4. */
  5. function huanyuan($filename) {
  6. $this->db(); //串連資料庫
  7. //刪除資料表
  8. $list=$this->tblist();
  9. $tb='';
  10. foreach ($list as $v) {
  11. $tb.="`$v`,";
  12. }
  13. $tb=mb_substr($tb, 0, -1);
  14. if ($tb) {
  15. $rs=mysql_query("DROP TABLE $tb");
  16. if ($rs===false) {
  17. return false;
  18. }
  19. }
  20. //執行SQL
  21. $str=file_get_contents($filename);
  22. $arr=explode('-- --', $str);
  23. array_pop($arr);
  24. foreach ($arr as $v) {
  25. $rs=mysql_query($v);
  26. if ($rs===false) {
  27. return false;
  28. }
  29. }
  30. return true;
  31. }
複製代碼

來看下調用樣本。1,備份樣本:

  1. $x=new dbBackup();
  2. $x->database='test';
  3. $rs=$x->beifen('db.sql');
  4. var_dump($rs);
複製代碼

2,還原樣本:

  1. $x=new dbBackup();
  2. $x->database='test';
  3. $rs=$x->huanyuan('db.sql');
  4. var_dump($rs);
複製代碼

完整代碼:

  1. /**

  2. * php實現mysql備份與還原
  3. * 整理 程式員之家 bbs.it-home.org
  4. */
  5. class dbBackup {
  6. public $host='localhost'; //資料庫地址
  7. public $user='root'; //登入名稱
  8. public $pwd=''; //密碼
  9. public $database; //資料庫名
  10. public $charset='utf8'; //資料庫連接編碼:mysql_set_charset
  11. /**
  12. * 備份 ...
  13. * @param $filename 檔案路徑
  14. */
  15. function beifen($filename) {
  16. $this->db(); //串連資料庫
  17. $sql=$this->sqlcreate();
  18. $sql2=$this->sqlinsert();
  19. $data=$sql.$sql2;
  20. return file_put_contents($filename, $data);
  21. }
  22. /**
  23. * 還原 ...
  24. * @param $filename 檔案路徑
  25. */
  26. function huanyuan($filename) {
  27. $this->db(); //串連資料庫
  28. //刪除資料表
  29. $list=$this->tblist();
  30. $tb='';
  31. foreach ($list as $v) {
  32. $tb.="`$v`,";
  33. }
  34. $tb=mb_substr($tb, 0, -1);
  35. if ($tb) {
  36. $rs=mysql_query("DROP TABLE $tb");
  37. if ($rs===false) {
  38. return false;
  39. }
  40. }
  41. //執行SQL
  42. $str=file_get_contents($filename);
  43. $arr=explode('-- --', $str);
  44. array_pop($arr);
  45. foreach ($arr as $v) {
  46. $rs=mysql_query($v);
  47. if ($rs===false) {
  48. return false;
  49. }
  50. }
  51. return true;
  52. }
  53. /**
  54. * 串連資料庫 ...
  55. */
  56. function db() {
  57. $con = mysql_connect($this->host,$this->user,$this->pwd);
  58. if (!$con){
  59. die('Could not connect');
  60. }
  61. $db_selected = mysql_select_db($this->database, $con);
  62. if (!$db_selected) {
  63. die('Can\'t use select db');
  64. }
  65. mysql_set_charset($this->charset); //設定編碼
  66. return $con;
  67. }
  68. /**
  69. * 表集合 ...
  70. */
  71. function tblist() {
  72. $list=array();
  73. $rs=mysql_query("SHOW TABLES FROM $this->database");
  74. while ($temp=mysql_fetch_row($rs)) {
  75. $list[]=$temp[0];
  76. }
  77. return $list;
  78. }
  79. /**
  80. * 表結構SQL ...
  81. */
  82. function sqlcreate() {
  83. $sql='';
  84. $tb=$this->tblist();
  85. foreach ($tb as $v) {
  86. $rs=mysql_query("SHOW CREATE TABLE $v");
  87. $temp=mysql_fetch_row($rs);
  88. $sql.="-- 表的結構:{$temp[0]} --\r\n";
  89. $sql.="{$temp[1]}";
  90. $sql.=";-- --\r\n\r\n";
  91. }

  92. return $sql;

  93. }
  94. /**
  95. * 資料插入SQL ...
  96. */
  97. function sqlinsert() {
  98. $sql='';
  99. $tb=$this->tblist();
  100. foreach ($tb as $v) {
  101. $rs=mysql_query("SELECT * FROM $v");
  102. if (!mysql_num_rows($rs)) {//無資料返回
  103. continue;
  104. }
  105. $sql.="-- 表的資料:$v --\r\n";
  106. $sql.="INSERT INTO `$v` VALUES\r\n";
  107. while ($temp=mysql_fetch_row($rs)) {
  108. $sql.='(';
  109. foreach ($temp as $v2) {
  110. if ($v2===null) {
  111. $sql.="NULL,";
  112. }
  113. else {
  114. $v2=mysql_real_escape_string($v2);
  115. $sql.="'$v2',";
  116. }
  117. }
  118. $sql=mb_substr($sql, 0, -1);
  119. $sql.="),\r\n";
  120. }
  121. $sql=mb_substr($sql, 0, -3);
  122. $sql.=";-- --\r\n\r\n";
  123. }
  124. return $sql;
  125. }
  126. }

  127. //備份

  128. //$x=new dbBackup();
  129. //$x->database='test';
  130. //$rs=$x->beifen('db.sql');
  131. //var_dump($rs);

  132. //還原

  133. //$x=new dbBackup();
  134. //$x->database='test';
  135. //$rs=$x->huanyuan('db.sql');
  136. //var_dump($rs);
  137. ?>

複製代碼您可能感興趣的文章:phpDatabase Backup類 分享一個不錯的phpDatabase Backup類php完整備份資料庫與備份資料庫中指定表的類php mysqlDatabase Backup類及調用方法php實現mysql的備份與還原執行個體代碼php mysql備份的代碼(xml應用)php資料備份:單表備份 整表備份 匯入資料庫
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.