2008年5月29日 星期四

MySQL 即時備援

其實整個原理很簡單…
master 端及 slave 端各維持一份二進制的 log 檔,並記錄各自的更新指標
slave 時時去查看 master 的 log ,有變動的話就要求 master 把 log 檔傳過來進行同步。
(說簡單其實也是搞了好久才弄懂~真是江湖一點訣)

*MySQL 版本: 5.0.32
=============================================================
Master 端操作…
Master ( main server )...
ip: xxx.xxx.xxx.mmm

設置 maser server id 及欲進行二進制 log 檔的資料庫作為同步用…
nano /etc/mysql/my.cnf
------------------------------------------------------------
[mysqld]
# bind-address = 127.0.0.1
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = db_name_to_backup
------------------------------------------------------------
*binlog_do_db 有多個資料庫就多用幾行來設置。

重新啟動 mysql…
/etc/init.d/mysql restart

進入 mysql command…
mysql -uroot -p
------------------------------------------------------------
新增一個使用者 backup 給 slave 端用,需有 REPLICATION SLAVE 權限,作為同步用帳號…
mysql>GRANT REPLICATION SLAVE ON *.* TO backup@'xxx.xxx.xxx.sss' IDENTIFIED BY 'set_password';

暫時鎖住資料庫…
mysql>FLUSH TABLES WITH READ LOCK;

這邊要 dump 出你要同步的資料庫,請參考 mysqldump 使用方法或用 phpmyadmin 匯出…
####################
匯出出你要同步的資料庫…
####################

看一下目前 log 指標檔及其指標位置(要記住紅色部份)…
mysql>show master status\G
--------------------------------------------
File: mysql-bin.000073
Position: 98
Binlog_Do_DB: db_name_to_backup
Binlog_Ignore_DB:
--------------------------------------------

解鎖資料庫…
mysql>UNLOCK TABLES;

離開 mysql command…
exit
------------------------------------------------------------

=============================================================
Slave 端操作…
Slave ( backup server )
ip:xxx.xxx.xxx.sss

先刪除原有的 master 資訊(如果有的話)…
rm /var/lib/mysql/master.info

設置 maser host 相關資料及欲進行二進制 log 檔同步的資料庫…
nano /etc/mysql/my.cnf
------------------------------------------------------------
[mysqld]
# bind-address = 127.0.0.1
server-id = 2
master-host = xxx.xxx.xxx.mmm
master-user = backup
master-password = set_password
master-port = 3306
master-connect-retry = 60
replicate-do-db = db_name_to_backup
log_bin = /var/log/mysql/mysql-bin.log
------------------------------------------------------------

重新啟動 mysql…
/etc/init.d/mysql restart

進入 mysql command…
mysql -uroot -p
------------------------------------------------------------
先停止原有的同步作業…(因為 mysql restart 會自動重啟)
mysql>slave stop;

####################
匯入你要同步的資料庫…
####################

變更同步資訊及指標位置…
mysql>CHANGE MASTER TO
MASTER_HOST='61.221.194.212',
MASTER_USER='backup',
MASTER_PASSWORD='set_password',
MASTER_LOG_FILE='mysql-bin.000073',
MASTER_LOG_POS=98;

啟動同步程序…
mysql>slave start;

查看一下同步狀態…(注意紅色部份要正確才是有在運行)
mysql>show master status\G;
----------------------------------------------------
Slave_IO_State: Waiting for master to send event
Master_Host: xxx.xxx.xxx.mmm
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000073
Read_Master_Log_Pos: 98
Relay_Log_File: dns1-relay-bin.000002
Relay_Log_Pos: 88631
Relay_Master_Log_File: mysql-bin.000073
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: db_name_to_backup
Replicate_Ignore_DB:
...
...
----------------------------------------------------

*參考筆記…http://www.google.com/notebook/public/12398140405581905258/BDSVoIgoQnomkvpYj
http://www.gra2.com/article.php/setting-up-database-replication-on-mysql

2008年5月28日 星期三

Linux 時間調校

系統時間不使用 UTC(GMT)…
nano /etc/default/rcS
---------------------------------------------------
UTC=no
---------------------------------------------------

