導航:首頁 > 源碼編譯 > pg庫二進制和源碼的區別

pg庫二進制和源碼的區別

發布時間:2024-11-10 14:00:50

Ⅰ 嫻呰皥MySQL鏁版嵁搴撳囦喚鐨勫嚑縐嶆柟娉



mysql甯歌佺殑澶囦喚鏂瑰紡鏈:mysqlmp銆乵ysqlhot銆丅ACKUP TABLE 銆丼ELECT
INTOOUTFILE錛屽張鎴栬呭囦喚浜岃繘鍒舵棩蹇楋紙binlog錛夛紝榪樺彲浠ユ槸鐩存帴鎷瘋礉鏁版嵁鏂囦歡鍜岀浉鍏崇殑閰嶇疆鏂囦歡銆侻yISAM琛ㄦ槸淇濆瓨鎴愭枃浠剁殑褰㈠紡錛屽洜姝ょ浉瀵規瘮杈冨規槗澶囦喚錛屼笂闈㈡彁鍒扮殑鍑犵嶆柟娉曢兘鍙浠ヤ嬌鐢ㄣ侷nnodb 鎵鏈夌殑琛ㄩ兘淇濆瓨鍦ㄥ悓涓涓鏁版嵁鏂囦歡 ibdata1涓錛堜篃鍙鑳芥槸澶氫釜鏂囦歡錛屾垨鑰呮槸鐙絝嬬殑琛ㄧ┖闂存枃浠訛級錛岀浉瀵規潵璇存瘮杈冧笉濂藉囦喚錛屽厤璐圭殑鏂規堝彲浠ユ槸鎷瘋礉鏁版嵁鏂囦歡銆佸囦喚
binlog錛屾垨鑰呯敤mysqlmp銆
1.mysqlmp澶囦喚
mysqlmp 鏄閲囩敤SQL綰у埆鐨勫囦喚鏈哄埗錛屽畠灝嗘暟鎹琛ㄥ兼垚 SQL 鑴氭湰鏂囦歡錛屽湪涓嶅悓鐨 MySQL 鐗堟湰涔嬮棿鍗囩駭鏃剁浉瀵規瘮杈冨悎閫傦紝榪欎篃鏄鏈甯哥敤鐨勫囦喚鏂規硶銆
紺轟緥:mysqlmp -uroot -p database table > /home/jobs/back.sql
mysqlmp涔熷彲鍋氬為噺澶囦喚,mysqlmp鐩稿叧鍙傛暟緗戜笂杈冨,灝變笉鍦ㄦや竴涓璧樿堪浜
2.mysqlhot澶囦喚銆愬傛灉鏄浼佷笟鐗堢殑mysql鍙浠ョ敤mysqlbackup褰撶劧鏄瑕佹敹璐圭殑銆
mysqlhot 鏄涓涓 PERL 紼嬪簭銆傚畠浣跨敤 LOCK TABLES銆丗LUSH
TABLES 鍜 cp 鎴 scp
鏉ュ揩閫熷囦喚鏁版嵁搴撱傚畠鏄澶囦喚鏁版嵁搴撴垨鍗曚釜琛ㄧ殑鏈蹇鐨勯斿緞錛屼絾瀹冨彧鑳借繍琛屽湪鏁版嵁搴撴枃浠訛紙鍖呮嫭鏁版嵁琛ㄥ畾涔夋枃浠躲佹暟鎹鏂囦歡銆佺儲寮曟枃浠訛級鎵鍦ㄧ殑鏈哄櫒涓娿
mysqlhot 鍙鑳界敤浜庡囦喚 MyISAM錛屽苟涓斿彧鑳借繍琛屽湪 綾籙nix 鍜 NetWare 緋葷粺涓娿
mysqlhot 鏀鎸佷竴嬈℃ф嫹璐濆氫釜鏁版嵁搴擄紝鍚屾椂榪樻敮鎸佹e垯琛ㄨ揪銆
紺轟緥錛 root#/usr/local/mysql/bin/mysqlhot -h=localhost -u=root
-p=123456 database /tmp (鎶婃暟鎹搴撶洰褰 database 鎷瘋礉鍒 /tmp
涓)root#/usr/local/mysql/bin/mysqlhot -h=localhost -u=root -p=123456
db_name_1 ... db_name_n /tmproot#/usr/local/mysql/bin/mysqlhot
-h=localhost -u=root -p=123456 db_name./regex/
/tmp鏇磋︾粏鐨勪嬌鐢ㄦ柟娉曡鋒煡鐪嬫墜鍐岋紝鎴栬呰皟鐢ㄤ笅闈㈢殑鍛戒護鏉ユ煡鐪 mysqlhot 鐨勫府鍔╋細
perldoc /usr/local/mysql/bin/mysqlhot娉ㄦ剰錛屾兂瑕佷嬌鐢 mysqlhot錛屽繀欏昏佹湁
SELECT銆丷ELOAD(瑕佹墽琛 FLUSH TABLES) 鏉冮檺錛屽苟涓旇繕蹇呴』瑕佽兘澶熸湁璇誨彇 datadir/db_name 鐩褰曠殑鏉冮檺銆
榪樺師mysqlhot 澶囦喚鍑烘潵鐨勬槸鏁翠釜鏁版嵁搴撶洰褰曪紝浣跨敤鏃跺彲浠ョ洿鎺ユ嫹璐濆埌 mysqld
鎸囧畾鐨 datadir (鍦ㄨ繖閲屾槸 /usr/local/mysql/data/)鐩褰曚笅鍗沖彲錛屽悓鏃惰佹敞鎰忔潈闄愮殑闂棰橈紝濡備笅渚嬶細 root#cp
-rf db_name /usr/local/mysql/data/root#chown -R nobody:nobody
/usr/local/mysql/data/ (灝 db_name 鐩褰曠殑灞炰富鏀規垚 mysqld 榪愯岀敤鎴)
3.SQL 璇娉曞囦喚
3.1 澶囦喚BACKUP TABLE 璇娉曞叾瀹炲拰 mysqlhot
鐨勫伐浣滃師鐞嗗樊涓嶅氾紝閮芥槸閿佽〃錛岀劧鍚庢嫹璐濇暟鎹鏂囦歡銆傚畠鑳藉疄鐜板湪綰垮囦喚錛屼絾鏄鏁堟灉涓嶇悊鎯籌紝鍥犳や笉鎺ㄨ崘浣跨敤銆傚畠鍙鎷瘋礉琛ㄧ粨鏋勬枃浠跺拰鏁版嵁鏂囦歡錛屼笉鍚屾椂鎷瘋礉緔㈠紩鏂
浠訛紝鍥犳ゆ仮澶嶆椂姣旇緝鎱銆備緥瀛愶細 BACK TABLE tbl_name TO 鈥/tmp/db_name/鈥;娉ㄦ剰錛屽繀欏昏佹湁 FILE
鏉冮檺鎵嶈兘鎵ц屾湰SQL錛屽苟涓旂洰褰 /tmp/db_name/ 蹇呴』鑳借 mysqld 鐢ㄦ埛鍙鍐欙紝瀵煎嚭鐨勬枃浠朵笉鑳借嗙洊宸茬粡瀛樺湪鐨勬枃浠訛紝浠ラ伩鍏嶅畨鍏ㄩ棶棰樸
鎮㈠嶇敤 BACKUP TABLE 鏂規硶澶囦喚鍑烘潵鐨勬枃浠訛紝鍙浠ヨ繍琛 RESTORE TABLE 璇鍙ユ潵鎮㈠嶆暟鎹琛ㄣ備緥瀛愶細 RESTORE TABLE FROM 鈥/tmp/db_name/鈥;鏉冮檺瑕佹眰綾似涓婇潰鎵榪般
3.2 SELECT INTO OUTFILE 鍒欐槸鎶婃暟鎹瀵煎嚭鏉ユ垚涓烘櫘閫氱殑鏂囨湰鏂囦歡錛屽彲浠ヨ嚜瀹氫箟瀛楁甸棿闅旂殑鏂瑰紡錛屾柟渚垮勭悊榪欎簺鏁版嵁銆備緥瀛愶細
SELECT INTO OUTFILE 鈥/tmp/db_name/tbl_name.txt鈥 FROM tbl_name;娉ㄦ剰錛屽繀欏昏佹湁
FILE 鏉冮檺鎵嶈兘鎵ц屾湰SQL錛屽苟涓旀枃浠 /tmp/db_name/tbl_name.txt 蹇呴』鑳借 mysqld
鐢ㄦ埛鍙鍐欙紝瀵煎嚭鐨勬枃浠朵笉鑳借嗙洊宸茬粡瀛樺湪鐨勬枃浠訛紝浠ラ伩鍏嶅畨鍏ㄩ棶棰樸
鐢 SELECT INTO OUTFILE 鏂規硶澶囦喚鍑烘潵鐨勬枃浠訛紝鍙浠ヨ繍琛 LOAD DATA INFILE 璇鍙ユ潵鎮㈠嶆暟鎹琛ㄣ備緥瀛愶細 LOAD
DATA INFILE 鈥/tmp/db_name/tbl_name.txt鈥 INTO TABLE
tbl_name;鏉冮檺瑕佹眰綾似涓婇潰鎵榪般傚掑叆鏁版嵁涔嬪墠錛屾暟鎹琛ㄨ佸凡緇忓瓨鍦ㄦ墠琛屻傚傛灉鎷呭績鏁版嵁浼氬彂鐢熼噸澶嶏紝鍙浠ュ炲姞 REPLACE
鍏抽敭瀛楁潵鏇挎崲宸叉湁璁板綍鎴栬呯敤 IGNORE 鍏抽敭瀛楁潵蹇界暐浠栦滑銆
4.鍚鐢ㄤ簩榪涘埗鏃ュ織(binlog)
閲囩敤 binlog 鐨勬柟娉曠浉瀵規潵璇存洿鐏墊椿錛岀渷蹇冪渷鍔涳紝鑰屼笖榪樺彲浠ユ敮鎸佸為噺澶囦喚銆
鍚鐢 binlog 鏃跺繀欏昏侀噸鍚 mysqld銆傞栧厛錛屽叧闂 mysqld錛屾墦寮 my.cnf錛屽姞鍏ヤ互涓嬪嚑琛岋細
server-id = 1
log-bin = binlog
log-bin-index = binlog.index
鐒跺悗鍚鍔 mysqld 灝卞彲浠ヤ簡銆傝繍琛岃繃紼嬩腑浼氫駭鐢 binlog.000001 浠ュ強 binlog.index錛屽墠闈㈢殑鏂囦歡鏄 mysqld
璁板綍鎵鏈夊規暟鎹鐨勬洿鏂版搷浣滐紝鍚庨潰鐨勬枃浠跺垯鏄鎵鏈 binlog 鐨勭儲寮曪紝閮戒笉鑳借交鏄撳垹闄ゃ傚叧浜 binlog 鐨勪俊鎮璇鋒煡鐪嬫墜鍐屻
闇瑕佸囦喚鏃訛紝鍙浠ュ厛鎵ц屼竴涓 SQL 璇鍙ワ紝璁 mysqld 緇堟㈠瑰綋鍓 binlog
鐨勫啓鍏ワ紝灝卞彲浠ユ妸鏂囦歡鐩存帴澶囦喚錛岃繖鏍風殑璇濆氨鑳借揪鍒板為噺澶囦喚鐨勭洰鐨勪簡錛 FLUSH LOGS;濡傛灉鏄澶囦喚澶嶅埗緋葷粺涓鐨勪粠鏈嶅姟鍣錛岃繕搴旇ュ囦喚
master.info 鍜 relay-log.info 鏂囦歡銆
澶囦喚鍑烘潵鐨 binlog 鏂囦歡鍙浠ョ敤 MySQL 鎻愪緵鐨勫伐鍏 mysqlbinlog 鏉ユ煡鐪嬶紝濡傦細
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001璇ュ伐鍏峰厑璁鎬綘鏄劇ず鎸囧畾鐨勬暟鎹搴撲笅鐨勬墍鏈
SQL 璇鍙ワ紝騫朵笖榪樺彲浠ラ檺瀹氭椂闂磋寖鍥達紝鐩稿綋鐨勬柟渚匡紝璇︾粏鐨勮鋒煡鐪嬫墜鍐屻
鎮㈠嶆椂錛屽彲浠ラ噰鐢ㄧ被似浠ヤ笅璇鍙ユ潵鍋氬埌錛 /usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001
| mysql -uyejr -pyejr db_name鎶 mysqlbinlog 杈撳嚭鐨 SQL 璇鍙ョ洿鎺ヤ綔涓鴻緭鍏ユ潵鎵ц屽畠銆
濡傛灉浣犳湁絀洪棽鐨勬満鍣錛屼笉濡ㄩ噰鐢ㄨ繖縐嶆柟寮忔潵澶囦喚銆傜敱浜庝綔涓 slave 鐨勬満鍣ㄦц兘瑕佹眰鐩稿逛笉鏄閭d箞楂橈紝鍥犳ゆ垚鏈浣庯紝鐢ㄤ綆鎴愭湰灝辮兘瀹炵幇澧為噺澶囦喚鑰屼笖榪樿兘鍒嗘媴涓閮ㄥ垎鏁版嵁鏌ヨ㈠帇鍔涳紝浣曚箰鑰屼笉涓哄憿錛

