php mysql 自動備份

By | November 28, 2013

Phpbuilder 看到一篇php mysql 自動備份的文章,雖然沒試過,不過還是拿過來參考一下,在開發的過程中應該會用到。

每個電腦系統有一個備份。儘管如此,缺乏一個最近的備份是一個大問題。原因之一,可能是備份過程不完全自動化。那麼,讓我們來看看如何利用PHP自動備份數據庫。

創建備份

有許多不同的方法來創建一個MySQL數據庫備份。哪一個你會使用取決於哪些功能和命令你的主機支持。最流行的備份方法如下:

方法1:mysqldump

mysqldump的是一個用DROP table, CREATE table 和INSERT into SQL 命令來創建數據庫備份Linux命令 。要使用此方法,mysqldump,必須在主機上安裝和您的主機必須支持從PHP Linux命令的執行。 mysqldump的基本語法如下:

mysqldump -u [username] -p [password] [database_name] > dumpfilename.sql

在php

$command = "mysqldump --opt -h $dbhost -u [username] -p[password] [database_name] > dumpfilename.sql";
shell_exec($command); 

這只是一個簡單例子,詳細資料可以瀏覽這裡

方法2:mysqlhostcopy

Mysqlhostcopy是一個Perl腳本比mysqldump MyISAM表更快。對於這個工具,你還需要有shell 權限進入主機。該命令例子:

/usr/bin/mysqlhotcopy -u [username] -p [password] [database_name] /path/to/backup

在php

$command = "/usr/bin/mysqlhotcopy -u [username] -p [password] [database_name] /path/to/backup";
shell_exec($command); 

查看mysqlhostcopy 文件,可以用下面命令

perldoc mysqlhotcopy

方法3:SELECT INTO OUTFILE

這個方法是一個很好的解決方案,如果你沒有你的託管服務器上的shell訪問權限。它使用一個SQL查詢來生成一個數據庫備份。這需要兩種類型的權限:

1。數據庫用戶必須有選擇的權限(SELECT_PRIV)

2。 MySQL守護進程所有者必須具有寫入權限到目標目錄。

SELECT * INTO OUTFILE ‘backup.sql’ FROM my_table

這個查詢將創建一個表只有一個備份,所以你必須遍歷整個數據庫,並為每個表創建一個單獨的文件:

$alltables = mysql_query("SHOW TABLES");
while ($table = mysql_fetch_assoc($alltables))
{
   foreach ($table as $db => $tablename)
   {
       $sql = "SELECT * INTO OUTFILE 'backup/{$tablename}_backup.sql' FROM {$tablename}";
       mysql_query($sql)
       or die(mysql_error());
   }
}

數據庫優化
一個MySQL數據庫的功能類似於硬盤驅動器。經過多次INSERT,UPDATE和DELETE語句,其物理結構變得混亂,從而導致超負荷和數據遺失。這就是為什麼進行數據庫優化。優化是類似碎片整理硬盤驅動器,包括清除已刪除的行,重新排序,壓縮,管理​​索引路徑等等操作。

方法1:mysqlcheck
mysqlcheck的是一個命令行工具,可以檢查,修復,優化,或分析表。它可以優化一個表或整個數據庫。

mysqlcheck -u [username] -p [password] --auto-repair --check --optimize <database_name>

整個數據庫

mysqlcheck -u [username] -p [password] --auto-repair --check --optimize --all-databases

在PHP

$command = "mysqlcheck -u [username] -p [password] --auto-repair --check --optimize --all-databases";
shell_exec($command);

方法2:優化查詢
優化查詢可以一次優化只有一個表,所以,有必要通過循環查詢表:

$alltables = mysql_query("SHOW TABLES");
while ($table = mysql_fetch_assoc($alltables))
{
   foreach ($table as $db => $tablename)
   {
       $sql = "OPTIMIZE TABLE '". $tablename."'";
       mysql_query($sql)
       or die(mysql_error());
   }
}

使數據庫備份和自動優化
每天,每週,每兩週,等Cron job,自動備份和優化過程是通過設置一個cron job,使其在一定的時間間隔運行一個PHP腳本來完成。時間間隔是使用下拉菜單進行設置。在命令行字段中輸入:

php /home/your_username/public_html/backup.php?v=my_secret_phrase
backup.php:
<?php
// check access to prevent unauthorized users from running a backup
$v = $_GET['v'];
if($v != 'my_secret_phrase') {
    die('access not allowed');
}

// generate a backup
$command = "/usr/bin/mysqlhotcopy -u [username] -p [password] [database_name] /path/to/backup";
shell_exec($command);

// Do something with the backup

// Optimize the database
$command = "mysqlcheck -u [username] -p [password] --auto-repair --check --optimize --all-databases";
shell_exec($command);

?> 

@待辦事項
創建數據庫備份後,你需要用它做什麼。例如,你可以發郵件給自己,與Dropbox API存儲備份那裡,等整合

筆記

1。在本教程中使用MySQL的函數是用於教育目的。不要使用它們的生產。使用mysqli代替。

2。本教程只涉及 SQL備份創建。對於創建的 csv備份,檢查手冊。

3。閱讀服務的主機的話來說,如果你打算保留的備份在服務器上。大多數主機不允許您使用的磁盤空間進行備份。

原文:http://www.phpbuilder.com/articles/databases/mysql/implementing-automatic-database-backup-and-optimization-in-php.html