重設時區…
rm /etc/localtime

cp -a /usr/share/zoneinfo/Asia/Taipei /etc/localtime

手動校正時間MMDDhhmmYYYY…
date 052808542008

時間寫入 bios…
hwclock -w

安裝 ntp 網路時間同步…
apt-get install ntpdate

與 ntp server 同步時間…
ntpdate time.stdtime.gov.tw

時間寫入 bios…
hwclock -w

系統自動校時…
nano /etc/crontab
---------------------------------------------------
10 5 * * * root /usr/sbin/ntpdate time.stdtime.gov.tw && /sbin/hwclock -w
---------------------------------------------------

2008年5月27日 星期二

使用 rsync 備份、備援、鏡像

備份主機…
server side ( backup server、mirror server )…
=======================================
安裝 rsync…
apt-get install rsync

設置 rsync…
nano /etc/default/rsync
-------------------------------------------
RSYNC_ENABLE=true
-------------------------------------------

設置 rsync client…
nano /etc/rsyncd.conf
-------------------------------------------
[backup_home]
hosts allow = xxx.xxx.xxx.xxx
hosts deny = *
path = /home
auth users = backup_admin
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = no

[backup_www]
hosts allow = xxx.xxx.xxx.xxx
hosts deny = *
path = /var/www
auth users = backup_admin
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = no
-------------------------------------------

設置密碼…
nano /etc/rsyncd.secrets
-------------------------------------------
backup_admin:password1234
-------------------------------------------

變更權限…
chown root:root /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

啟動 rsync …
/etc/init.d/rsync start or restart
=======================================


待備份電腦…
client side ( main server、www server )…
=======================================
安裝 rsync…
apt-get install rsync

設置密碼…
nano /etc/rsyncd.passwd
-------------------------------------------
password1234
-------------------------------------------

變更權限
chmod 600 /etc/rsyncd.passwd
chown root:root /etc/rsyncd.passwd

shell 下執行備份(/home/)…
rsync -arHz --progress --delete --password-file=/etc/rsyncd.passwd /home/ backup_admin@xxx.xxx.xxx.xxx::backup_home
(一行指令)

shell 下執行備份(/var/www/)…
rsync -arHz --progress --delete --password-file=/etc/rsyncd.passwd /var/www/ backup_admin@xxx.xxx.xxx.xxx::backup_www
(一行指令)

定時啟動備份…
nano /etc/crontab
-------------------------------------------
0 2 * * * root /usr/bin/rsync -arHz --progress --delete --password-file=/etc/rsyncd.passwd /home/ backup_admin@xxx.xxx.xxx.xxx::backup_home
0 4 * * * root /usr/bin/rsync -arHz --progress --delete --password-file=/etc/rsyncd.passwd /var/www/ backup_admin@xxx.xxx.xxx.xxx::backup_www
-------------------------------------------
(二行設置)
=======================================

參考來源…
http://www.howtoforge.com/mirroring_with_rsync
http://linux.tnc.edu.tw/techdoc/rsync.htm
http://fanqiang.chinaunix.net/a6/b7/20010908/1305001258_b.html
http://moto.debian.org.tw/viewtopic.php?t=6757
http://b2ddoc.tnc.edu.tw/yh/LinuxBase/m6_server_setup.html#mozTocId848674

2008年5月19日 星期一

24LC04B用I2C讀寫

筆記:
http://www.google.com/notebook/public/12398140405581905258/BDQGMIgoQ3f676KAi

  • SCL可以到100KHZ但是寫入後要DELAY 10MS 左右,但一般都由MASTER控制,除非SLAVE端有 clock stretching 模式。
  • ACK、NOACK有兩種解釋,一個是MASTER發出的,一個是來自SLAVER(24LC04B)的,兩者SDA的方向是不同的。
  • 硬體接腳~WP一定要接好,不可浮接,否則寫入會失常。

寫入的流程…
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
Write8Bit(*Wdata);
TestAck();
Stop();
DelayMs(10);

讀出的流程…
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck()
Read8Bit();
Ack(); …
Read8Bit();
NoAck();
Stop();

2008年5月17日 星期六

VirtueMart 配置