鍏蜂綋鏂規堬細

涓銆佷富浠庡悓姝

鍙浠ュ弬鑰僪ttp://kerry.blog.51cto.com/172631/110206

浜屻佸為噺澶囦喚錛

姣忓ぉ涓鍗12鐐瑰拰鏅氫笂12鐐瑰仛涓嬈″叏澶囷紝姣忛殧涓灝忔椂澶囦喚binlog,涔熷氨鏄澧為噺澶囦喚錛屽叿浣撴搷浣滃備笅錛

Linux涓嬪紑鍚痓inlog

/etc/my.cnf涓鐨刴ysqld閮ㄥ垎鍔犲叆:

[mysqld]

log-bin=../logs/mysql-bin

max-binlog-size=50M



windows涓嬪紑鍚痓inlog

%mysql%/my.ini涓鐨刴ysqld閮ㄥ垎鍔犲叆:

[mysqld]

log-bin =../logs/mysql-bin

max-binlog-size=50M



瀹屾暣澶囦喚鑴氭湰 錛堜粎鎻愪緵閮ㄥ垎浣滃弬鑰冿級

濡傛灉鏁版嵁搴撴暟鎹閲忔瘮杈冨ぇ錛屽彲浠ヤ竴澶╁叏澶囦竴嬈, 鍐嶆瘡闅斾竴灝忔椂澧為噺澶囦喚涓嬈★紱

