Ⅰ 娴呰皥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表文件的底层布局。