修改送貨方式:
預設只有 Standard Shipping
到後台-->管理-->配置-->送貨
 只選「分別配置的運送者跟運費的標準送貨模組。推薦 ! 」即可
再到…
 運送
  增加運送者
  新增運送費率

信用卡交易:
 參考筆記

2008年5月16日 星期五

VirtueMart 安裝

下載 …
 VirtueMart_1.1.0-COMPLETE_PACKAGE.j15.zip
 官網位置
  https://dev.virtuemart.net/cb/proj/doc.do?proj_id=1

解壓縮會看到 …
 com_virtuemart_1.1.0.j15.zip
 兩個資料夾 …
  modules
  plugins
 及一份說明文件 …
  VirtueMart_1.1_Installation.pdf (這份其實己經講的很詳細了)

到 Joomla (1.5.x) 後台,選擇 擴充套件-->安裝移除
先安裝
 com_virtuemart_1.1.0.j15.zip
再安裝
 modules 下的
  mod_virtuemart_1.1.0.j15.zip
其它套件可以看需求要裝,這兩個是最基本的

下載語言包…
 Language_Pack_for_VirtueMart_1.1.0.zip

解開後刪去不必要的語系只留下
 traditional_chinese

注意,他檔案原本是 big 編碼,若使用 utf8 編碼 則要先…
 1進行轉換。我是用 ConvertZ。
 2每個檔案前面幾行,修改內容
   'CHARSET' => 'BIG5' --> 'CHARSET' => 'UTF8'
 3有些字碼有誤要自行修改( 由於許、蓋、功…的問題)

將語言包 languages 整個目錄上傳到
  Joomla 安裝目錄\administrator/components/com_viruemart

至此算是安裝完成。

最後記得要去後台模組管理中啟用 com_viruemart 模組。

3DS MAX 使用者設定檔

存放位置…

C:\Documents and Settings\xxxxx\Local Settings\Application Data\Autodesk\3dsmax\9 - 32bit\enu

由於是隱藏的,要打開隱藏。


平常備份後,有問題再還原即可。

Joomla1.5.X 文章以 PDF 格式顯錯誤(未解決)

錯誤訊息…

Warning: TCPDF::include(/var/www/joomla/language/pdf_fonts/fireflysung.php) [function.TCPDF-include]: failed to open stream: No such file or directory in /var/www/joomla/libraries/tcpdf/tcpdf.php on line 1909Warning: TCPDF::include() [function.include]: Failed opening '/var/www/joomla/language/pdf_fonts/fireflysung.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/joomla/libraries/tcpdf/tcpdf.php on line 1909TCPDF error: Could not include font definition file

到 GOOL 搜索找到字型檔 FOR JOOMLA…
http://for7.org/ServerUpdate/browser/extra?rev=54

上載後再試,出現錯誤…
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 4980736 bytes) in /var/www/joomla/language/pdf_fonts/fireflysung.php on line 1031

修改 /etc/php5/apache2/php.ini
加大 memory
memory_limit = 64M

程序會跑可是很慢~當是字型處理有問題。
…尚未找到解決方法。

暫時先從後台將 pdf 輸出的功能關掉
因為也能透過列印的方式產生pdf檔,所以其實這個功能可以不用。

後台-->內容-->文享管理-->參數
作設定。

Spamassassin 黑名單、白名單

手動=========================================
nano /etc/mail/spamassassin/local.cf

# whitelist:
whitelist_from d.cary@sparkingwire.com
whitelist_from *@sparkingwire.com

# blacklist:
blacklist_from d.cary@sparkingwire.com
blacklist_from *@sparkingwire.com

自動=========================================
#useradd -M black
#useradd -M white

以後如果收到垃圾信的話, 就把信 "以附加檔案方式轉寄" 給自己 Server 上的 black 信箱; 如果是被 Spamassassin 誤判為垃圾信的郵件, 就把它轉寄給 white. 也就是說, 讓這兩個信箱收集可以給 Spamassassin 學習的範本.

學習的指令如下:
學習黑名單:
#sa-learn -D --showdots --spam --mbox /var/mail/black