#!/bin/sh

# mysql data backup script #

# use mysqlmp --help,get more detail.

BakDir=/backup/mysql

LogFile=/backup/mysql/mysqlbak.log

DATE=`date +%Y%m%d`

echo " " >> $LogFile

echo " " >> $LogFile

echo "-------------------------------------------" >> $LogFile

echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile

echo "--------------------------" >> $LogFile

cd $BakDir

DumpFile=$DATE.sql

GZDumpFile=$DATE.sql.tgz

mysqlmp --quick --all-databases --flush-logs

--delete-master-logs --lock-all-tables

> $DumpFile

echo "Dump Done" >> $LogFile

tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1

echo "[$GZDumpFile]Backup Success!" >> $LogFile

rm -f $DumpFile

#delete previous daily backup files:閲囩敤澧為噺澶囦喚鐨勬枃浠,濡傛灉瀹屾暣澶囦喚鍚,鍒欏垹闄ゅ為噺澶囦喚鐨勬枃浠.

cd $BakDir/daily

rm -f *

cd $BakDir

echo "Backup Done!"

echo "please Check $BakDir Directory!"

echo " it to your local disk or ftp to somewhere !!!"

ls -al $BakDir

涓婇潰鐨勮剼鏈鎶妋ysql澶囦喚鍒版湰鍦扮殑/backup/mysql鐩褰,澧為噺澶囦喚鐨勬枃浠舵斁鍦/backup/mysql/daily鐩褰曚笅.

