2015年1月20日 星期二

mysql自動備份

不建議的 MySQL 資料備份方式

http://phpbb-tw.net/phpbb/viewtopic.php?t=46722


討論windows下自動備份批次檔
http://xoops.tn.edu.tw/modules/xforum/viewtopic.php?post_id=28444
適當修改以下內容,然後存成一個 .bat 檔。

代碼:
@echo off
REM /* MysqlBinPath: MySQL 可執行檔路徑,結尾請不要放 "\"
REM * BackupPath: 放置 sql 備份檔的位置,結尾請不要放 "\"
REM * DBhost: 資料庫主機的位址,可用 dn 或 ip
REM * DBuser: 資料庫使用者名稱
REM * DBpass: 資料庫使用者密碼
REM * DBname: 資料庫名稱 
REM * Argument: 其他的參數 */
SET MysqlBinPath=D:\AppServ\mysql\bin
SET BackupPath=D:\Backup
SET DBhost=127.0.0.1
SET DBuser=username
SET DBpass=password
SET DBname=databasename
SET Argument=--opt --compress --force --default-character-set=utf8
REM /* 以下不必修改 */

REM /* 取得日期。參照: http://alexchuo.blogspot.com/2006/07/blog-post.html */
FOR /F "tokens=1-4 delims=/ " %%a IN ("%date%") DO (
SET _MyDate=%%a-%%b-%%c %%d
)

REM /* 以日期為檔名,匯出 .sql 檔案。 */
echo 資料庫 %DBname% 備份中……
"%MysqlBinPath%\mysqldump" --host=%DBhost% --user=%DBuser% --password=%DBpass% %Argument% %DBname% > "%BackupPath%\%_MyDate%.sql"

REM /* 偵錯處理,發生錯誤就停住畫面以便看清楚錯誤訊息。 */
IF NOT %ERRORLEVEL% == 0 (
del "%BackupPath%\%_MyDate%.sql
echo.
echo 不好了,好像出了什麼問題的樣子。請看上面的訊息吧!
pause
)

之後,只要執行這個 .bat 檔,就會在設定的目錄中依目前日期產生以 "西元年/月/日 星期幾.sql" 為檔名的備份檔了。您可以先自己執行一次試試看有沒有成功。
使用 Windows 的排程工具(控制台/排定的工作)定期執行這個 .bat 檔,就能輕鬆地遠端定期自動備份資料庫囉。

備份出來的 .sql 檔案並不會自動壓縮,您可以自行將這些 .sql 檔壓縮起來保存。
MySQL備份教學
http://www.dotblogs.com.tw/michaelchen/archive/2015/01/06/mysql_backup.aspx
[匯出單一資料庫]

mysqldump -u root -e -q -p --default-character-set=utf8 database_name > back.sql

[匯出單一資料表]

mysqldump -u root -e -q -p --default-character-set=utf8 database_name datatable_name > back.sql


[匯出全部資料庫]

mysqldump -u root -e -q -p --default-character-set=utf8 --all-databases > back.sql

[匯入單一資料庫]

mysql -u root -p database_name < back.sql --default-character-set=utf8

[匯入單一資料表]

mysql -u root -p database_name datatable_name < back.sql --default-character-set=utf8

[匯入全部資料庫]

mysql -u root -p < back.sql --default-character-set=utf8

[直接匯入到另外一台資料庫]

mysqldump -u root -e -q --password=XXX --all-databases --default-character-set=utf8 | mysql -u root -h IP位置 --password=XXXX --default-character-set=utf8

==============================

mysqldump 其實還有很多參數可以用,想知道可以到官網去查詢  http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html



在Windows Server設定自動備份MySQL資料庫

http://www.askasu.idv.tw/index.php/2011/07/08/1435/

MySQL單一資料庫備份還原語法
http://www.ddjhs.tc.edu.tw/admin/mysql/mysqldump.txt

◎MySQL單一資料庫備份還原語法:

1.備份
>mysqldump -u使用者名稱 -p密碼 資料庫名稱 > 備份檔名.sql
或
>mysqldump -u使用者名稱 -p密碼 資料庫名稱 > 備份檔名.sql --default-character-set=latin1 (中文資料庫有語系困擾時)

2.還原
>mysql -u使用者名稱 -p密碼 資料庫名稱 < 備份檔名.sql


◎MySQL全部資料庫備份還原語法:

1.備份
>mysqldump -u使用者名稱 -p密碼 --all-database > 備份檔名.sql
或
>mysqldump -u使用者名稱 -p密碼 --all-database > 備份檔名.sql --default-character-set=latin1 (中文資料庫有語系困擾時)

2.還原
>mysql -u使用者名稱 -p密碼 < 備份檔名.sql


◎注意事項:
1.備份檔內容之資料庫名或資料表名中若含'-',則該名稱前後要加'`',以免還原時出錯!使用舊版之mysqldump時會有所缺漏。
2.新版之MySQL對於關鍵字有所增補,如:release……等。若舊版有使用到(資料表或欄位名稱)可能造成還原時出錯!


----------其它有用的語法------------------------------------------

◎替換某欄位部份內容之語法:

1.所需之字串替換函式:

 REPLACE(str,from_str,to_str)

2.完整SQL語法:

 UPDATE `資料表` SET `欄位名` = REPLACE(`欄位名`,'舊字串','新字串') WHERE `欄位名` LIKE '%舊字串%'


如何在 Batch 檔取得系統的日期、時間欄位 (第三版)

http://blog.miniasp.com/post/2009/11/03/How-to-get-system-date-time-in-batch-file-part-III.aspx