學習白名單:
#sa-learn -D --showdots --ham --mbox /var/mail/white
學習完成後, 即可將 black 與 white 信箱清空:
#true > /var/mail/black; true > /var/mail/white

讓系統每小時自動學習黑/白名單:
於 /etc/cron.hourly 建立一個可執行的 shell 檔, 內容為:
#!/bin/sh
if [ -s /var/spool/mail/black ]; then
sa-learn --spam --mbox /var/spool/mail/black > /dev/null
2>&1
true > /var/spool/mail/black
fi

if [ -s /var/spool/mail/white ]; then
sa-learn --ham --mbox /var/spool/mail/white > /dev/null
2>&1
true > /var/spool/mail/white
fi

2008年5月15日 星期四

Clamav Spamassassin更新升級

更新 Clamav:
nano /etc/apt/sources.list
增修
deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free

apt-get update
apt-get upgrade
freshclam

安裝 Spamassassin:
參考…
http://www.debian.org.tw/index.php/SpamAssassin
http://www.debuntu.org/postfix-and-pamassassin-how-to-filter-spam

apt-get install spamassassin spamc
groupadd -g 5001 spamd
useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd mkdir /var/lib/spamassassin
chown spamd:spamd /var/lib/spamassassin
nano /etc/default/spamassassin
增修
ENABLED=1
SAHOME="/var/lib/spamassassin/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${S$PIDFILE="${SAHOME}spamd.pid"

nano /etc/spamassassin/local.cf
作適當的修改設定

/etc/init.d/spamassassin restart

nano /etc/postfix/master.cf

smtp inet n - - - - smtpd
改為
smtp inet n - n - - smtpd -o content_filter$=spamassassin
若原本是在 chroot 模式則要記得保留,否則smtp驗證會失敗。
最後加上
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

/etc/init.d/postfix reload

2008年5月14日 星期三

Google 地圖

Joomla1.5.X 安裝 google maps 模組

Joomla1.5.X 安裝 Plugin Googlemaps 模組
一、首先下載 plugin
http://extensions.joomla.org/component/option,com_mtree/task,viewlink/link_id,1147/Itemid,35/

二、由於模組相容性,要將你的 joomla 改為 Legacy Mode ,到後台安裝 plugin 那邊找 System - Legacy 直接安裝。

三、安裝 Plugin Googlemaps ,透過下載的壓縮檔案即可。

四、到 google map 申請一組網站用的 api key,到這裡http://code.google.com/apis/maps/signup.html

五、將 key 填到 Plugin Googlemaps 後台參數設定中,順便把一些參數設好。

至此算 Plugin Googlemaps 安裝完成,再來就是在文章中秀出地圖的方法囉…

一、新建文章
二、加入 map 標籤,如下範例…(最好使用純html方式編輯)
{mosmap width='500'height='400'lat='23.008558'lon='120.182888'zoom='12'zoomType='Large'zoomNew='0'mapType='Normal 'showMaptype='0'overview='0'text='這是哪裡'tooltip='文字說明'marker='1'align='center'}

其中最重要的位置座標就是 lat 、lon 兩個參數~(到 google maps 找到你的點,再透過連結輸出的功能可以看的到 ll=xxxxx 的值就是了 ) ,或者到 http://koti.mbnet.fi/ojalesa/tutor/design.html 這裡來查座標。
其它的參數可以自行參考的的說明文件。



三、完成。



效果如下…

架站學習之路

這兩天終於把公司DNS搞定~
硬碟掛掉真慘…
包括…