澧為噺澶囦喚

澧為噺澶囦喚鐨勬暟鎹閲忔瘮杈冨皬,浣嗘槸瑕佸湪瀹屾暣澶囦喚鐨勫熀紜涓婃搷浣

澧為噺澶囦喚浣跨敤bin log,鑴氭湰濡備笅:

#!/bin/sh

# mysql binlog backup script

/usr/bin/mysqladmin flush-logs

DATADIR=/var/lib/mysql

BAKDIR=/backup/mysql/daily

###濡傛灉浣犲仛浜嗙壒孌婅劇疆,璇蜂慨鏀規ゅ勬垨鑰呬慨鏀瑰簲鐢ㄦゅ彉閲忕殑琛:緙虹渷鍙栨満鍣ㄥ悕,mysql緙虹渷涔熸槸鍙栨満鍣ㄥ悕

HOSTNAME=`uname -n`

cd $DATADIR

FILELIST=`cat $HOSTNAME-bin.index`

##璁$畻琛屾暟,涔熷氨鏄鏂囦歡鏁

COUNTER=0

for file in $FILELIST

do

COUNTER=`expr $COUNTER + 1 `

done

NextNum=0

for file in $FILELIST

do

base=`basename $file`

NextNum=`expr $NextNum + 1`

if [ $NextNum -eq $COUNTER ]

then

echo "skip lastest"

else

dest=$BAKDIR/$base

if(test -e $dest)

then

echo "skip exist $base"

else

echo "ing $base"

cp $base $BAKDIR

fi

fi

done



echo "backup mysql binlog ok"

澧為噺澶囦喚鑴氭湰鏄澶囦喚鍓峟lush-logs,mysql浼氳嚜鍔ㄦ妸鍐呭瓨涓鐨勬棩蹇楁斁鍒版枃浠墮噷,鐒跺悗鐢熸垚涓涓鏂扮殑鏃ュ織鏂囦歡,鎵浠ユ垜浠鍙闇瑕佸囦喚鍓嶉潰鐨勫嚑涓鍗沖彲,涔熷氨鏄涓嶅囦喚鏈鍚庝竴涓.

鍥犱負浠庝笂嬈″囦喚鍒版湰嬈″囦喚涔熷彲鑳戒細鏈夊氫釜鏃ュ織鏂囦歡鐢熸垚,鎵浠ヨ佹嫻嬫枃浠,濡傛灉宸茬粡澶囦喚榪,灝變笉鐢ㄥ囦喚浜.

鏁版嵁榪樺師錛

鍏堣繕鍘熸渶榪戠殑瀹屽叏澶囦喚鏁版嵁錛

mysql -hhostname -uusername -ppassword databasename < backupfile.sql



鍐嶈繕鍘焍inlog 錛

./mysqlbinlog --start-date="2016-04-10 17:30:05" --stop-date="2016-04-10 17:41:28" /usr/local/mysql/data/mysql-bin.000002 |mysql -u root -p123456