從 Batch 取得日期時間還真囉唆,每次都要查資料 Copy / Paste 才能寫出計算日期時間的指令碼,最近有有需求要抓到「上一個月」的年份與月份,所以有用到數值運算的指令 ( SET /A ),所以乘機再整理一遍取得日期、時間欄位的程式碼。
取得今天日期 ( 其中 P0 代表「不滿 10 自動補零」的意思 )
REM 取得今天的年、月、日 (自動補零)
SET TodayYear=%date:~0,4%
SET TodayMonthP0=%date:~5,2%
SET TodayDayP0=%date:~8,2%

REM 取得今天的年、月、日 (純數字)
REM 2010/08/03 更新:以下是為了修正 Batch 遇到 08, 09 會視為八進位的問題
IF %TodayMonthP0:~0,1% == 0 (
 SET /A TodayMonth=%TodayMonthP0:~1,1%+0
) ELSE (
 SET /A TodayMonth=TodayMonthP0+0
)

IF %TodayMonthP0:~0,1% == 0 (
 SET /A TodayDay=%TodayDayP0:~1,1%+0
) ELSE (
 SET /A TodayDay=TodayDayP0+0
)

echo 日期 %TodayYear%/%TodayMonth%/%TodayDay%
echo 日期 %TodayYear%/%TodayMonthP0%/%TodayDayP0%
取得上個月的年、月 ( 其中 P0 代表「不滿 10 自動補零」的意思 )
REM 取得上個月的年、月
SET /A LastMonthYear=%TodayYear%+0
SET /A LastMonthMonth=%TodayMonth%-1
SET /A LastMonthMonthP0=%LastMonthMonth%
REM 修正年份與月份的數值
IF %LastMonthMonth% EQU 0 (SET /A LastMonthYear=%thisYear%-1)
IF %LastMonthMonth% EQU 0 (SET LastMonthMonth=12)
IF %LastMonthMonth% LSS 10 (SET LastMonthMonthP0=0%LastMonthMonth%)

echo 日期 %LastMonthYear%/%LastMonthMonth%
echo 日期 %LastMonthYear%/%LastMonthMonthP0%
取得當下時間 ( 時、分、秒、豪秒 )
REM 取得時、分、秒 、豪秒
SET Hour=%NowTime:~0,2%
SET Minute=%NowTime:~3,2%
SET Second=%NowTime:~6,2%
SET /A Millisecond=%NowTime:~9,2%*10

echo 時間 %Hour%:%Minute%:%Second%.%Millisecond%
上述關於取得「上個月」的年、月的重點就在於 Batch 可以提供基本的數學運算。另外對於 %time% 的精準度只有到「百分之一秒」,為了改以表達「豪秒」表達所以我將取得的數字乘以 10 處理。
執行 HELP SET 指令後關於 /A 選項(switch)的說明如下:
/A 指定在等號右方的字串是一個要被運算的數字運算式。您可以用運算式進行簡單的運算,而且支援下列
的運算子 (依照運算優先順序由高到低排列):

    ()                  - 組成一群
    ! ~ -               - 一元運算符
    * / %               - 數字運算元
    + -                 - 數字運算元
    << >>               - 邏輯位移
    &                   - 位元運算 and
    ^                   - 位元運算 exclusive or
    |                   - 位元運算 or
    = *= /= %= += –=    - 指定
    &= ^= |= <<= >>=
    ,                   - 運算式分隔字元

如果您使用了任何邏輯或餘數運算子,您必須將運算式兩邊括上引號。任何在運算式中非數字的字串會
被當作環境變數,並且在使用前會先將這些環境變數轉換為數字。如果您所指定的環境變數名稱尚未在
目前環境中定義,那麼它的值會被設為 0。這可以讓您用環境變數值來做運算,而不必打入所有的 % 
符號來取得它的值。如果 SET /A 是用指令檔之外的命令列執行,它會顯示運算式最後的數值。指定運
算子需要有個環境變數在等號的左方。0x 字首在數字前方代表十六進位數字、0b 字首代表二進位數字
或 0 字首代表八進位數字,否則數字值都是指十進位數字。所以 0x12 就和 18、022 等相同。請注意
八進位數字可能容易弄錯: 像 08 和 09 就不是正確的數字,因為 8 和 9 並不是八進位的正確數字。
相關連結

2014年12月26日 星期五

PHP function: 亂數密碼產生

http://blog.longwin.com.tw/2007/08/php_function_gen_password_2007/


2014年12月25日 星期四

簡單的搜尋引擎 + CheckBoxList (實用)


http://blog.sina.com.tw/myvufzbi/article.php?pbgid=91238&entryid=595441


把資料展現到畫面上
ExecuteReader


//建立連線
SqlConnection conn;
conn = new SqlConnection("data source = EasyFlow;initial catalog = EFNET;user id =sa;password = XXX");
conn.Open();
//下指令
SqlCommand cmd;
cmd = new SqlCommand("select dept as 部門,empname as 員工名稱,empno as 員工代號,extension as 分機,phs as PHS from extension where deptno like @empno", conn);
cmd.Parameters.Add("@empno", SqlDbType.NVarChar).Value = txt_what.Text.Trim() + "%";
//讀取到中介
SqlDataReader dr;
dr = cmd.ExecuteReader();
//仲介資料給GridView去顯示
GridView.DataSource = dr;
GridView.DataBind();
//若要讀取仲介的每一筆資料並丟給DropDownList
while (dr.Read())
{
    DropDownList.Items.Add(dr["dept"].ToString()); //dr["dept"].ToString() 是dr的dept欄位資料
}