如何用PHP来实现MySQL备份?

Jun 07, 2016 pm 04:14 PM
mysql php 主要 導入 バックアップ 成し遂げる 記事

以下的文章主要介绍的是用PHP来实现MySQL备份的实际操作流程,我们大家都知道用PHP来实现MySQL备份可以说在实际应用频率还是比较大的,以下的文章主要描述的是用PHP来实现MySQL备份的实际操作流程。 看了下phpMyadmin和Discuz!的代码,呵呵,于是偷抄了Disc

以下的文章主要介绍的是用PHP来实现MySQL备份的实际操作流程,我们大家都知道用PHP来实现MySQL备份可以说在实际应用频率还是比较大的,以下的文章主要描述的是用PHP来实现MySQL备份的实际操作流程。

看了下phpMyadmin和Discuz!的代码,呵呵,于是偷抄了Discuz!的代码,形成了如下备份数据库的方法。(在这里感谢Discuz!的开发者)

备份数据库有两种方式,一种是只备份数据库的结构,一种把是结构和所有的数据都备份出来,当然是第二种方法好啦,不过我为了考虑可能的需求就都作啦。

备份数据库结构

函数名称:table2sql()

函数功能:把表的结构转换成为SQL

函数参数:$table: 要进行提取的表名

返 回 值:返回提取后的结果,SQL集合

函数作者:heiyeluren

<p></p><ol class="dp-xml">
<li><span>function table2sql($table)   </span></li>
<li class="alt"><span>{  </span></li>
<li><span>global $db;  </span></li>
<li class="alt">
<span>$</span><span class="attribute">tabledump</span><span> = </span><span class="attribute-value">"DROP TABLE IF EXISTS $table;\n"</span><span>;  </span>
</li>
<li>
<span>$</span><span class="attribute">createtable</span><span> = $db-</span><span class="tag">></span><span>query("SHOW CREATE TABLE $table");  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute">create</span><span> = $db-</span><span class="tag">></span><span>fetch_row($createtable);  </span>
</li>
<li>
<span>$tabledump </span><span class="attribute">.</span><span>= $create[1].";\n\n";   </span>
</li>
<li class="alt"><span>return $tabledump;  </span></li>
<li><span>}  </span></li>
</ol>
ログイン後にコピー