5.鎷瘋礉鏂囦歡
鐩存帴澶囦喚鏁版嵁鏂囦歡鐩歌緝鍓嶅嚑縐嶆柟娉曪紝澶囦喚鏁版嵁鏂囦歡鏈涓虹洿鎺ャ佸揩閫熴佹柟渚匡紝緙虹偣鏄鍩烘湰涓婁笉鑳藉疄鐜板為噺澶囦喚銆
涓轟簡淇濊瘉鏁版嵁鐨勪竴鑷存э紝闇瑕佸湪闈犺儗鏂囦歡鍓嶏紝鎵ц屼互涓 SQL 璇鍙ワ細 FLUSH TABLES WITH READ
LOCK;涔熷氨鏄鎶婂唴瀛樹腑鐨勬暟鎹閮藉埛鏂板埌紓佺洏涓錛屽悓鏃墮攣瀹氭暟鎹琛錛屼互淇濊瘉鎷瘋礉榪囩▼涓涓嶄細鏈夋柊鐨勬暟鎹鍐欏叆銆傝繖縐嶆柟娉曞囦喚鍑烘潵鐨勬暟鎹鎮㈠嶄篃寰堢畝鍗曪紝鐩存帴鎷瘋礉鍥
鍘熸潵鐨勬暟鎹搴撶洰褰曚笅鍗沖彲銆
娉ㄦ剰錛屽逛簬 Innodb 綾誨瀷琛ㄦ潵璇達紝榪橀渶瑕佸囦喚鍏舵棩蹇楁枃浠訛紝鍗 ib_logfile* 鏂囦歡銆傚洜涓哄綋 Innodb 琛ㄦ崯鍧忔椂錛屽氨鍙浠ヤ緷闈犺繖浜涙棩蹇楁枃浠舵潵鎮㈠嶃
6.鍒╃敤rsync澶囦喚
rsync浣滀負鍚屾ュ伐鍏蜂篃鍙浠ョ敤鏉ュ仛澶囦喚,浣嗚侀厤緗鏈嶅姟鍣ㄧ鍜屽㈡埛絝
紺轟緥rsync -vzrtopg --progress --delete [email protected]::root /tmp/
鐩稿叧rsync閰嶇疆鍙鍙傝僪ttp://fanqiang.chinaunix.net/a6/b7/20010908/1305001258.html
緙虹偣鏄痳sync鏄鏍規嵁鏂囦歡淇鏀規椂闂村仛鐨勫為噺澶囦喚,鎵浠ュ囦喚鏁版嵁搴撻兘鏄鍏ㄥ,騫朵笖閰嶇疆姣旇緝楹葷儲.





7.鍒╃敤BigDump宸ュ叿瀵煎叆瓚呭ぇMySQL鏁版嵁搴撳囦喚鏂囦歡

甯哥敤鐨 MySQL 鏁版嵁搴撴仮澶嶅伐鍏鳳紙涔熻兘榪涜屽囦喚鎿嶄綔錛夋槸 phpMyAdmin錛岃繖鏄涓涓寮婧愩佸厤璐圭殑宸ュ叿錛屽ぇ澶氭暟涓繪満鍟嗭紙渚嬪 Hawkhost錛夐兘浼氬厤璐規彁渚 銆傜浉淇″緢澶氱珯闀誇篃鐢ㄨ繃 phpMyAdmin 鏉ヨ繘琛岀綉絝欐暟鎹搴撶殑澶囦喚鍜屾仮澶嶏紝紜瀹炲緢鏂逛究錛屽苟涓旀湁澶氬浗璇璦鐣岄潰銆備笉榪囷紝鏈変竴縐嶆儏鍐靛彲鑳戒綘榪樻病紕板埌錛屽氨鏄褰撲綘鐨勬暟鎹搴撲綋縐姣旇緝澶ф椂錛屼緥濡
SQL 澶囦喚鏂囦歡澶т簬 2MB錛岀敋鑷沖ぇ浜 10MB錛岃繖涓鏃跺欏傛灉浣犻氳繃 phpMyAdmin 鏉ヨ繘琛屾暟鎹搴撶殑鎮㈠嶏紝灝變細鍑洪敊錛屾樉紺哄備笅鐨勬彁紺猴細



榪欐槸鍥犱負浣犵殑 SQL 鏂囦歡浣撶Н澶澶э紝瓚呰繃浜 phpMyAdmin 鐨勫勭悊鑳藉姏錛岃繖縐嶆儏鍐靛湪緗戠粶閫熷害姣旇緝鎱㈢殑鎯呭喌涓嬪挨涓虹獊鍑猴紝渚嬪傜珯闀垮湪鍛ㄦ湯鏅氫笂8鐐硅繖涓緗戠粶鎷ユ尋鐨勬椂孌靛皾璇曚嬌鐢 phpMyAdmin 鏉ユ仮澶嶅ぇ鍨 MySQL 鏁版嵁搴撳囦喚錛屽氨瀹規槗閬囧埌榪欑嶉棶棰樸

