MySqldump සමඟ බැකප් කිරීමට තොරතුරු
IMHO උපස්ථ කිරීම ඔබ එය වෙත ළඟා වන්නේ කෙසේදැයි දන්නේ නම් එය කලාවක් බවට පත්ව ඇත
ඔබට විකල්ප ඇත
විකල්ප 1: mysqldump සම්පූර්ණ mysql උදාහරණයක්
මෙය පහසුම එක, මොළයක් නැති !!!
mysqldump -h... -u... -p... --hex-blob --routines --triggers --all-databases | gzip > MySQLData.sql.gz
එක් ගොනුවක ලියා ඇති සියල්ල: වගු ව්යුහයන්, දර්ශක, ප්රේරක, ගබඩා කළ ක්රියා පටිපාටි, පරිශීලකයින්, සංකේතාත්මක මුරපද. වෙනත් mysqldump විකල්පයන්ට විවිධ මෝස්තර INSERT විධානයන්, ද්විමය ල logs ු-සටහන් ගොනුව සහ ස්ථාන ඛණ්ඩාංක, දත්ත සමුදා නිර්මාණය කිරීමේ විකල්ප, අර්ධ දත්ත (- කොතැනක විකල්පය) යනාදිය අපනයනය කළ හැකිය.
විකල්ප 2: mysqldump වෙනම දත්ත ගොනු වෙනම දත්ත ගොනු වලට
දත්ත සමුදා ලැයිස්තුවක් නිර්මාණය කිරීමෙන් ආරම්භ කරන්න (මෙය කිරීමට ක්රම 2 ක්)
තාක්ෂණය 1
mysql -h... -u... -p... -A --skip-column-names -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql')" > ListOfDatabases.txt
තාක්ෂණය 2
mysql -h... -u... -p... -A --skip-column-names -e"SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql')" > ListOfDatabases.txt
තාක්ෂණික ක්රමය 1 වේගවත්ම ක්රමයයි. ටෙක්නික් 2 යනු විශ්වාසදායක හා ආරක්ෂිතයි. තාක්ෂණය 2 වඩා හොඳ වන්නේ, සමහර විට, පරිශීලකයින් දත්ත සමුදායට සම්බන්ධ නොවන / var / lib / mysql (datadir) හි පොදු අරමුණු සඳහා ෆෝල්ඩර නිර්මාණය කරන බැවිනි. Information_schema.schemata වගුවේ තොරතුරු_චෙමා ෆෝල්ඩරය දත්ත සමුදායක් ලෙස ලියාපදිංචි කරයි. ටෙක්නික් 2 මගින් mysql දත්ත අඩංගු නොවන ෆෝල්ඩර මඟ හරිනු ඇත.
ඔබ දත්ත සමුදායන් ලැයිස්තුව සම්පාදනය කළ පසු, ඔබට ලැයිස්තුව හරහා ඉදිරියට ගොස් ඒවා අවශ්ය නම් සමාන්තරව වුවද ඒවා mysqldump කළ හැකිය.
for DB in `cat ListOfDatabases.txt`
do
mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
done
wait
එකවර දියත් කිරීමට තරම් දත්ත සමුදායන් තිබේ නම්, සමාන්තරව ඒවා එකවර 10 ක් දමන්න:
COMMIT_COUNT=0
COMMIT_LIMIT=10
for DB in `cat ListOfDatabases.txt`
do
mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
then
COMMIT_COUNT=0
wait
fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
wait
fi
විකල්ප 3: mysqldump වෙනම දත්ත ගොනු වලට වෙනම වගු
වගු ලැයිස්තුවක් නිර්මාණය කිරීමෙන් ආරම්භ කරන්න
mysql -h... -u... -p... -A --skip-column-names -e"SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql')" > ListOfTables.txt
ඉන්පසු සියලුම වගු 10 ක කණ්ඩායම් වලට දමන්න
COMMIT_COUNT=0
COMMIT_LIMIT=10
for DBTB in `cat ListOfTables.txt`
do
DB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $1}'`
TB=`echo ${DBTB} | sed 's/\./ /g' | awk '{print $2}'`
mysqldump -h... -u... -p... --hex-blob --triggers ${DB} ${TB} | gzip > ${DB}_${TB}.sql.gz &
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
then
COMMIT_COUNT=0
wait
fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
wait
fi
විකල්ප 4: ඔබේ නිරූපණය භාවිතා කරන්න
පිරිසිදු ස්නැප්ෂොට් සඳහා ඉහත සඳහන් විකල්ප සහ ශිල්පීය ක්රමවල වෙනස්කම් උත්සාහ කරන්න
උදාහරණ
- එක් එක් වගු නඟින හෝ බැස යන ප්රමාණය අනුව වගු ලැයිස්තුව ඇණවුම් කරන්න.
- වෙනම ක්රියාවලියක් භාවිතා කරමින්, mysqldumps දියත් කිරීමට පෙර "FLUSH TABLES WITH READ LOCK; SELECT SLEEP (86400)" ධාවනය කරන්න. MySqldumps අවසන් වූ පසු මෙම ක්රියාවලිය මරා දමන්න. දත්ත සමුදායක InnoDB සහ MyISAM යන දෙකම අඩංගු නම් මෙය ප්රයෝජනවත් වේ
- දින වකවානු සහිත ෆෝල්ඩර වල mysqldumps සුරකින්න සහ පැරණි උපස්ථ ෆෝල්ඩර කරකවන්න.
- සම්පූර්ණ අවස්ථාවම mysqldumps හුදකලා සේවාදායකයට පටවන්න.
අවවාදය
සෑම දෙයක්ම ගෙන එන්නේ විකල්ප 1 පමණි. මෙහි ඇති අවාසිය නම්, මේ ආකාරයෙන් නිර්මාණය කරන ලද mysqldumps නැවත පූරණය කළ හැක්කේ mysqldump ජනනය කළ mysql හි එකම majot නිකුතුවට පමණි. වෙනත් වචන වලින් කිවහොත්, MySQL 5.0 දත්ත ගබඩාවෙන් mysqldump 5.1 හෝ 5.5 තුළ පූරණය කළ නොහැක. හේතුව ? ප්රධාන නිකුතු අතර mysql යෝජනා ක්රමය සම්පූර්ණයෙන්ම වෙනස් වේ.
2 සහ 3 විකල්ප වලට පරිශීලක නාම සහ මුරපද සුරැකීම ඇතුළත් නොවේ.
කියවිය හැකි සහ වඩා අතේ ගෙන යා හැකි පරිශීලකයින් සඳහා SQL ප්රදාන බැහැර කිරීමේ සාමාන්ය ක්රමය මෙන්න
mysql -h... -u... -p... --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -h... -u... -p... --skip-column-names -A | sed 's/$/;/g' > MySQLGrants.sql
3 වන විකල්පය මඟින් ගබඩා කර ඇති ක්රියා පටිපාටි සුරකිනු නොලැබේ, එබැවින් ඔබට පහත සඳහන් දෑ කළ හැකිය
mysqldump -h... -u... -p... --no-data --no-create-info --routines > MySQLStoredProcedures.sql &
සැලකිල්ලට ගත යුතු තවත් කරුණක් වන්නේ InnoDB සම්බන්ධයෙනි. ඔබ සතුව විශාල InnoDB ස්වාරක්ෂක තටාකයක් තිබේ නම්, ඕනෑම උපස්ථයක් සිදු කිරීමට පෙර ඔබට හැකි උපරිමයෙන් එය ගලවා ගැනීම අර්ථවත් කරයි. එසේ නොමැතිනම්, MySQL බෆර් තටාකයෙන් පිටත ඉතිරිව ඇති අපිරිසිදු පිටුවක් සහිත වගු ගත කිරීමට කාලය වැය කරයි. මෙන්න මම යෝජනා කරන්නේ:
උපස්ථය සිදු කිරීමට පැය 1 කට පමණ පෙර මෙම SQL විධානය ක්රියාත්මක කරන්න
SET GLOBAL innodb_max_dirty_pages_pct = 0;
MySQL 5.5 හි පෙරනිමි innodb_max_dirty_pages_pct 75 වේ. MySQL 5.1 සහ පසුපසට පෙරනිමි innodb_max_dirty_pages_pct 90 වේ. Innodb_max_dirty_pages_pct 0 ලෙස සැකසීමෙන්, මෙය අපිරිසිදු පිටු තැටියට ගලා යාම ඉක්මන් කරයි. ඕනෑම InnoDB වගු වලට එරෙහිව mysqldump සිදුකිරීමට පෙර InnoDB දත්තවල අසම්පූර්ණ ද්වි-අදියර කොමිස් පිරිසිදු කිරීමේ බලපෑම මෙය වළක්වයි.
MySQLDump හි අවසාන වචනය
බොහෝ අය වෙනත් මෙවලම් වලට පක්ෂව mysqldump වෙතින් y ත් වන අතර එම මෙවලම් ඇත්තෙන්ම හොඳයි.
එවැනි මෙවලම් ඇතුළත් වේ
- මැට්කිට් (පර්කෝනා වෙතින් සමාන්තරව ඩම්ප් / ප්රතිස්ථාපන ස්ක්රිප්ට් [අවලංගු කරන ලද නමුත් විශිෂ්ටයි)
- එක්ස්ට්රාබැක්අප් (පර්කෝනා වෙතින් ටොප්නොච් ස්නැප්ෂොට් උපස්ථය)
- සීඩීපී ආර් 1 සොෆ්ට් ( නියමිත වේලාවට ස්නැප්ෂොට් ගන්නා MySQL මොඩියුල විකල්පය )
- MySQL ව්යවසාය උපස්ථය (කලින් InnoDB උණුසුම් උපස්ථ [වාණිජ])
ඔබට සැබෑ MySQL DBA හි ආත්මය තිබේ නම්, ඔබට mysqldump වැලඳ ගත හැකි අතර ඒ පිළිබඳව සම්පූර්ණ ප්රවීණත්වයක් ලබා ගත හැකිය. ඔබගේ සියලු උපස්ථයන් MySQL DBA ලෙස ඔබේ කුසලතාවන්ගේ පිළිබිඹුවක් වේවා .