要怎麼備份msql,專家都說,用mysqldump,當然這也是憨人蝸牛會用的方法,一般的主機這麼用,不會有問題,但是共享主機,你拿不到root的權限,要怎麼備份資料咧!是的!沒有想像中的簡單,主機商只會叫你花更多的錢,買更專屬的方案。
一般的備份指令可以寫成script放在cron table中執行。
三段指令下法(先倒,再壓,刪檔)
mysqldump -uXXX -pXXX dbname > path/`date +%d%m%Y_%H%M`_dump.sql
#備份資料庫,輸入帳號密碼、指定的資料庫和目標
tar czvf path/`date +%d%m%Y_%H%M`_dump.tar.gz path/`date +%d%m%Y_%H%M`_dump.sql
#壓縮起來省空間
rm -f path/`date +%d%m%Y_%H%M`_dump.sql
#移除原檔,保留tar.gz的檔案,ftp回來就好
有簡化的作法把dump出來的SQL資料直接餵給tar,我在這裡就不談,基本上只要第一個指令可以執行,資料就可以備份了,但是如果mysqldump沒有辦法執行,不能寫成script或是comman,就無法在crontabl中執行,就不能自動產生備份,也就沒有辦法自動下載。
有沒有解法啊?有啊!工程師說,後台有一個Backup Wizard,備份精靈可以用,每次要備份的時候,進去執行,就會可以下載回來了,要不然就要買更高階的方案。
這篇文章講了10個自動備份mysql的方法
1.自動備份去Amazon S3
為了備份,再多買一個Amazon S3的方案超贊,如果想要亞馬遜雲端,利用S3來做備分,相當有說服力哦!被老闆扒頭不要怪我。
2.用mysqldump方法,配合crontabl,和我們已知道做法一樣。
沒有root的權限~阿就無解啊!
3.利用AutoMySQLBackup來備份
Sourceforge裡面有的下載,應該是不用錢,這是我的菜。實測的結果,阿不就是把指令備份變成問答式備份,換湯不換葯,還是會用到mysqldump來備份。
4.Mysqldump不加上crontabl的備份法
5.用mysqldump備份成xml
mysqldump不能用,所以這系列的解法通通不能用
6.使用PHP備份mysql
酷,這個方法我喜歡,而且簡單名瞭,但是一個表備份成一個sql,還原時則反向,一個sql還原到一個資料表中,老實說,這個方法是呆了一點,細了一點,但是有些資料表根本就是萬年不變,不需要每次都備份,用這個方法,可以建立自己的備份策略,但是如果你有1百多個資料表(或者更多)要備份,你被老闆扒頭時,不要罵我。
7.透過SSH來備份,我的老天啊!這跟ROOT的權限還是有關啊!要有權限才能下mysqldump的指令啊!
8.用Email把備份資料寄出備份(PHP)
這個方法我之前用過,不錯用,資料小的時候可以用,如果資料很大,你的資料超過10MB,不止備份慢,收件慢,就會越來越不方便。
9.在Ubuntu下面備份mysql
條件是如果你有專屬主機的話
10.備份mysql資料庫,並且自動上傳到到FTP上
前題是有要mysqldump的執行權限,不只可以上傳到FTP,還可以用SSH(SFTP)備份以及RSYNC異地備份。
11.Phpmyadmin的備份方法
只能透過手動,不能自動
總的來說,只有6跟8兩個方案可以達成自動備份的目的,我可能會自己來改寫一下php,調整成自己適用的作法。
在改寫方法6之後,我發現根本不能執行,因為方法6的精神在於利用mysql查詢,把資料塞到sql檔中,不論是在Windows平台上的Appserv還是在虛擬主機上,都不能執行,而且還有檔案寫入權限的問題,OMG,非mysqldump的路怎麼那麼難走啊!方法8因為會有email容量上限的問題,所以我也暫不考慮。
永遠的Linux網站上也有講透過php 備份XML格式的資料表,我沒有實測,我找到別的方法拿到類似mysqldump的sql statement 備份檔的方法。在這邊才要跟大家分享一下吧!希望能幫到這些寄存的主人,不要被hosting公司給弄到了,程式碼小調一下就可以用了,但是dump出來的檔案很大,反正空間大,可以用就好。
<?php
// 備份資料庫
$host = “localhost”;
$user = “root”; //資料庫賬號
$password = “”; //資料庫密碼
$dbname = “mysql”; //資料庫名稱if (!mysql_connect($host, $user, $password)) // 連接mysql資料庫
{
echo ‘資料庫連連失敗,請確認帳密後再試’;
exit;
}
if (!mysql_select_db($dbname)) // 是否存在該資料庫
{
echo ‘資料庫不存在:’ . $dbname . ‘,請核對後再試’;
exit;
}
mysql_query(“set names ‘utf8′”);
$mysql = “set charset utf8;\r\n”;
$q1 = mysql_query(“show tables”);
while ($t = mysql_fetch_array($q1))
{
$table = $t[0];
$q2 = mysql_query(“show create table `$table`”);
$sql = mysql_fetch_array($q2);
$mysql .= $sql[‘Create Table’] . “;\r\n”;
$q3 = mysql_query(“select * from `$table`”);
while ($data = mysql_fetch_assoc($q3))
{
$keys = array_keys($data);
$keys = array_map(‘addslashes’, $keys);
$keys = join(‘`,`’, $keys);
$keys = “`” . $keys . “`”;
$vals = array_values($data);
$vals = array_map(‘addslashes’, $vals);
$vals = join(“‘,'”, $vals);
$vals = “‘” . $vals . “‘”;
$mysql .= “insert into `$table`($keys) values($vals);\r\n”;
}
}$filename = $dbname . date(‘Ymjgi’) . “.sql”;
//存放路徑,可依自己的規劃存放檔案
//我自己修改的程式,還加上亂碼檔名,畢竟共用主機.sql還是可以列出來的
//有太多的風險
$fp = fopen($filename, ‘w’);
fputs($fp, $mysql);
fclose($fp);
echo “資料庫備份成功”;
?>
20141111 光棍節的今天,還是在當攻城獅,把上面的代碼整個翻新一下,再把註解弄好
哈….寫筆記真的還是很重要的。
隨機文章
- Delphi的字串類資料型態&函數 (2009-07-19)
- 測試 GmailStore 3.1多語言版 (2007-11-04)
- 自己的DNS自己建,自己的網站 自己檔 (2020-09-13)
- You are not special.你並不特別 (2012-06-18)
- 面對Google Groups和Facebook相片的垃圾信 (2011-04-22)
請問能教我000webhost的cronjob怎麼用嗎?
我已經試過3種語法
實測後都無法備份成功….
免費版的cron又沒有寄執行錯誤的功能
問000webhost~他們又說他們cron是正常的…
http://shachi.tw/cpanel-backup-mysql/
http://mrmo.cc/mousontech/1518
http://www.medic-cn.com/2011/02/cpanel-automatic-backup-of-your-whole-station.html
我沒有用過免費的000webhost,所以不確定情況如何
他們如果說有這個功能,就表示有這個功能,至於使用會不會受限
我就不知道了…基本上使用程式備份mysql
應該都會成功才對