很累人,不過也學了不少。(http://rs.twnic.net.tw/cgi-bin/dns.cgi)

看到零錯誤真是蠻感動的~


首頁也蠻有個樣子~將來要幫代客架站都沒問題了吧? 整站全包~

如何修改joomla 1.5頁尾的版權信息

在 /language/zh-CN/zh-CN.mod_footer.ini
zh-CN=相應的語系

Debian 安裝筆記

Debian4 安裝

OpenSSH-Server
apt-get install openssh-server

POSTFIX
mail sever

BIND9
dns server

MYSQL
apt-get --purge remove mysql-common mysql-server mysql-client
apt-get install mysql-common mysql-server mysql-client

APACHE+PHP
apt-get --purge remove apache2 php5 libapache2-mod-php5
apt-get install apache2 php5 libapache2-mod-php5 php5-gd php5-mysql

apache 預設語言問題
/etc/apache2# nano httpd.conf
-------------------------------------------------------------------------------
AddDefaultCharset Big5
LanguagePriority tw en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv
-------------------------------------------------------------------------------

PHPMYADMIN
apt-get --purge remove phpmyadmin
apt-get install phpmyadmin

PHPMYADMIN big5亂碼問題
/usr/share/phpmyadmin/libraries# nano select_lang.lib.php
-------------------------------------------------------------------------------
'big5' => 'big5', 更改 'big5' => 'latin1',
'utf-8' => 'utf-8', 更改 'utf-8' => ' latin1',
-------------------------------------------------------------------------------

Joomla

2008年5月8日 星期四

另類電腦資料存放方式SVN

最近夏天到了~似乎又開始硬碟荒了,周遭的硬碟一個接一個掛掉
這種事常常在發生,周而復始,不經讓人感概…
這邊提出個人保存資料的方式,也是自己最近才這樣子作的(當然也是經過一番椎心之痛才有的覺悟)

一般人用底下這些方式儲放資料…
一、硬碟或作RAID(硬碟沒有比較硬,反而是極其脆弱)
二、隨身碟(隨身帶著比較保險?)
三、光碟(光碟更不是看起來那樣金光閃閃永遠動人)

但是這三個都是實體的東西,總會有損壞的一天(這是必然的)
除非你一直重覆作備份的動作,並且保證在備份時不會很湊巧的同時壞掉(總是會這麼的巧)
而且這樣的備份方式往往有時效的問題,常常留的資料都是「舊」的。(不見的總是最新最後的心血)

經過這麼長久的接觸電腦,發現電腦其實是很不可靠的東西
平常依賴慣了,會以為什麼事也不會發生,以為電腦資料跟平常紙本的東西一樣可以保存,頂多只是變舊
但電腦就是電腦,是0與1的世界,好跟壞只有一線之隔,一旦壞了那就沒有商量的餘地,一切歸零。
於是現在我絕大部份的資料全都改存放在網路上…

網路空間

依賴在大網站或大企業底下(google、msn…),由他們負責去保管,而且通常都保管的很完善,也不用擔心哪天壞掉不見。
你唯一需要擔心的大概就是個人隱私之類的東西。
以前多用網路硬碟,但麻煩的是要自己在那邊co來co去,很容易造成資料不同步,也很容易懶得得去對照什麼要備份什麼不要備份,資料量大的話,也是很麻煩的一件事。(尤其是在網路速度變慢時~會抓狂)

我現在都借用提供免費版本控制SVN空間的網站來作資料備份。(怎聽起來像在打廣告XD)
介紹個好網站…

http://www.assembla.com/

註冊後可以自己新增空間,一個空間據說有500MB,而且數量好像沒限制(目前我己加了十幾個空間了)
新增好了之後就可以把自己的資料往那邊狂塞(當然,最好自己也分配好不同的分類傳到不同的空間)
好處隨之而來…
由於採用SVN版本控制
一、資料有變更、新增、修改…在COMMIT後都會自動幫你作好上傳
二、而且可以在不同的電腦隨時CHECKOUT出來(當然前提是要有網路)
三、不同的地方作不同的修改也不會出問題,因為SVN的特性,有衝突的修改它會提示你(如果是拿來作資料備份而不是程式碼版本控制的話,衝突的機會應該很難會發生)
四、而且還有歷史記錄,隨時還能回復到以前的版本狀態…

就好像是化整為零,無招勝有招一樣…
把資料散佈在浩瀚網路海,反而是最保險的作法。
值得去學習這工具怎麼用。

關於 SVN 的使用方式網路上很多,這邊就不將這些資訊重覆了。
請務必善用網路搜索的功能
http://www.google.com.tw
這是目前所有網路知識的線頭。

更高效處理 micro second 的方式

更高效處理 micro second 的方式…  以 STM32 為例… __IO unsigned long sys_tick = 0; void SysTick_Handler(void) {     HAL_IncTick();     sys_tick += (SysTi...