寰堟樉鐒 phpMyAdmin 鍙閫傜敤浜庢仮澶嶆瘮杈冨皬鐨 SQL 鏂囦歡澶囦喚銆傚逛簬瓚呭ぇ MySQL 鏁版嵁搴撳囦喚鐨勬仮澶嶏紝浣犲繀欏繪崲涓涓涓撶敤鐨勬仮澶嶅伐鍏鳳紝閭e氨鏄錛欱igDump錛佸伐鍏蜂笅杞藉湴鍧http://www.jb51.net/codes/37147.html







8.浣跨敤bacula(www.bacula.org)榪涜屽囦喚
zZ

bacula閲囩敤妯″潡鍖栬捐★紝閲囩敤c/s鏋勬灦錛岀悊璁轟笂鍙浠ユ妸浠繪剰n鍙頒富鏈虹殑璧勬枡澶囦喚鍒頒換鎰弉鍙
涓錛岃屼綘涓嶉渶瑕佸湪姣忓彴鏈哄櫒涓婇兘鍐欎竴涓閰嶇疆鏂囦歡鎺у埗浠栦滑榪愪綔錛屾墍鏈変富瑕佺殑宸ヤ綔閮藉湪涓
鍙癲irector涓婃帶鍒躲傜櫥闄嗕笂director浣犲氨鍙浠ョ煡閬撲粈涔堝囦喚姝e湪榪愯岋紝浠涔堝囦喚鎴愬姛浜
錛屼粈涔堝囦喚澶辮觸浜嗭紝鎵鏈夌殑log涔熶細闆嗕腑鍒頒綘鎸囧畾鐨勫湴鏂癸紝璁╃$悊宸ヤ綔鏇寸畝鍗曚竴鐐廣傛仮澶
鐨勬椂鍊欎篃寰堢畝鍗曪紝綆鍗曡繍琛屽嚑涓鍛戒護浣犲氨鍙浠ユ妸鎸囧畾鐨勫囦喚鎮㈠嶃傛敮鎸佸畬鍏ㄥ囦喚錛屽樊寮
澶囦喚錛屽為噺澶囦喚錛涙敮鎸佹妸澶囦喚鍐欏埌紜鐩樻枃浠朵腑錛屼篃鏀鎸佸啓鍒扮佸甫涓銆傛敮鎸佸鉤鍙扮浉褰撳氾紝
璁劇疆鍖呮嫭win騫沖彴錛堝囦喚win錛岃繕涓嶆敮鎸佸囦喚鍒皐in錛夈傚綋鐒朵篃鏈変竴浜涚己鐐癸紝姣斿傚瑰苟鍙戝
浠芥敮鎸佹湭緇忓交搴曟祴璇曪紝浣滆呭gО鏈濂戒笉瑕佸皾璇曪紝闄ら潪浣犺嚜宸辯粡榪囨祴璇曘傝繕鏈変竴鐐瑰氨鏄鏂
妗d腑娌℃湁涓涓猶uick start銆傘傛枃妗eお璇︾粏浜嗙偣錛屾病鏈夌偣鑰愬績璇諱笉瀹屻傘
1,鍓嶆湡鍑嗗
bacula鏈変笁涓妯″潡緇勬垚銆備竴涓鏄疍irector錛岀敤浜庢寚鎸ユ暣涓緋葷粺榪愯岋紝job schele,閫氱煡
鍙﹀栦袱涓妯″潡宸ヤ綔銆備竴涓鏄瘲torage Daemon錛屽畠鏄瀛樺偍絝錛岃礋璐f妸緗戠粶涓浼犳潵鐨勬暟鎹澶
浠藉埌鏈鏈,鎮㈠嶇殑鏃跺欒礋璐f妸鏁版嵁浼犲嚭鍘匯傛渶鍚庝竴涓鏄疐ile Daemon錛屽囦喚鏃舵妸鏂囦歡浼犲嚭
錛屾仮澶嶆椂鎺ュ彈鏁版嵁騫舵仮澶嶃傚叾瀹炰笂闈㈢殑涓変釜妯″潡騫朵笉鑳借゜acula榪愯岋紝鍙﹀栦竴涓妯″潡鏄
鏁版嵁搴撴ā鍧椼傝繖涓妯″潡鍙浠ラ氳繃SQLite錛堢紪璇戣繘bacula錛夛紝涔熷彲浠ヤ嬌鐢∕ySql鍜孭ostgreS
ql,浣滆呮帹鑽愮殑鏄痬ysql銆傝繕闇瑕佷竴浜涚涓夋柟搴撴墠鑳界紪璇戱細GZIP鍜孯eadline銆傛枃妗d腑娌℃湁
璇存槑錛屼絾鍏跺疄榪橀渶瑕佸彟澶栦竴涓杞浠舵墠鑳戒繚璇佹e父榪愯岋細ntp銆傚洜涓哄樊寮傚囦喚鍜屽為噺澶囦喚閮
渚濊禆浜庢枃浠朵慨鏀規椂闂存潵鍐沖畾鏄鍚﹀囦喚銆傚崟鏈哄囦喚闂棰樹笉澶э紝緗戠粶澶囦喚灝遍渶瑕佽冭檻鍚勪釜涓
鏈虹殑鏃墮棿宸寮備簡銆傛墍浠ユ垜鎺ㄨ崘鎵鏈変富鏈烘瘡澶╄繍琛屼袱嬈ntpdate鏉ヨ皟鍑嗘椂闂淬傚傛灉浣犲湪sjtu
緗戠粶閲岄潰錛屽彲浠ヤ嬌鐢╠ns.sjtu.e.cn鏉ヨ皟鏍℃椂闂淬
濡傛灉浣犱嬌鐢ㄧ殑鏄紓佸甫鏈哄囦喚錛岃繕闇瑕佹鏌ヤ竴涓嬩綘鐨勭佸甫鏈烘槸鍚﹁鏀鎸併傝屼笖鏈濂藉幓闃呰
鏂囨。涓鐨刄nderstanding Pools, Volumes and Labels涓鑺傘傚惁鍒欓厤緗鐨勬椂鍊欎綘浼氭悶寰楁檿
涔庝箮鐨勩
2錛岀紪璇
緙栬瘧榪囩▼寰堢畝鍗曪紝鏂囨。涔熷緢璇︾粏錛屽氨涓嶅叿浣撲粙緇嶄簡銆傛敞鎰忎竴鐐規槸琚澶囦喚鏈哄櫒涓婂彲浠ヤ嬌鐢-
-enable-client-only緙栬瘧銆
3錛屾暟鎹搴撳緩絝
涓嬮潰璇磋磎ysql鐨勫緩絝嬭繃紼嬨傞栧厛鍦ㄤ唬鐮佹牴鐩褰曚腑
cd src/cats/
./grant_mysql_privileges
./create_mysql_database
./make_mysql_tables
濡傛灉mysql涓嶆槸鍦ㄦ湰鏈轟笂錛屽彲浠ュ炲姞-h鍙傛暟鎸囧畾銆傞粯璁ら噰鐢ㄧ┖瀵嗙爜鐨剅oot鐢ㄦ埛錛屽彲浠ョ敤-p
鍙傛暟浣垮叾閲囩敤瀵嗙爜楠岃瘉銆傚傛灉瑕侀噰鐢ㄥ叾瀹冪敤鎴峰氨鍙鑳戒慨鏀硅剼鏈浜嗭紝寰堢畝鍗曠殑銆
榛樿ゅ緩絝嬬殑bacula鐢ㄦ埛錛岃屼笖鏄絀哄瘑鐮併傛帹鑽愯繕鏄淇鏀瑰瘑鐮併
bacula鍙浠ヤ嬌鐢ㄤ換鎰忓氱殑鏁版嵁搴擄紝涔熷氨鏄璇翠綘鍙浠ヤ嬌鐢ㄤ袱涓鏁版嵁搴擄紝鐒跺悗鍐嶈╄繖涓や釜鏁
鎹搴撲簰鐩稿囦喚銆
4錛岃繍琛孎ile Daemon(fd)
閰嶇疆鍓嶅厛璇存槑涓鐐歸渶瑕佹敞鎰忕殑,閰嶇疆涓鎸囧畾涓繪満鍦板潃鏃訛紝鏈濂戒嬌鐢╥p錛屾垜閰嶇疆鏃朵嬌鐢ㄤ富鏈
鍚嶈矊似涓嶅彲浠ャ傘傝屼笖瑕佹槸瀵瑰栫殑ip錛岀敤127.0.0.1涓嶈
fd榪愯屽湪琚澶囦喚涓繪満涓娿傞厤緗鐩稿綋綆鍗曪紝鎸囧畾鍝涓狣irector鍙浠ヨ繍琛岃皟搴﹀畠錛屽瘑鐮佹槸浠
涔堬紝fd鐨勫悕瀛楋紝宸ヤ綔鐩褰曪紝log寰鍝閲屽彂灝卞彲浠ヤ簡銆備慨鏀逛慨鏀規爣閰嶅氨鍙浠ヤ簡銆
5錛岃繍琛孲torage Daemon(sd)
sd榪愯屽湪鎺ュ彈澶囦喚鐨勬満鍣ㄤ笂銆傞厤緗涔熺浉褰撶畝鍗曪紝鍙鏄姣攆d澶氬嚭浜嗕竴涓猟evice鐢ㄤ簬鎸囧畾浣
鐢ㄤ粈涔堢‖浠跺囦喚鏁版嵁銆傚彲浠ユ妸澶氫釜鏁版嵁澶囦喚鍒頒竴涓猟evice錛屽傛灉鏄紓佸甫鏈哄囦喚bacula鍦
鎮㈠嶇殑鏃跺欎細鍛婅瘔浣犺佷嬌鐢ㄥ摢涓紓佸甫銆傚洜涓烘垜浣跨敤鐨勬槸鏂囦歡澶囦喚鐨勬ā寮忥紝鎵浠ュ氨緇欐瘡涓
澶囦喚閰嶇疆涓涓猟evice錛屾妸涓嶅悓鐨勫囦喚鏀懼埌涓嶅悓鐩褰曞幓錛屼笅闈㈡槸涓涓綆鍗曟枃浠跺囦喚device
閰嶇疆
Device {
Name = dbdev
Media Type = File #榪欎釜闅忎究鍐欙紝浣嗘槸鍦ㄩ厤緗瓺irector涓鐨凷torage鏃訛紝蹇呴』鍐欎竴
鏍風殑
Archive Device = /var/bak/db#澶囦喚鍒板摢涓鐩褰曪紝蹇呴』瀛樺湪
LabelMedia = yes; # 鑷鍔╨abel
Random Access = Yes;
AutomaticMount = yes;

Ⅱ 干貨 | PostgreSQL數據表文件底層結構布局分析

PostgreSQL提供了穩定、可靠的數據存儲與管理功能,用戶無需深究其底層原理,只需完成建庫、建表、插入數據等基本操作,數據即可被持久化於PostgreSQL資料庫中。然而,對於數據存儲在磁碟上的位置、形式以及格式,我們充滿好奇。本文旨在通過源碼分析與實踐操作,深入解析PostgreSQL底層數據的存儲方式。

在PostgreSQL中,每個表由一個或多個堆文件表示,每個文件默認為1GB大小。當文件達到1GB後,PostgreSQL會創建新的堆文件。文件命名遵循特定規則:表OID加上序號ID(從1開始遞增)。例如,一個名為student的表對應的堆文件名是16387。

資料庫和表文件名由OID命名,定義在postgres_ext.h文件中。當數據被存儲在PostgreSQL中時,用戶插入的數據會依次存儲在常規文件中,這些文件被稱為堆文件。堆文件有四種類型:普通堆文件、臨時堆文件、序列堆文件和TOAST表堆文件。其中,普通堆文件用於常規數據存儲。

在研究表文件之前,需知曉PostgreSQL的數據目錄位置,即PGDATA。通過psql命令SHOW DATA_DIRECTORY可以獲取。對於關系型資料庫,所有表都按資料庫進行管理,即表屬於特定資料庫。

在沒有數據時,文件大小為0位元組。插入數據後,文件大小會增加至8KB。PostgreSQL在向表中插入數據時,以8KB為單位進行管理。文件大小達到1GB後,創建新文件,繼續上述過程。

堆表文件由頁組成,頁的默認大小為8KB。每個頁包含頁頭、行指針和堆元組。頁頭數據結構包括頁的最後更改的LSN、校驗和、位標志、空閑空間的開始和結束位置、特殊空間起始偏移量、頁面大小及版本號、可刪除的舊XID、行指針數組。

行指針數組用於索引元組,數組元素個數取決於頁中元組的數量。元組結構分為普通數據元組和TOAST元組,用於存儲變長數據。普通元組包含堆元組頭部、點陣圖和用戶存儲的數據。頭部結構包含事務ID、事務ID、命令ID、元組表示符和元組狀態信息。

為了查看堆表文件的詳細信息,PostgreSQL提供擴展功能如pageinspect,可通過SQL命令創建使用。使用page_header()、get_raw_page()、heap_page_items()等函數可獲取頁頭信息、元組頭部信息和數據信息。

藉助工具如hexmp和od,可以將二進制文件轉換為十六進制編碼,便於分析堆表文件的數據內容。通過分析頁頭、行指針和元組結構,可以深入了解PostgreSQL表文件的底層布局。

閱讀全文

與pg庫二進制和源碼的區別相關的資料

熱點內容
windows命令打開文件 瀏覽:483
php個人簡歷模板 瀏覽:911
sshkeygenlinux 瀏覽:655
java包的創建 瀏覽:682
vlog用什麼app可以拍長視頻 瀏覽:578
安卓手機為什麼總是出現藍屏 瀏覽:255
u盤超級加密3000加密後 瀏覽:879
sql插入數據命令 瀏覽:470
u盤根目錄文件夾是哪個 瀏覽:693
新預演算法預算編制 瀏覽:622
perl怎樣遍歷文件夾 瀏覽:636
安卓手機如何更好的保護隱私 瀏覽:316
程序員書籍知乎 瀏覽:154
王者安卓v區怎麼轉移到蘋果 瀏覽:449
加密區卸載 瀏覽:122
女程序員壓力大想辭職 瀏覽:681
演算法體現在哪裡 瀏覽:219
阿里雲個人伺服器推薦 瀏覽:363
汽車識別視頻文件夾 瀏覽:110
檔案伺服器不可用是什麼意思 瀏覽:525