首頁 >後端開發 >php教程 >備份MySQL的php類

備份MySQL的php類

WBOY
WBOY原創
2016-07-25 08:45:08851瀏覽
  1. define('MSB_VERSION','1.0.0');
  2. define('MSB_NL',"rn" ) ;
  3. define('MSB_STRING', 0);
  4. define('MSB_DOWNLOAD',1);
  5. define('MSB_SAVE',2);
  6. define('__SEP__', " /*sep*/" );
  7. set_time_limit( 600 );
  8. class MySQL_Backup {
  9. var $server = 'localhost';
  10. var $port = 3306; > var $username = 'root';
  11. var $password = '';
  12. var $database = '';
  13. var $link_id = -1;
  14. var $connected = false;
  15. var $tables = array();
  16. var $drop_tables = true;
  17. var $struct_only = false;
  18. var $comments = true;
  19. var $backup_dir = '';
  20. var $fname_format = 'd_m_y__H_i_s';
  21. var $error = '';
  22. var $complete_inserts = false;
  23. var $inserts_block = 200; MSB_STRING, $fname = '', $compress = false) {
  24. if ( !( $sql = $this->_Retrieve() ) ) {
  25. return false;
  26. }
  27. if ( $ $任務== MSB_SAVE ) {
  28. if (empty($fname)) {
  29. $fname = $this->backup_dir;
  30. $fname .= date($this->fname_format);
  31. $fname .= ($compress ? '.sql.gz' : '.sql');
  32. }
  33. return $this->_SaveToFile($fname, $sql, $compress);
  34. } elseif ($task == MSB_DOWNLOAD) {
  35. if (empty( $fname ) ) {
  36. $fname = date($this->fname_format);
  37. $fname .= ($compress ? ' .sql.gz' : '.sql ');
  38. }
  39. return $this->_DownloadFile($fname, $sql, $compress);
  40. } else {
  41. return $sql;
  42. }
  43. }
  44. function _Connect() {
  45. $value = false;
  46. if (!$this->connected) {
  47. $host = $this->server-server 。 -> ;link_id) {
  48. if (empty($this->database)) {
  49. $value = true;
  50. } elseif ($this->link_id !== -1) {
  51. $value = mysql_select_db($this->database, $this->link_id);
  52. } else {
  53. $value = mysql_select_db($this->database);
  54. }
  55. }
  56. }
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }
  63. }
  64. }
  65. }
  66. if (!$value) {
  67. $this->error = mysql_error();
  68. }
  69. return $value;
  70. }
  71. function _Query($ ) {
  72. function _Query($ ) {
  73. if ($this->link_id !== -1) {
  74. $result = mysql_query($sql, $this->link_id);
  75. } else {
  76. $result = mysql_query($sql) ;
  77. }
  78. if (!$result) {
  79. $this->error = mysql_error();
  80. }
  81. return $result;
  82. }
  83. 函數函數_GetTables() {
  84. $value = array();
  85. if ( !( $result = $this->_Query('SHOW TABLES') ) ) {
  86. return false;
  87. }
  88. while ( $row = mysql_fetch_row( $result ) ) {
  89. if (empty( $this->tables) || in_array( $row[0], $this->tables ) ) {
  90. $value[] = $row[0];
  91. }
  92. }
  93. if (!sizeof($value) ) {
  94. $this->error = '在資料庫中找不到表格。 ( $table ) {
  95. $value = '';
  96. $this->_Query( '鎖定表' . $table . ' WRITE' );
  97. if ( $this->comments ) {
  98. $value .= '#' 。 ;
  99. }
  100. if ( $this->drop_tables ) {
  101. $value .= '如果存在則刪除表格`' 。 __九月__ 。 }
  102. $row = mysql_fetch_assoc($result);
  103. $value .= str_replace("n", MSB_NL, $row['建立表']) 。 ';' __SEP__;
  104. $value .= MSB_NL 。 ;
  105. $value .= '# 轉儲表`' 的資料。 $value .= $this->_GetInserts($table);
  106. }
  107. $value .= MSB_NL 。 MSB_NL;
  108. $this->_Query('解鎖表');
  109. return $ value ;
  110. }
  111. function _GetInserts($table) {
  112. $value = '' ;
  113. if (!($result = $this->_Query('SELECT * FROM ' . $ table))) {
  114. return false;
  115. }
  116. if ( $this->; Complete_inserts ) {
  117. while ($row = mysql_fetch_row($result)) {
  118. $values = ' ';
  119. foreach ($row as $data) {
  120. $values .= ''' 。 加斜線($data) 。 $values, 0, -2);
  121. $value .= '插入' 。 MSB_NL;
  122. }
  123. } else {
  124. $blocks_counter = 0;
  125. $blocks = array();
  126. while ($row = mysql_fetch_row($result) )) {
  127. $ values = array();
  128. foreach ($row as $data) {
  129. $values[] = ''' .加上斜線($data) 。 ''';
  130. }
  131. $ $ $ blocks[] = '(' . implode( ',', $values ) . ')';
  132. if ( $blocks_counter ;inserts_block ) {
  133. $blocks_counter ;
  134. ;
  135. } else {
  136. $value .= '插入' . $表。 MSB_NL;
  137. $blocks = array();
  138. $blocks_counter = 0;
  139. }
  140. }
  141. if ( count( $blocks ) ) {
  142. $value .= '插入' 。 MSB_NL;
  143. }
  144. }
  145. return $value;
  146. }
  147. function _Retrieve() {
  148. $value = '';
  149. if (!$this- >_Connect()) {
  150. return false;
  151. }
  152. if ($this->comments) {
  153. $value .= '#' 。 MSB_NL;
  154. $value .= '# MySQL 資料庫轉儲' . MSB_NL;
  155. $value .= '# 由 MySQL_Backup 類別創建,版本。 '。 $this-> 伺服器。 value .= '# MySQL 版本: ' . mysql_get_server_info() 。 MSB_NL;
  156. if (!empty($this->database)) {
  157. $value .= '#' . phpversion() 。 MSB_NL;
  158. $value .= '# 資料庫: `' . $this->資料庫。 '``'。 ->_GetTables())) {
  159. return false;
  160. }
  161. foreach ($tables as $table) {
  162. if (!($table_dump = $this->_DumpTable($table)) ) {
  163. $this->error = mysql_error();
  164. return false;
  165. }
  166. $ value .= $table_dump;
  167. }
  168. return $value;
  169. }
  170. }
  171. return $value;
  172. }
  173. }
  174. return $value;
  175. }
  176. function _SaveToFile($fname, $sql, $compress) {
  177. if ($compress) {
  178. if (!($zf = gzopen($fname, 'w9'))) {
  179. $this->error = '無法輸出建立檔案。 ';
  180. return false;
  181. }
  182. gzwrite($zf, $sql);
  183. gzclose($zf);
  184. } else {
  185. if (!($f = fopen($fname, 'w'))) {
  186. $this->error = '無法建立輸出檔。 ';
  187. return false;
  188. }
  189. fwrite($f, $sql);
  190. fclose($ f);
  191. }
  192. 回傳true;
  193. }
  194. function _DownloadFile($fname, $sql, $compress) {
  195. header('Content-disposition: filename=' . $fname);
  196. header('Content-type: application/octetstream ');
  197. header('Pragma: no-cache');
  198. header('過渡時間: 0');
  199. echo ($compress ? gzencode($sql) : $sql);
  200. return true;
  201. }
  202. }
  203. ?>
複製程式碼

MySQL、PHP


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn