ホームページ >バックエンド開発 >PHPチュートリアル >Linux php mysql データベース バックアップの実装コード_PHP チュートリアル

Linux php mysql データベース バックアップの実装コード_PHP チュートリアル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-07-21 15:47:24929ブラウズ

しかし、問題があります:
まず、php を実行しているユーザーは、nobody などの Apche ユーザーであり、通常、/usr/local/mysql/data ディレクトリにアクセスする権限がありません。
次に、アクセスできたとしても、 /usr/local/mysql/data ディレクトリ内のファイルをコピーするにはどうすればよいですか? mysql の実行中はアクセスできないため、ユーザー誰も mysql サービスを停止する権限を持ちませんが、これは不可能です。
考えれば考えるほどおかしい、まずはphpでデータベースを操作できないか、ということでphpMyadminとDiscuzを見てみました!コードは、笑、Discuz をコピーしました!このコードは、データベースをバックアップする次のメソッドを形成します。 (Discuz の開発者に感謝します!)

データベースのバックアップには 2 つの方法があり、1 つはデータベースの構造のみをバックアップする方法、もう 1 つは構造とすべてのデータをバックアップする方法です。 2 番目の方法も良いですが、考えられるニーズを考慮するためにこれを実行しました。


/****** データベース構造のバックアップ ******/

/*
関数名: table2sql()
関数関数: テーブル構造をSQLに変換
関数パラメータ: $table: 抽出するテーブル名
戻り値: 抽出された結果を返す、SQL コレクション
関数作成者: heiyeluren
*/

function table2sql($table)
{
global $db;
$tabledump = "DROP TABLE IF EXISTS $table;n"; $db->query("SHOW CREATE TABLE $table");
$create = $db->fetch_row($createtable);
$tabledump .= $create[1].";nn"; $tabledump;
}


/****** データベース構造とすべてのデータをバックアップします ******/
/*
関数名: data2sql()
関数関数: テーブルの構造とデータをSQLに変換
関数パラメータ: $table: 抽出されるテーブル名
戻り値: 抽出した結果、SQL セットを返す
関数作成者: heiyeluren
*/
function data2sql($table)
{
global $db = "DROP TABLE IF EXISTS $table;n" ;
$createtable = $db->query("SHOW CREATE TABLE $table");
$create = $db->fetch_row($createtable);
$tabledump .= $create[1].";nn " ;

$rows = $db->query("SELECT * FROM $table");
$numfields = $db->num_rows($ rows); );
while ($row = $db->fetch_row($rows))
{
$comma = "";
$tabledump .= "INSERT INTO $table VALUES(";
for($i = 0 ; $i < $numfields;
{
$tabledump .= $comma."'".mysql_escape_string($row[$i])."'"; tabledump .= ");n";
$tabledump .= "n";


/****** 特定の実装操作 ******/
さて、コードを書き出しました。それでは、特定のプログラムでバックアップを実装するにはどうすればよいでしょうか。次のコードを見てみましょう。


/* データベースをバックアップします*/
// 注: データベース操作では 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://www.jb51.net/article/17423.htm

// データベース構造とデータ内容を取得します
foreach($tables as $table)
{
if ($back_mode == 'all') { $sqldump .= data2sql( $table); }
if ($back_mode == 'table') { $sqldump .= table2sql($table) }
}

/ / データ内容が空でない場合に保存を開始
if(trim($sqldump) )
{
//開始情報を書き込む
$sqldump =
"# --------------- ------------------ -----------------------n".
"# データテーブルのバックアップn".
"#n".
"# サーバー: $db->Hostn".
"# データベース: $db->Databasen".
"# バックアップ番号: ". create_sess_id() ."n" . // ここにセッション ID を生成する関数があります
"# Backup time: " .time_to_date('',6)."n"。 // ここに現在時刻を取得する関数があります
"#n"。 "# Administrator: $admin ($admin_email)n". // 管理者のユーザー名と電子メール アドレス
"# $copyrightn"
"# ------------------ ----------------------- ------------------nnn"。
$sqldump;

// ローカルに保存
if($saveto == "local")
{
ob_end_clean();
header('Content-Type: '.(strpos($HTTP_SERVER_VARS) ['HTTP_USER_AGENT'], 'MSIE') ? 'application/octetstream' : 'application/octet-stream '));
header('Content-Disposition: '.(strpos($HTTP_SERVER_VARS['HTTP_USER_AGENT']) ') ? 'インライン; ' : '添付ファイル; ').'filename="'.$local_filename) ;
header('Content-Length: '.strlen($sqldump));
header('Pragma: no-cache ');
header('Expires: 0');
echo $sqldump;
// ローカルに保存して終了

// サーバーに保存
if($saveto == "server")
{ ($filename != "")
{
@$fp = fopen($filename, "w+")
if ($fp)
{
@flock($fp, 3); $fp, $sqldump))
{
@fclose($fp);
exit_msg("データ ファイルをサーバーに保存するには、ディレクトリのプロパティを確認して、書き込み権限があるかどうかを確認してください。 ");
}
else
{
exit_msg("データはサーバーに正常にバックアップされました$filename");
}
}
else
{
exit_msg ( "指定したディレクトリ ". $filename を開けません。" ディレクトリが存在するか、対応する権限があることを確認してください"); ");
}
}
// サーバーへの保存の終了
}
else
{
exit_msg("データ テーブルにコンテンツがありません");
}

/* バックアップ データベースの終了 */



笑、基本的にはこれで終わりです。次に、問題の 1 つは、データをデータベースに復元する方法です。これは複雑ではないと思いますが、クライアントからデータを復元する機能を備えていることが最善です。サーバー。



http://www.bkjia.com/PHPjc/319938.html

www.bkjia.com

本当

http://www.bkjia.com/PHPjc/319938.html

技術記事

しかし問題があります。まず、php を実行しているユーザーは apche ユーザー (nobody など) です。次に、アクセスできたとしても、通常、/usr/local/mysql/data ディレクトリにアクセスする権限がありません。 ..

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