Category Archives: Database

Database

搬家

這幾天有在看我的 Blog 以及個人板的人應該都知道我對 Database 幹了什麼蠢事。不管怎樣,我請 將 MySQL 的內容 Rollback,剛剛發現已經將 8/7 的備份倒回來了。

如果您想知道 8/7 到 8/11 中間的文章,可以在 http://gslin.blogspot.com/ 找到。

依照舊有的計畫,這邊將不再繼續維護,但網站會放著。新的 Blog 會在 ,如果您有訂閱 gslin.org 的 RSS 或是 Atom,請您到新站訂閱。如果您是使用 則不需要變更,因為我已經將 feed 指到新的 Blog 了。

MySQL 升級問題

從 5.0.1 升級到 5.0.2 後發現所有 connection 連過去都會被 access denied,看起來像是 privilege table 發生問題。

--skip-grant-tables 開起來進去看發現 password 的部分居然是舊的格式?該不會是當年從 3.23.58 升級上來的時候沒重設 password 吧 :P

重設了以後看起來正常了,特此記錄幹剿 XD

LiveJournal 的 backend

在整理文件的時候翻到的: (pdf link),去年十一月的文件,我好像沒有在 blog 上面提到過。

是目前全球幾個超大的 Blog Hosting,這篇七十幾頁的 slide 提到了 從一台 server 開始架設,到後來用了上百台機器,中間遇到了什麼問題,以及解決問題的方法。

像是一開使用 replication 來分散 的量,但最後發現最後 loading 都是 write (Page19),於是這部分就改用 cluster 做 (Page22),先 SELECT clusterid FROM user WHERE user=’bob’,然後再到那台 去抓資料 (Page24)。

以及 MASTER-MASTER Cluster (Page29)、MyISAM 與 InnoDB 的選用 (Page36)、mod_perl + mod_proxy (Page45)、自己弄 Perlbal (Page46)、MogileFS (Page50)、memcache (Page53)…

用 Gmail 備份 MySQL Database

之前在 386bsd 上 post 的,整理一下放上來。

先在自己的機器與 mysql server 安裝 GnuPG (現在是 1.4.0):

# cd /usr/ports/security/gnupg
# make install clean

如果是 FreeBSD 4.x,在自己的機器上產生 key 前,先設定 random device:

# rndcontrol -s 5
# rndcontrol -s 11

其中的 5 與 11 是 IRQ number,可以用下面的指令看哪個 IRQ 可以當 random device:

# pciconf -l

接下來在自己機器上用下面的指令產生 publickey 與 privatekey:

$ gpg –gen-key

應該會有許多問題要答,分別是:

Your selection? 1 (用 DSA & Elgamal)
What keysize do you want? (2048) 4096 (最高的 4096 bits)
Key is valid for? (0) 0 (這把 key 不設 expire)
Is this correct? (y/N) y (確定不設 expire)
Real name: Gea-Suan Lin (名字)
Email address: gslin@ccca.nctu.edu.tw (e-mail)
Comment: (不用填,enter 過去)
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o (Okay)
Enter passphrase: !@#$%^ (設個密碼吧)
Repeat passphrase: !@#$%^ (同樣的密碼再打一次)

然後讓他跑一陣子 (4096 bits 比較久),這樣應該就把 key 生出來了,像:

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   1024D/31ABE498 2005-03-12
      Key fingerprint = 826E E0DF 72ED 4BEB FA85  52E3 9F02 FDC3 31AB E498
uid                  Gea-Suan Lin <gslin @ccca.nctu.edu.tw>
sub   4096g/69E68E46 2005-03-12

然後將這把 key export 出來:

$ gpg -a --export gslin > /tmp/publickey.gslin

然後把 publickey.gslin 拿到 mysql server 主機上 import 給 root 處理:

# gpg –import < publickey.gslin

然後設定信賴程度:

# gpg --edit-key gslin trust

接下來會問幾個問題:

Your decision? 5 (I trust ultimately)
Do you really want to set this key to ultimate trust? (y/N) y
Command> save (存進去)

把下面的內容放到 /usr/local/sbin/backup-db.sh,其中粗體的部分代表需要改的:

#!/bin/sh
DATE=`/bin/date +%Y%m%d`

/usr/local/bin/mysqldump -A -u root --password=PASSWORD | gzip -9 | uuencode mysql-${DATE}.gz | gpg -a -e -r gslin | mail -s "evil.NCTU.edu.tw MySQL backup (${DATE})" evilGMAIL@gmail.com

最後在 /etc/crontab 設定每天 03:00 備份:

0       3       *       *       *       root    /usr/local/sbin/backup-db.sh > /dev/null 2>&1