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