备份数据库结构和所有数据/*

函数名称:data2sql()

函数功能:把表的结构和数据转换成为SQL

函数参数:$table: 要进行提取的表名

返 回 值:返回提取后的结果,SQL集合

函数作者:heiyeluren

<ol class="dp-xml">
<li class="alt"><span><span>function data2sql($table)   </span></span></li>
<li><span>{  </span></li>
<li class="alt"><span>global $db;  </span></li>
<li>
<span>$</span><span class="attribute">tabledump</span><span> = </span><span class="attribute-value">"DROP TABLE IF EXISTS $table;\n"</span><span>;  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute">createtable</span><span> = $db-</span><span class="tag">></span><span>query("SHOW CREATE TABLE $table");  </span>
</li>
<li>
<span>$</span><span class="attribute">create</span><span> = $db-</span><span class="tag">></span><span>fetch_row($createtable);  </span>
</li>
<li class="alt">
<span>$tabledump </span><span class="attribute">.</span><span>= $create[1].";\n\n";  </span>
</li>
<li>
<span>$</span><span class="attribute">rows</span><span> = $db-</span><span class="tag">></span><span>query("SELECT * FROM $table");  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute">numfields</span><span> = $db-</span><span class="tag">></span><span>num_fields($rows);  </span>
</li>
<li>
<span>$</span><span class="attribute">numrows</span><span> = $db-</span><span class="tag">></span><span>num_rows($rows);  </span>
</li>
<li class="alt">
<span>while ($</span><span class="attribute">row</span><span> = $db-</span><span class="tag">></span><span>fetch_row($rows))  </span>
</li>
<li><span>{  </span></li>
<li class="alt">
<span>$</span><span class="attribute">comma</span><span> = </span><span class="attribute-value">""</span><span>;  </span>
</li>
<li>
<span>$tabledump </span><span class="attribute">.</span><span>= </span><span class="attribute-value">"INSERT INTO $table VALUES("</span><span>;  </span>
</li>
<li class="alt">
<span>for($</span><span class="attribute">i</span><span> = </span><span class="attribute-value">0</span><span>; $i </span><span class="tag"><span> $numfields; $i++)   </span></span>
</li>
<li><span>{  </span></li>
<li class="alt">
<span>$tabledump </span><span class="attribute">.</span><span>= $comma."'".</span>MySQL<span>_escape_string($row[$i])."'";  </span>
</li>
<li>
<span>$</span><span class="attribute">comma</span><span> = </span><span class="attribute-value">","</span><span>;  </span>
</li>
<li class="alt"><span>}  </span></li>
<li>
<span>$tabledump </span><span class="attribute">.</span><span>= </span><span class="attribute-value">");\n"</span><span>;  </span>
</li>
<li class="alt"><span>}  </span></li>
<li>
<span>$tabledump </span><span class="attribute">.</span><span>= </span><span class="attribute-value">"\n"</span><span>;  </span>
</li>
<li class="alt"><span>return $tabledump;  </span></li>
<li><span>}  </span></li>
</ol>
ログイン後にコピー

具体实现MySQL操作

好,我们既然把代码都写出来了,那么我们如何在具体的程序种去实现MySQL备份呢,我们看下面的代码。

备份数据库

注意:我们一下的数据库操作采用了phplib的DB类

定义要保存的数据表、前缀、保存到何处

$tables = array('us_sort', 'us_download', 'us_article', 'us_guestbook'); //定义要保存的数据表,一个数组

$prefix = 'us_';// 要保存的.sql文件的前缀

$saveto = 'server'; // 要保存到什么地方,是本地还是服务器上,默认是服务器

$back_mode = 'all'; // 要保存的方式,是全部备份还是只保存数据库结构

$admin = 'heiyeluren'; //管理员名称

$admin_email = 'heiyeluren@163.com';// 管理员邮箱

// 定义数据保存的文件名

$local_filename = $prefix.date('Ymd_His').'.sql"';

if (!$filename) { $filename = $db_backup_path . $prefix . date('Ymd_His_'). create_check_code(4) . ".sql"; }

$filename = $prefix.date(Ymd_His). create_check_ code(6).".sql";// 保存在服务器上的文件名

// 注意后面的create_check_code()函数,这是一个生成随机码的函数,详细可以参考:

// http://blog.csdn.net/heiyeshuwu/archive/2005/01/26/268446.aspx

// 获取数据库结构和数据内容

<ol class="dp-xml">
<li class="alt"><span><span>foreach($tables as $table)   </span></span></li>
<li><span>{  </span></li>
<li class="alt">
<span>if ($</span><span class="attribute">back_mode</span><span> == 'all') { $sqldump </span><span class="attribute">.</span><span>= </span><span class="attribute-value">data2sql</span><span>($table); }  </span>
</li>
<li>
<span>if ($</span><span class="attribute">back_mode</span><span> == 'table') { $sqldump </span><span class="attribute">.</span><span>= </span><span class="attribute-value">table2sql</span><span>($table); }  </span>
</li>
<li class="alt"><span>} </span></li>
</ol>
ログイン後にコピー

// 如果数据内容不是空就开始保存

if(trim($sqldump))

{

// 写入开头信息

$sqldump =

"# --------------------------------------------------------\n".

"# 数据表备份\n".

"#\n".

"# 服务器: $db->Host\n".

"# 数据库:$db->Database\n".

"# 备份编号: ". create_sess_id() ."\n". // 这里有一个生成session id的函数

"# 备份时间: ".time_to_date('',6)."\n". // 这里就是获取当前时间的函数

"#\n".

"# 管理员:$admin ($admin_email)\n". // 管理员的用户名和邮箱地址

"# $copyright\n".

"# --------------------------------------------------------\n\n\n".

$sqldump;

保存到本地

<ol class="dp-xml">
<li class="alt"><span><span>if($</span><span class="attribute">saveto</span><span> == "local")   </span></span></li>
<li><span>{  </span></li>
<li class="alt"><span>ob_end_clean();  </span></li>
<li><span>header('Content-Encoding: none');  </span></li>
<li class="alt"><span>header('Content-Type: '.(strpos($HTTP_SERVER_VARS['HTTP_USER_AGENT'], 'MSIE') ? <p></p>'application/octetstream' : 'application/octet-stream'));  </span></li>
<li>
<span>header('Content-Disposition: '.(strpos($HTTP_SERVER_VARS['HTTP_USER_AGENT'], 'MSIE') ? <p></p>'inline; ' : 'attachment; ').'</span><span class="attribute">filename</span><span>="'.$local_filename);  </span>
</li>
<li class="alt"><span>header('Content-Length: '.strlen($sqldump));  </span></li>
<li><span>header('Pragma: no-cache');  </span></li>
<li class="alt"><span>header('Expires: 0');  </span></li>
<li><span>echo $sqldump;  </span></li>
<li class="alt"><span>}  </span></li>
</ol>
ログイン後にコピー

保存到本地结束

保存在服务器

<ol class="dp-xml">
<li class="alt"><span><span>if($</span><span class="attribute">saveto</span><span> == "server")   </span></span></li>
<li><span>{  </span></li>
<li class="alt"><span>if($filename != "")   </span></li>
<li><span>{  </span></li>
<li class="alt">
<span>@$</span><span class="attribute">fp</span><span> = </span><span class="attribute-value">fopen</span><span>($filename, "w+");  </span>
</li>
<li><span>if ($fp)  </span></li>
<li class="alt"><span>{  </span></li>
<li><span>@flock($fp, 3);  </span></li>
<li class="alt"><span>if(@!fwrite($fp, $sqldump))   </span></li>
<li><span>{  </span></li>
<li class="alt"><span>@fclose($fp);  </span></li>
</ol>
ログイン後にコピー

exit_msg("数据文件无法保存到服务器,请检查目录属性你是否有写的权限。");

}

else

{

exit_msg("数据成功备份至服务器 $filename 中。");

}

}

else

{

exit_msg("无法打开你指定的目录". $filename .",请确定该目录是否存在,或者是否有相应权限");

}

}

else

{

exit_msg("您没有输入备份文件名,请返回修改。");

}

}

// 保存到服务器结束

}

else

{

exit_msg("数据表没有任何内容");

}

备份数据库结束

以上的相关内容就是对PHP实现MySQL备份的介绍,望你能有所收获。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPの未来:適応と革新 PHPの未来:適応と革新 Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

PHP:それは死にかけていますか、それとも単に適応していますか? PHP:それは死にかけていますか、それとも単に適応していますか? Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

See all articles