{"id":4713,"date":"2026-06-14T19:31:06","date_gmt":"2026-06-14T19:31:06","guid":{"rendered":"https:\/\/cloudsave.app\/?p=4713"},"modified":"2026-06-15T15:39:46","modified_gmt":"2026-06-15T15:39:46","slug":"k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0","status":"publish","type":"post","link":"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/","title":{"rendered":"K\u1ebb s\u00e1t nh\u00e2n th\u1ea7m l\u1eb7ng: C\u00e1ch ph\u00e1t hi\u1ec7n c\u00e1c b\u1ea3n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1ecb h\u1ecfng tr\u01b0\u1edbc khi th\u1ea3m h\u1ecda \u1eadp \u0111\u1ebfn"},"content":{"rendered":"<p>Trong th\u1ebf gi\u1edbi \u0111\u1ea7y r\u1ee7i ro c\u1ee7a qu\u1ea3n tr\u1ecb c\u01a1 s\u1edf d\u1eef li\u1ec7u v\u00e0 k\u1ef9 thu\u1eadt \u0111\u1ed9 tin c\u1eady c\u1ee7a trang web (SRE), c\u00f3 m\u1ed9t ti\u00ean \u0111\u1ec1 n\u1ed5i ti\u1ebfng: <em>B\u1ea3n sao l\u01b0u c\u1ee7a Schr\u00f6dinger<\/em>. Tr\u1ea1ng th\u00e1i c\u1ee7a b\u1ea5t k\u1ef3 b\u1ea3n sao l\u01b0u n\u00e0o c\u0169ng l\u00e0 \u1ea9n s\u1ed1 cho \u0111\u1ebfn khi b\u1ea1n c\u1ed1 g\u1eafng kh\u00f4i ph\u1ee5c n\u00f3. Cho \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m \u0111\u00f3, n\u00f3 t\u1ed3n t\u1ea1i \u1edf tr\u1ea1ng th\u00e1i l\u01b0\u1ee3ng t\u1eed: v\u1eeba ho\u00e0n h\u1ea3o, v\u1eeba b\u1ecb h\u1ecfng ho\u00e0n to\u00e0n.<\/p>\n<p>\u0110\u1ed1i v\u1edbi c\u00e1c k\u1ef9 s\u01b0 DevOps v\u00e0 qu\u1ea3n tr\u1ecb vi\u00ean c\u01a1 s\u1edf d\u1eef li\u1ec7u (DBA), vi\u1ec7c ph\u00e1t hi\u1ec7n ra b\u1ea3n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u quan tr\u1ecdng b\u1ecb h\u1ecfng trong m\u1ed9t s\u1ef1 c\u1ed1 \u0111ang di\u1ec5n ra l\u00e0 k\u1ecbch b\u1ea3n \u00e1c m\u1ed9ng t\u1ed3i t\u1ec7 nh\u1ea5t. N\u00f3 bi\u1ebfn m\u1ed9t thao t\u00e1c kh\u00f4i ph\u1ee5c th\u00f4ng th\u01b0\u1eddng th\u00e0nh m\u1ed9t th\u1ea3m h\u1ecda m\u1ea5t d\u1eef li\u1ec7u. &#8220;K\u1ebb gi\u1ebft ng\u01b0\u1eddi th\u1ea7m l\u1eb7ng&#8221; n\u00e0y \u0111\u1ed1i v\u1edbi t\u00ednh to\u00e0n v\u1eb9n c\u1ee7a d\u1eef li\u1ec7u th\u01b0\u1eddng kh\u00f4ng b\u1ecb ph\u00e1t hi\u1ec7n v\u00ec c\u00e1c t\u00e1c v\u1ee5 sao l\u01b0u th\u01b0\u1eddng b\u00e1o c\u00e1o <code>Exit Code 0<\/code> th\u00e0nh c\u00f4ng ngay c\u1ea3 khi d\u1eef li\u1ec7u b\u00ean trong \u0111\u00e3 b\u1ecb x\u00e2m ph\u1ea1m.<\/p>\n<p>Trong h\u01b0\u1edbng d\u1eabn to\u00e0n di\u1ec7n n\u00e0y, ch\u00fang ta s\u1ebd ph\u00e2n t\u00edch c\u1ea5u tr\u00fac c\u1ee7a s\u1ef1 h\u1ecfng h\u00f3c b\u1ea3n sao l\u01b0u, kh\u00e1m ph\u00e1 c\u00e1c k\u1ef9 thu\u1eadt x\u00e1c th\u1ef1c d\u00e0nh ri\u00eang cho t\u1eebng c\u01a1 s\u1edf d\u1eef li\u1ec7u v\u00e0 ch\u1ee9ng minh c\u00e1ch x\u00e2y d\u1ef1ng c\u00e1c quy tr\u00ecnh kh\u00f4i ph\u1ee5c t\u1ef1 \u0111\u1ed9ng, an to\u00e0n cho m\u00f4i tr\u01b0\u1eddng s\u1ea3n xu\u1ea5t.<\/p>\n<h2>C\u1ea5u tr\u00fac c\u1ee7a s\u1ef1 h\u1ecfng h\u00f3c b\u1ea3n sao l\u01b0u<\/h2>\n<p>\u0110\u1ec3 ph\u00e1t hi\u1ec7n s\u1ef1 h\u1ecfng h\u00f3c, tr\u01b0\u1edbc ti\u00ean b\u1ea1n ph\u1ea3i hi\u1ec3u c\u00e1ch n\u00f3 x\u1ea3y ra. S\u1ef1 h\u1ecfng h\u00f3c b\u1ea3n sao l\u01b0u th\u01b0\u1eddng r\u01a1i v\u00e0o hai lo\u1ea1i: v\u1eadt l\u00fd (c\u1ea5p \u0111\u1ed9 c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng) v\u00e0 logic (c\u1ea5p \u0111\u1ed9 \u1ee9ng d\u1ee5ng).<\/p>\n<h3>H\u1ecfng h\u00f3c v\u1eadt l\u00fd<\/h3>\n<p>H\u1ecfng h\u00f3c v\u1eadt l\u00fd x\u1ea3y ra khi c\u00e1c bit th\u1ef1c t\u1ebf tr\u00ean ph\u01b0\u01a1ng ti\u1ec7n l\u01b0u tr\u1eef b\u1ecb thay \u0111\u1ed5i. \u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 x\u1ea3y ra trong qu\u00e1 tr\u00ecnh \u0111\u1ecdc t\u1eeb \u0111\u0129a ngu\u1ed3n, trong qu\u00e1 tr\u00ecnh truy\u1ec1n t\u1ea3i qua m\u1ea1ng ho\u1eb7c khi \u0111ang l\u01b0u tr\u1eef tr\u00ean thi\u1ebft b\u1ecb \u0111\u00edch.<br \/>\n*   <strong>Bit Rot (M\u1ee5c bit):<\/strong> S\u1ef1 suy gi\u1ea3m d\u1ea7n d\u1ea7n c\u1ee7a ph\u01b0\u01a1ng ti\u1ec7n l\u01b0u tr\u1eef c\u00f3 th\u1ec3 l\u00e0m \u0111\u1ea3o ng\u01b0\u1ee3c c\u00e1c bit m\u1ed9t c\u00e1ch \u00e2m th\u1ea7m.<br \/>\n*   <strong>L\u1ed7i truy\u1ec1n t\u1ea3i:<\/strong> M\u1eb7c d\u00f9 TCP c\u00f3 c\u00e1c m\u00e3 ki\u1ec3m tra (checksum), nh\u01b0ng ch\u00fang n\u1ed5i ti\u1ebfng l\u00e0 y\u1ebfu (16-bit). C\u00e1c m\u00f4i tr\u01b0\u1eddng c\u00f3 l\u01b0u l\u01b0\u1ee3ng truy c\u1eadp cao c\u00f3 th\u1ec3 g\u1eb7p ph\u1ea3i t\u00ecnh tr\u1ea1ng h\u1ecfng d\u1eef li\u1ec7u th\u1ea7m l\u1eb7ng tr\u00ean \u0111\u01b0\u1eddng truy\u1ec1n m\u00e0 TCP kh\u00f4ng ph\u00e1t hi\u1ec7n \u0111\u01b0\u1ee3c.<br \/>\n*   <strong>L\u1ed7i b\u1ed9 \u0111i\u1ec1u khi\u1ec3n l\u01b0u tr\u1eef:<\/strong> C\u00e1c l\u1ed7i ph\u1ea7n c\u1ee9ng trong b\u1ed9 \u0111i\u1ec1u khi\u1ec3n RAID ho\u1eb7c c\u1ea5u tr\u00fac SAN c\u00f3 th\u1ec3 ghi d\u1eef li\u1ec7u r\u00e1c trong khi v\u1eabn b\u00e1o c\u00e1o th\u00e0nh c\u00f4ng cho h\u1ec7 \u0111i\u1ec1u h\u00e0nh.<\/p>\n<h3>H\u1ecfng h\u00f3c logic<\/h3>\n<p>H\u1ecfng h\u00f3c logic \u0111\u01b0\u1ee3c cho l\u00e0 nguy hi\u1ec3m h\u01a1n v\u00ec b\u1ea3n th\u00e2n t\u1ec7p sao l\u01b0u v\u1eabn c\u00f2n nguy\u00ean v\u1eb9n, nh\u01b0ng d\u1eef li\u1ec7u b\u00ean trong n\u00f3 \u0111\u00e3 b\u1ecb h\u1ecfng.<br \/>\n*   <strong>R\u00e1c v\u00e0o, r\u00e1c ra (GIGO):<\/strong> N\u1ebfu c\u01a1 s\u1edf d\u1eef li\u1ec7u tr\u1ef1c ti\u1ebfp c\u1ee7a b\u1ea1n c\u00f3 ch\u1ec9 m\u1ee5c b\u1ecb h\u1ecfng ho\u1eb7c trang b\u1ecb r\u00e1ch, c\u00f4ng c\u1ee5 sao l\u01b0u c\u1ee7a b\u1ea1n c\u00f3 th\u1ec3 sao ch\u00e9p trung th\u1ef1c trang b\u1ecb h\u1ecfng \u0111\u00f3. T\u00e1c v\u1ee5 sao l\u01b0u th\u00e0nh c\u00f4ng, nh\u01b0ng vi\u1ec7c kh\u00f4i ph\u1ee5c s\u1ebd th\u1ea5t b\u1ea1i ho\u1eb7c t\u1ea1o ra m\u1ed9t c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1ecb l\u1ed7i.<br \/>\n*   <strong>Giao d\u1ecbch kh\u00f4ng ho\u00e0n ch\u1ec9nh:<\/strong> C\u00e1c b\u1ea3n ch\u1ee5p nhanh (snapshot) \u1edf c\u1ea5p \u0111\u1ed9 h\u1ec7 th\u1ed1ng t\u1ec7p \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n m\u00e0 kh\u00f4ng \u0111\u00f3ng b\u0103ng I\/O c\u1ee7a c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u00fang c\u00e1ch (v\u00ed d\u1ee5: kh\u00f4ng s\u1eed d\u1ee5ng <code>FLUSH TABLES WITH READ LOCK<\/code> trong MySQL) d\u1eabn \u0111\u1ebfn c\u00e1c trang b\u1ecb r\u00e1ch v\u00e0 tr\u1ea1ng th\u00e1i kh\u00f4ng th\u1ec3 kh\u00f4i ph\u1ee5c.<\/p>\n<h2>Ph\u00e1t hi\u1ec7n ch\u1ee7 \u0111\u1ed9ng: Checksum v\u00e0 B\u0103m m\u1eadt m\u00e3<\/h2>\n<p>Tuy\u1ebfn ph\u00f2ng th\u1ee7 \u0111\u1ea7u ti\u00ean ch\u1ed1ng l\u1ea1i s\u1ef1 h\u1ecfng h\u00f3c v\u1eadt l\u00fd l\u00e0 x\u00e1c th\u1ef1c b\u1eb1ng m\u1eadt m\u00e3. Vi\u1ec7c ch\u1ec9 d\u1ef1a v\u00e0o k\u00edch th\u01b0\u1edbc t\u1ec7p ho\u1eb7c ng\u00e0y s\u1eeda \u0111\u1ed5i l\u00e0 kh\u00f4ng \u0111\u1ee7.<\/p>\n<h3>B\u1eadt Checksum \u1edf c\u1ea5p \u0111\u1ed9 c\u01a1 s\u1edf d\u1eef li\u1ec7u<\/h3>\n<p>C\u00e1c h\u1ec7 qu\u1ea3n tr\u1ecb c\u01a1 s\u1edf d\u1eef li\u1ec7u quan h\u1ec7 (RDBMS) hi\u1ec7n \u0111\u1ea1i h\u1ed7 tr\u1ee3 checksum \u1edf c\u1ea5p \u0111\u1ed9 trang. Khi \u0111\u01b0\u1ee3c b\u1eadt, c\u01a1 s\u1edf d\u1eef li\u1ec7u s\u1ebd t\u00ednh to\u00e1n checksum cho m\u1ed7i trang tr\u01b0\u1edbc khi ghi v\u00e0o \u0111\u0129a. Khi trang \u0111\u01b0\u1ee3c \u0111\u1ecdc (b\u1edfi truy v\u1ea5n ho\u1eb7c quy tr\u00ecnh sao l\u01b0u), checksum s\u1ebd \u0111\u01b0\u1ee3c x\u00e1c minh.<\/p>\n<p>\u0110\u1ed1i v\u1edbi <strong>PostgreSQL<\/strong>, b\u1ea1n c\u00f3 th\u1ec3 b\u1eadt checksum d\u1eef li\u1ec7u trong qu\u00e1 tr\u00ecnh kh\u1edfi t\u1ea1o c\u1ee5m:<\/p>\n<pre><code class=\"language-bash\"># Kh\u1edfi t\u1ea1o c\u1ee5m PostgreSQL m\u1edbi v\u1edbi checksum \u0111\u00e3 b\u1eadt\ninitdb --data-checksums -D \/var\/lib\/postgresql\/data\n<\/code><\/pre>\n<p><em>L\u01b0u \u00fd: N\u1ebfu b\u1ea1n \u0111\u00e3 c\u00f3 c\u1ee5m PostgreSQL, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng ti\u1ec7n \u00edch <code>pg_checksums<\/code> \u0111\u1ec3 b\u1eadt ch\u00fang khi ngo\u1ea1i tuy\u1ebfn.<\/em><\/p>\n<p>\u0110\u1ed1i v\u1edbi <strong>Microsoft SQL Server<\/strong>, h\u00e3y \u0111\u1ea3m b\u1ea3o r\u1eb1ng <code>PAGE_VERIFY<\/code> \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh <code>CHECKSUM<\/code> (m\u1eb7c \u0111\u1ecbnh trong c\u00e1c phi\u00ean b\u1ea3n hi\u1ec7n \u0111\u1ea1i, nh\u01b0ng \u0111\u00e1ng \u0111\u1ec3 ki\u1ec3m tra tr\u00ean c\u00e1c h\u1ec7 th\u1ed1ng c\u0169):<\/p>\n<pre><code class=\"language-sql\">ALTER DATABASE [ProductionDB] SET PAGE_VERIFY CHECKSUM;\nGO\n<\/code><\/pre>\n<h3>X\u00e1c th\u1ef1c b\u1ea3n sao l\u01b0u khi l\u01b0u tr\u1eef<\/h3>\n<p>Khi b\u1ea3n sao l\u01b0u \u0111\u00e3 n\u1eb1m tr\u00ean m\u1ee5c ti\u00eau l\u01b0u tr\u1eef, t\u00ednh to\u00e0n v\u1eb9n c\u1ee7a n\u00f3 ph\u1ea3i \u0111\u01b0\u1ee3c x\u00e1c minh b\u1eb1ng m\u1eadt m\u00e3. C\u00e1c n\u1ec1n t\u1ea3ng sao l\u01b0u doanh nghi\u1ec7p nh\u01b0 CloudSave t\u1ef1 \u0111\u1ed9ng t\u00ednh to\u00e1n v\u00e0 x\u00e1c minh m\u00e3 b\u0103m SHA-256 c\u1ee7a c\u00e1c kh\u1ed1i sao l\u01b0u trong qu\u00e1 tr\u00ecnh truy\u1ec1n t\u1ea3i v\u00e0 l\u01b0u tr\u1eef. N\u1ebfu b\u1ea1n \u0111ang qu\u1ea3n l\u00fd c\u00e1c t\u1eadp l\u1ec7nh t\u00f9y ch\u1ec9nh, b\u1ea1n ph\u1ea3i th\u1ef1c hi\u1ec7n vi\u1ec7c n\u00e0y theo c\u00e1ch th\u1ee7 c\u00f4ng:<\/p>\n<pre><code class=\"language-bash\"># T\u1ea1o m\u00e3 b\u0103m SHA-256 sau khi t\u1ea1o b\u1ea3n sao l\u01b0u\nsha256sum prod_db_backup.tar.gz &gt; prod_db_backup.tar.gz.sha256\n\n# X\u00e1c minh m\u00e3 b\u0103m tr\u00ean m\u00e1y ch\u1ee7 l\u01b0u tr\u1eef\nsha256sum -c prod_db_backup.tar.gz.sha256\n<\/code><\/pre>\n<h2>C\u00e1c k\u1ef9 thu\u1eadt x\u00e1c th\u1ef1c d\u00e0nh ri\u00eang cho c\u01a1 s\u1edf d\u1eef li\u1ec7u<\/h2>\n<p>C\u00e1c c\u00f4ng c\u1ee5 c\u01a1 s\u1edf d\u1eef li\u1ec7u kh\u00e1c nhau cung c\u1ea5p c\u00e1c c\u00f4ng c\u1ee5 g\u1ed1c \u0111\u1ec3 x\u00e1c minh t\u00ednh to\u00e0n v\u1eb9n c\u1ee7a c\u00e1c t\u1ec7p sao l\u01b0u c\u1ee7a ch\u00fang.<\/p>\n<h3>PostgreSQL: <code>pg_verifybackup<\/code><\/h3>\n<p>\u0110\u01b0\u1ee3c gi\u1edbi thi\u1ec7u trong PostgreSQL 13, <code>pg_verifybackup<\/code> l\u00e0 m\u1ed9t b\u01b0\u1edbc ngo\u1eb7t cho c\u00e1c b\u1ea3n sao l\u01b0u v\u1eadt l\u00fd \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n b\u1eb1ng <code>pg_basebackup<\/code>. N\u00f3 \u0111\u1ecdc t\u1ec7p <code>backup_manifest<\/code> \u0111\u01b0\u1ee3c t\u1ea1o trong qu\u00e1 tr\u00ecnh sao l\u01b0u v\u00e0 x\u00e1c minh r\u1eb1ng t\u1ea5t c\u1ea3 c\u00e1c t\u1ec7p \u0111\u1ec1u c\u00f3 m\u1eb7t v\u00e0 checksum c\u1ee7a ch\u00fang kh\u1edbp nhau.<\/p>\n<pre><code class=\"language-bash\"># Ch\u1ea1y x\u00e1c minh \u0111\u1ed1i v\u1edbi th\u01b0 m\u1ee5c sao l\u01b0u c\u01a1 s\u1edf v\u1eadt l\u00fd\npg_verifybackup \/mnt\/backups\/postgres\/base_backup_20231025\/\n<\/code><\/pre>\n<p>N\u1ebfu m\u1ed9t bit b\u1ecb \u0111\u1ea3o ng\u01b0\u1ee3c trong b\u1ea5t k\u1ef3 t\u1ec7p d\u1eef li\u1ec7u n\u00e0o, <code>pg_verifybackup<\/code> s\u1ebd \u0111\u01b0a ra l\u1ed7i nghi\u00eam tr\u1ecdng, cho ph\u00e9p h\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t c\u1ee7a b\u1ea1n c\u1ea3nh b\u00e1o ngay l\u1eadp t\u1ee9c cho nh\u00f3m DBA.<\/p>\n<h3>Microsoft SQL Server: <code>RESTORE VERIFYONLY<\/code><\/h3>\n<p>SQL Server cung c\u1ea5p m\u1ed9t l\u1ec7nh g\u1ed1c \u0111\u1ec3 x\u00e1c minh t\u00ednh to\u00e0n v\u1eb9n v\u1eadt l\u00fd c\u1ee7a t\u1ec7p sao l\u01b0u m\u00e0 kh\u00f4ng c\u1ea7n th\u1ef1c s\u1ef1 kh\u00f4i ph\u1ee5c n\u00f3. N\u00f3 ki\u1ec3m tra c\u00e1c ti\u00eau \u0111\u1ec1 sao l\u01b0u v\u00e0 x\u00e1c th\u1ef1c checksum c\u1ee7a trang (n\u1ebfu ch\u00fang \u0111\u00e3 \u0111\u01b0\u1ee3c b\u1eadt trong qu\u00e1 tr\u00ecnh sao l\u01b0u).<\/p>\n<pre><code class=\"language-sql\">RESTORE VERIFYONLY \nFROM DISK = 'Z:BackupsProdDB_Full.bak' \nWITH CHECKSUM;\n<\/code><\/pre>\n<p><strong>C\u1ea3nh b\u00e1o:<\/strong> <code>RESTORE VERIFYONLY<\/code> ch\u1ec9 x\u00e1c nh\u1eadn r\u1eb1ng t\u1ec7p sao l\u01b0u c\u00f3 th\u1ec3 \u0111\u1ecdc \u0111\u01b0\u1ee3c v\u00e0 checksum v\u1eadt l\u00fd kh\u1edbp nhau. N\u00f3 <em>kh\u00f4ng<\/em> \u0111\u1ea3m b\u1ea3o t\u00ednh to\u00e0n v\u1eb9n logic. \u0110\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh to\u00e0n v\u1eb9n logic, b\u1ea1n ph\u1ea3i th\u1ef1c hi\u1ec7n kh\u00f4i ph\u1ee5c \u0111\u1ea7y \u0111\u1ee7 v\u00e0 ch\u1ea1y <code>DBCC CHECKDB<\/code>.<\/p>\n<h3>MySQL \/ InnoDB: Percona XtraBackup<\/h3>\n<p>\u0110\u1ed1i v\u1edbi m\u00f4i tr\u01b0\u1eddng MySQL, c\u00e1c b\u1ea3n sao l\u01b0u v\u1eadt l\u00fd th\u01b0\u1eddng \u0111\u01b0\u1ee3c x\u1eed l\u00fd b\u1edfi Percona XtraBackup. Qu\u00e1 tr\u00ecnh sao l\u01b0u bao g\u1ed3m vi\u1ec7c sao ch\u00e9p c\u00e1c t\u1ec7p, nh\u01b0ng b\u1ea3n sao l\u01b0u kh\u00f4ng nh\u1ea5t qu\u00e1n cho \u0111\u1ebfn khi c\u00e1c nh\u1eadt k\u00fd giao d\u1ecbch (redo logs) \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng. Giai \u0111o\u1ea1n <code>--prepare<\/code> \u0111\u00f3ng vai tr\u00f2 nh\u01b0 m\u1ed9t b\u01b0\u1edbc ki\u1ec3m tra t\u00ednh to\u00e0n v\u1eb9n t\u00edch h\u1ee3p.<\/p>\n<pre><code class=\"language-bash\"># Chu\u1ea9n b\u1ecb b\u1ea3n sao l\u01b0u b\u1eb1ng c\u00e1ch \u00e1p d\u1ee5ng redo logs. \n# N\u1ebfu b\u1ea3n sao l\u01b0u b\u1ecb h\u1ecfng, b\u01b0\u1edbc n\u00e0y s\u1ebd th\u1ea5t b\u1ea1i.\nxtrabackup --prepare --target-dir=\/data\/backups\/mysql\/\n<\/code><\/pre>\n<h2>Ti\u00eau chu\u1ea9n v\u00e0ng: Ki\u1ec3m tra kh\u00f4i ph\u1ee5c t\u1ef1 \u0111\u1ed9ng<\/h2>\n<p>Checksum v\u00e0 c\u00e1c l\u1ec7nh x\u00e1c minh l\u00e0 c\u1ea7n thi\u1ebft, nh\u01b0ng ch\u01b0a \u0111\u1ee7. C\u00e1ch duy nh\u1ea5t \u0111\u1ec3 ch\u1ee9ng minh ch\u1eafc ch\u1eafn m\u1ed9t b\u1ea3n sao l\u01b0u kh\u1ea3 thi l\u00e0 kh\u00f4i ph\u1ee5c n\u00f3. Trong m\u00f4i tr\u01b0\u1eddng DevOps hi\u1ec7n \u0111\u1ea1i, quy tr\u00ecnh n\u00e0y ph\u1ea3i \u0111\u01b0\u1ee3c t\u1ef1 \u0111\u1ed9ng h\u00f3a ho\u00e0n to\u00e0n.<\/p>\n<p>B\u1eb1ng c\u00e1ch coi b\u1ea3n sao l\u01b0u nh\u01b0 m\u00e3 ngu\u1ed3n, b\u1ea1n c\u00f3 th\u1ec3 x\u00e2y d\u1ef1ng quy tr\u00ecnh CI\/CD cho vi\u1ec7c kh\u00f4i ph\u1ee5c c\u01a1 s\u1edf d\u1eef li\u1ec7u c\u1ee7a m\u00ecnh. Quy tr\u00ecnh n\u00e0y n\u00ean cung c\u1ea5p c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng t\u1ea1m th\u1eddi, th\u1ef1c hi\u1ec7n kh\u00f4i ph\u1ee5c, ch\u1ea1y c\u00e1c truy v\u1ea5n x\u00e1c th\u1ef1c v\u00e0 x\u00f3a b\u1ecf m\u00f4i tr\u01b0\u1eddng sau khi ho\u00e0n t\u1ea5t.<\/p>\n<h3>X\u00e2y d\u1ef1ng quy tr\u00ecnh kh\u00f4i ph\u1ee5c t\u1ef1 \u0111\u1ed9ng<\/h3>\n<p>D\u01b0\u1edbi \u0111\u00e2y l\u00e0 v\u00ed d\u1ee5 v\u1ec1 m\u1ed9t t\u1eadp l\u1ec7nh Bash c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t h\u00e0ng ng\u00e0y b\u1edfi cron job ho\u1eb7c CI runner (nh\u01b0 GitLab CI ho\u1eb7c GitHub Actions) \u0111\u1ec3 x\u00e1c th\u1ef1c b\u1ea3n sao l\u01b0u logic c\u1ee7a PostgreSQL.<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/bash\nset -e\n\nBACKUP_FILE=&quot;\/mnt\/storage\/prod_db_latest.dump&quot;\nDB_NAME=&quot;prod_db&quot;\nCONTAINER_NAME=&quot;pg_restore_test&quot;\n\necho &quot;[INFO] B\u1eaft \u0111\u1ea7u ki\u1ec3m tra kh\u00f4i ph\u1ee5c t\u1ef1 \u0111\u1ed9ng...&quot;\n\n# 1. Kh\u1edfi ch\u1ea1y container PostgreSQL t\u1ea1m th\u1eddi\ndocker run --name $CONTAINER_NAME \n  -e POSTGRES_PASSWORD=testpass \n  -d postgres:15\n\n# \u0110\u1ee3i PostgreSQL s\u1eb5n s\u00e0ng\necho &quot;[INFO] \u0110ang \u0111\u1ee3i c\u01a1 s\u1edf d\u1eef li\u1ec7u kh\u1edfi t\u1ea1o...&quot;\nuntil docker exec $CONTAINER_NAME pg_isready -U postgres; do\n  sleep 2\ndone\n\n# 2. T\u1ea1o c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u00edch\ndocker exec $CONTAINER_NAME psql -U postgres -c &quot;CREATE DATABASE $DB_NAME;&quot;\n\n# 3. Th\u1ef1c hi\u1ec7n kh\u00f4i ph\u1ee5c\necho &quot;[INFO] \u0110ang kh\u00f4i ph\u1ee5c b\u1ea3n sao l\u01b0u...&quot;\ndocker cp $BACKUP_FILE $CONTAINER_NAME:\/tmp\/backup.dump\ndocker exec $CONTAINER_NAME pg_restore -U postgres -d $DB_NAME -1 \/tmp\/backup.dump\n\n# 4. Ch\u1ea1y c\u00e1c truy v\u1ea5n x\u00e1c th\u1ef1c logic\necho &quot;[INFO] \u0110ang ch\u1ea1y c\u00e1c truy v\u1ea5n x\u00e1c th\u1ef1c...&quot;\n# Ki\u1ec3m tra xem b\u1ea3ng ng\u01b0\u1eddi d\u00f9ng c\u00f3 h\u01a1n 10.000 b\u1ea3n ghi kh\u00f4ng\nUSER_COUNT=$(docker exec $CONTAINER_NAME psql -U postgres -d $DB_NAME -t -c &quot;SELECT COUNT(*) FROM users;&quot;)\n\nif [ &quot;$USER_COUNT&quot; -lt 10000 ]; then\n    echo &quot;[ERROR] X\u00e1c th\u1ef1c logic th\u1ea5t b\u1ea1i. D\u1ef1 ki\u1ebfn &gt;10000 ng\u01b0\u1eddi d\u00f9ng, t\u00ecm th\u1ea5y $USER_COUNT&quot;\n    # K\u00edch ho\u1ea1t c\u1ea3nh b\u00e1o PagerDuty \/ Slack t\u1ea1i \u0111\u00e2y\n    exit 1\nelse\n    echo &quot;[SUCCESS] X\u00e1c th\u1ef1c logic th\u00e0nh c\u00f4ng. S\u1ed1 l\u01b0\u1ee3ng ng\u01b0\u1eddi d\u00f9ng: $USER_COUNT&quot;\nfi\n\n# 5. X\u00f3a b\u1ecf m\u00f4i tr\u01b0\u1eddng t\u1ea1m th\u1eddi\necho &quot;[INFO] \u0110ang d\u1ecdn d\u1eb9p...&quot;\ndocker rm -f $CONTAINER_NAME\n\necho &quot;[INFO] Ki\u1ec3m tra kh\u00f4i ph\u1ee5c t\u1ef1 \u0111\u1ed9ng \u0111\u00e3 ho\u00e0n t\u1ea5t th\u00e0nh c\u00f4ng.&quot;\n<\/code><\/pre>\n<h3>B\u1ea1n n\u00ean x\u00e1c th\u1ef1c nh\u1eefng g\u00ec?<\/h3>\n<p>Khi th\u1ef1c hi\u1ec7n ki\u1ec3m tra kh\u00f4i ph\u1ee5c t\u1ef1 \u0111\u1ed9ng, \u0111\u1eebng ch\u1ec9 ki\u1ec3m tra xem c\u01a1 s\u1edf d\u1eef li\u1ec7u c\u00f3 kh\u1edfi \u0111\u1ed9ng hay kh\u00f4ng. H\u00e3y ch\u1ea1y c\u00e1c truy v\u1ea5n x\u00e1c th\u1ef1c d\u00e0nh ri\u00eang cho \u1ee9ng d\u1ee5ng:<br \/>\n1.  <strong>S\u1ed1 l\u01b0\u1ee3ng h\u00e0ng:<\/strong> \u0110\u1ea3m b\u1ea3o c\u00e1c b\u1ea3ng c\u1ed1t l\u00f5i c\u00f3 s\u1ed1 l\u01b0\u1ee3ng h\u00e0ng d\u1ef1 ki\u1ebfn (v\u00ed d\u1ee5: b\u1ea3ng <code>users<\/code> kh\u00f4ng \u0111\u01b0\u1ee3c tr\u1ed1ng).<br \/>\n2.  <strong>D\u1eef li\u1ec7u g\u1ea7n \u0111\u00e2y:<\/strong> Truy v\u1ea5n c\u00e1c b\u1ea3n ghi \u0111\u01b0\u1ee3c t\u1ea1o trong 24 gi\u1edd qua \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o b\u1ea3n sao l\u01b0u kh\u00f4ng b\u1ecb c\u0169.<br \/>\n3.  <strong>T\u00ednh to\u00e0n v\u1eb9n tham chi\u1ebfu:<\/strong> Ch\u1ea1y c\u00e1c t\u1eadp l\u1ec7nh \u0111\u1ec3 ki\u1ec3m tra c\u00e1c kh\u00f3a ngo\u1ea1i b\u1ecb m\u1ed3 c\u00f4i, \u0111i\u1ec1u n\u00e0y cho th\u1ea5y s\u1ef1 h\u1ecfng h\u00f3c logic.<\/p>\n<h2>Gi\u00e1m s\u00e1t v\u00e0 c\u1ea3nh b\u00e1o v\u1ec1 c\u00e1c b\u1ea5t th\u01b0\u1eddng trong sao l\u01b0u<\/h2>\n<p>Vi\u1ec7c ph\u00e1t hi\u1ec7n s\u1ef1 h\u1ecfng h\u00f3c tr\u01b0\u1edbc khi th\u1ea3m h\u1ecda x\u1ea3y ra \u0111\u00f2i h\u1ecfi kh\u1ea3 n\u0103ng quan s\u00e1t m\u1ea1nh m\u1ebd. Ngo\u00e0i c\u00e1c tr\u1ea1ng th\u00e1i th\u00e0nh c\u00f4ng\/th\u1ea5t b\u1ea1i nh\u1ecb ph\u00e2n, b\u1ea1n n\u00ean gi\u00e1m s\u00e1t si\u00eau d\u1eef li\u1ec7u c\u1ee7a c\u00e1c t\u00e1c v\u1ee5 sao l\u01b0u \u0111\u1ec3 ph\u00e1t hi\u1ec7n c\u00e1c b\u1ea5t th\u01b0\u1eddng.<\/p>\n<h3>Gi\u00e1m s\u00e1t theo kinh nghi\u1ec7m (Heuristic)<\/h3>\n<p>T\u00edch h\u1ee3p si\u00eau d\u1eef li\u1ec7u sao l\u01b0u c\u1ee7a b\u1ea1n v\u00e0o Prometheus v\u00e0 tr\u1ef1c quan h\u00f3a n\u00f3 b\u1eb1ng Grafana. Thi\u1ebft l\u1eadp c\u1ea3nh b\u00e1o cho c\u00e1c kinh nghi\u1ec7m sau:<br \/>\n*   <strong>K\u00edch th\u01b0\u1edbc gi\u1ea3m \u0111\u1ed9t ng\u1ed9t:<\/strong> N\u1ebfu b\u1ea3n sao l\u01b0u h\u00e0ng ng\u00e0y c\u1ee7a b\u1ea1n lu\u00f4n l\u00e0 500GB, v\u00e0 h\u00f4m nay ch\u1ec9 l\u00e0 50MB, t\u00e1c v\u1ee5 c\u00f3 th\u1ec3 \u0111\u00e3 ho\u00e0n th\u00e0nh th\u00e0nh c\u00f4ng (Exit Code 0), nh\u01b0ng c\u00f3 kh\u1ea3 n\u0103ng n\u00f3 \u0111\u00e3 sao l\u01b0u m\u1ed9t l\u01b0\u1ee3c \u0111\u1ed3 tr\u1ed1ng.<br \/>\n*   <strong>B\u1ea5t th\u01b0\u1eddng v\u1ec1 th\u1eddi gian:<\/strong> N\u1ebfu m\u1ed9t b\u1ea3n sao l\u01b0u th\u01b0\u1eddng m\u1ea5t 2 gi\u1edd m\u00e0 ho\u00e0n th\u00e0nh trong 5 ph\u00fat, c\u00f3 th\u1ee9 g\u00ec \u0111\u00f3 \u0111\u00e3 b\u1ecb b\u1ecf qua. Ng\u01b0\u1ee3c l\u1ea1i, n\u1ebfu m\u1ea5t 10 gi\u1edd, b\u1ea1n c\u00f3 th\u1ec3 b\u1ecb suy gi\u1ea3m I\/O \u0111\u0129a d\u1eabn \u0111\u1ebfn h\u1ecfng h\u00f3c.<br \/>\n*   <strong>T\u00edch l\u0169y WAL\/Archive Log:<\/strong> N\u1ebfu c\u01a1 s\u1edf d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n \u0111ang t\u1ea1o Write-Ahead Logs (WAL) nh\u01b0ng h\u1ec7 th\u1ed1ng sao l\u01b0u kh\u00f4ng l\u01b0u tr\u1eef ch\u00fang \u0111\u1ee7 nhanh, b\u1ea1n c\u00f3 nguy c\u01a1 b\u1ecb h\u1ed5ng trong chu\u1ed7i Ph\u1ee5c h\u1ed3i t\u1ea1i th\u1eddi \u0111i\u1ec3m (PITR).<\/p>\n<h2>Tri\u1ec3n khai quy t\u1eafc 3-2-1 v\u1edbi ki\u1ec3m tra t\u00ednh to\u00e0n v\u1eb9n<\/h2>\n<p>Quy t\u1eafc sao l\u01b0u 3-2-1 ti\u00eau chu\u1ea9n ng\u00e0nh (3 b\u1ea3n sao d\u1eef li\u1ec7u, 2 ph\u01b0\u01a1ng ti\u1ec7n kh\u00e1c nhau, 1 b\u1ea3n sao ngo\u1ea1i vi) ch\u1ec9 hi\u1ec7u qu\u1ea3 n\u1ebfu t\u1ea5t c\u1ea3 c\u00e1c b\u1ea3n sao \u0111\u1ec1u \u0111\u01b0\u1ee3c x\u00e1c minh.<\/p>\n<p>\u0110\u00e2y l\u00e0 n\u01a1i vi\u1ec7c t\u1eadn d\u1ee5ng m\u1ed9t gi\u1ea3i ph\u00e1p doanh nghi\u1ec7p nh\u01b0 CloudSave gi\u00fap gi\u1ea3m \u0111\u00e1ng k\u1ec3 chi ph\u00ed v\u1eadn h\u00e0nh. Thay v\u00ec vi\u1ebft v\u00e0 duy tr\u00ec c\u00e1c t\u1eadp l\u1ec7nh bash ph\u1ee9c t\u1ea1p cho t\u1eebng n\u00fat c\u01a1 s\u1edf d\u1eef li\u1ec7u, CloudSave t\u00edch h\u1ee3p tr\u1ef1c ti\u1ebfp v\u1edbi c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng c\u1ee7a b\u1ea1n \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng h\u00f3a v\u00f2ng \u0111\u1eddi 3-2-1. N\u00f3 cung c\u1ea5p l\u01b0u tr\u1eef b\u1ea5t bi\u1ebfn\u2014b\u1ea3o v\u1ec7 ch\u1ed1ng l\u1ea1i ransomware\u2014v\u00e0 c\u00e1c l\u1ecbch tr\u00ecnh x\u00e1c minh kh\u00f4i ph\u1ee5c t\u1ef1 \u0111\u1ed9ng \u0111\u01b0\u1ee3c t\u00edch h\u1ee3p s\u1eb5n. CloudSave c\u00f3 th\u1ec3 t\u1ef1 \u0111\u1ed9ng kh\u1edfi ch\u1ea1y c\u00e1c m\u00f4i tr\u01b0\u1eddng sandbox c\u00f4 l\u1eadp, g\u1eafn b\u1ea3n sao l\u01b0u, ch\u1ea1y c\u00e1c t\u1eadp l\u1ec7nh x\u00e1c th\u1ef1c SQL t\u00f9y ch\u1ec9nh c\u1ee7a b\u1ea1n v\u00e0 b\u00e1o c\u00e1o tr\u1ea1ng th\u00e1i s\u1ee9c kh\u1ecfe v\u1ec1 b\u1ea3ng \u0111i\u1ec1u khi\u1ec3n trung t\u00e2m c\u1ee7a b\u1ea1n.<\/p>\n<h2>K\u1ebft lu\u1eadn<\/h2>\n<p>C\u00e1c b\u1ea3n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1ecb h\u1ecfng l\u00e0 m\u1ed9t k\u1ebb gi\u1ebft ng\u01b0\u1eddi th\u1ea7m l\u1eb7ng c\u00f3 th\u1ec3 ph\u00e1 h\u1ee7y doanh nghi\u1ec7p. Ch\u1ec9 d\u1ef1a v\u00e0o <code>Exit Code 0<\/code> c\u1ee7a m\u1ed9t t\u1eadp l\u1ec7nh sao l\u01b0u l\u00e0 m\u1ed9t canh b\u1ea1c nguy hi\u1ec3m.<\/p>\n<p>\u0110\u1ec3 th\u1ef1c s\u1ef1 b\u1ea3o v\u1ec7 m\u00f4i tr\u01b0\u1eddng s\u1ea3n xu\u1ea5t c\u1ee7a b\u1ea1n, b\u1ea1n ph\u1ea3i \u00e1p d\u1ee5ng chi\u1ebfn l\u01b0\u1ee3c ph\u00f2ng th\u1ee7 theo chi\u1ec1u s\u00e2u:<br \/>\n1.  B\u1eadt checksum \u1edf c\u1ea5p \u0111\u1ed9 trang trong c\u00f4ng c\u1ee5 c\u01a1 s\u1edf d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n.<br \/>\n2.  S\u1eed d\u1ee5ng c\u00e1c c\u00f4ng c\u1ee5 x\u00e1c minh g\u1ed1c (<code>pg_verifybackup<\/code>, <code>RESTORE VERIFYONLY<\/code>) ngay sau khi t\u1ea1o b\u1ea3n sao l\u01b0u.<br \/>\n3.  Gi\u00e1m s\u00e1t si\u00eau d\u1eef li\u1ec7u sao l\u01b0u (k\u00edch th\u01b0\u1edbc, th\u1eddi gian) \u0111\u1ec3 t\u00ecm c\u00e1c b\u1ea5t th\u01b0\u1eddng.<br \/>\n4.  Tri\u1ec3n khai ki\u1ec3m tra kh\u00f4i ph\u1ee5c t\u1ef1 \u0111\u1ed9ng, t\u1ea1m th\u1eddi nh\u01b0 m\u1ed9t ph\u1ea7n c\u1ee7a quy tr\u00ecnh v\u1eadn h\u00e0nh h\u00e0ng ng\u00e0y.<\/p>\n<p>B\u1eb1ng c\u00e1ch chuy\u1ec3n t\u1eeb t\u01b0 duy sao l\u01b0u th\u1ee5 \u0111\u1ed9ng &#8220;c\u00e0i \u0111\u1eb7t v\u00e0 qu\u00ean \u0111i&#8221; sang m\u00f4 h\u00ecnh &#8220;x\u00e1c th\u1ef1c kh\u00f4i ph\u1ee5c li\u00ean t\u1ee5c&#8221; ch\u1ee7 \u0111\u1ed9ng, b\u1ea1n \u0111\u1ea3m b\u1ea3o r\u1eb1ng khi th\u1ea3m h\u1ecda kh\u00f4ng th\u1ec3 tr\u00e1nh kh\u1ecfi x\u1ea3y ra, d\u1eef li\u1ec7u c\u1ee7a b\u1ea1n \u0111\u00e3 s\u1eb5n s\u00e0ng, \u0111\u00e1ng tin c\u1eady v\u00e0 c\u00f3 th\u1ec3 kh\u00f4i ph\u1ee5c ho\u00e0n to\u00e0n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Detect Corrupted Database Backups Before Disaster","rank_math_description":"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.","rank_math_focus_keyword":"corrupted database backups","footnotes":""},"categories":[767],"tags":[3514,3515,3516,768,1228,2465,3517],"class_list":["post-4713","post","type-post","status-publish","format-standard","hentry","category-database-backup","tag-backup-testing","tag-corrupted-backups","tag-data-integrity","tag-data-loss-prevention","tag-database-administration","tag-devops","tag-restore-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.7 (Yoast SEO v27.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Detect Corrupted Database Backups Before Disaster<\/title>\n<meta name=\"description\" content=\"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"K\u1ebb s\u00e1t nh\u00e2n th\u1ea7m l\u1eb7ng: C\u00e1ch ph\u00e1t hi\u1ec7n c\u00e1c b\u1ea3n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1ecb h\u1ecfng tr\u01b0\u1edbc khi th\u1ea3m h\u1ecda \u1eadp \u0111\u1ebfn\" \/>\n<meta property=\"og:description\" content=\"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/\" \/>\n<meta property=\"og:site_name\" content=\"CloudSave\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-14T19:31:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-15T15:39:46+00:00\" \/>\n<meta name=\"author\" content=\"shervinrv\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"shervinrv\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 ph\u00fat\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/knowledge-base\\\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/knowledge-base\\\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\\\/\"},\"author\":{\"name\":\"shervinrv\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/#\\\/schema\\\/person\\\/286beefe68281d868e87f46603a7ae4d\"},\"headline\":\"K\u1ebb s\u00e1t nh\u00e2n th\u1ea7m l\u1eb7ng: C\u00e1ch ph\u00e1t hi\u1ec7n c\u00e1c b\u1ea3n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1ecb h\u1ecfng tr\u01b0\u1edbc khi th\u1ea3m h\u1ecda \u1eadp \u0111\u1ebfn\",\"datePublished\":\"2026-06-14T19:31:06+00:00\",\"dateModified\":\"2026-06-15T15:39:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/knowledge-base\\\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\\\/\"},\"wordCount\":3117,\"publisher\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/#\\\/schema\\\/person\\\/286beefe68281d868e87f46603a7ae4d\"},\"keywords\":[\"backup testing\",\"corrupted backups\",\"data integrity\",\"data loss prevention\",\"Database Administration\",\"devops\",\"restore testing\"],\"articleSection\":[\"Database Backup\"],\"inLanguage\":\"vi\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/knowledge-base\\\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\\\/\",\"url\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/knowledge-base\\\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\\\/\",\"name\":\"Detect Corrupted Database Backups Before Disaster\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/#website\"},\"datePublished\":\"2026-06-14T19:31:06+00:00\",\"dateModified\":\"2026-06-15T15:39:46+00:00\",\"description\":\"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/knowledge-base\\\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\\\/#breadcrumb\"},\"inLanguage\":\"vi\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cloudsave.app\\\/vi\\\/knowledge-base\\\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/knowledge-base\\\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"K\u1ebb s\u00e1t nh\u00e2n th\u1ea7m l\u1eb7ng: C\u00e1ch ph\u00e1t hi\u1ec7n c\u00e1c b\u1ea3n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1ecb h\u1ecfng tr\u01b0\u1edbc khi th\u1ea3m h\u1ecda \u1eadp \u0111\u1ebfn\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/#website\",\"url\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/\",\"name\":\"CloudSave\",\"description\":\"CloudSave\",\"publisher\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/#\\\/schema\\\/person\\\/286beefe68281d868e87f46603a7ae4d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"vi\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/#\\\/schema\\\/person\\\/286beefe68281d868e87f46603a7ae4d\",\"name\":\"shervinrv\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"vi\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/Logo_Name-2.png\",\"url\":\"https:\\\/\\\/cloudsave.app\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/Logo_Name-2.png\",\"contentUrl\":\"https:\\\/\\\/cloudsave.app\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/Logo_Name-2.png\",\"width\":859,\"height\":150,\"caption\":\"shervinrv\"},\"logo\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/Logo_Name-2.png\"},\"sameAs\":[\"http:\\\/\\\/cloudsave.app\"],\"url\":\"https:\\\/\\\/cloudsave.app\\\/vi\\\/knowledge-base\\\/author\\\/shervinrv\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Detect Corrupted Database Backups Before Disaster","description":"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/","og_locale":"vi_VN","og_type":"article","og_title":"K\u1ebb s\u00e1t nh\u00e2n th\u1ea7m l\u1eb7ng: C\u00e1ch ph\u00e1t hi\u1ec7n c\u00e1c b\u1ea3n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1ecb h\u1ecfng tr\u01b0\u1edbc khi th\u1ea3m h\u1ecda \u1eadp \u0111\u1ebfn","og_description":"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.","og_url":"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/","og_site_name":"CloudSave","article_published_time":"2026-06-14T19:31:06+00:00","article_modified_time":"2026-06-15T15:39:46+00:00","author":"shervinrv","twitter_card":"summary_large_image","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"shervinrv","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"18 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/#article","isPartOf":{"@id":"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/"},"author":{"name":"shervinrv","@id":"https:\/\/cloudsave.app\/vi\/#\/schema\/person\/286beefe68281d868e87f46603a7ae4d"},"headline":"K\u1ebb s\u00e1t nh\u00e2n th\u1ea7m l\u1eb7ng: C\u00e1ch ph\u00e1t hi\u1ec7n c\u00e1c b\u1ea3n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1ecb h\u1ecfng tr\u01b0\u1edbc khi th\u1ea3m h\u1ecda \u1eadp \u0111\u1ebfn","datePublished":"2026-06-14T19:31:06+00:00","dateModified":"2026-06-15T15:39:46+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/"},"wordCount":3117,"publisher":{"@id":"https:\/\/cloudsave.app\/vi\/#\/schema\/person\/286beefe68281d868e87f46603a7ae4d"},"keywords":["backup testing","corrupted backups","data integrity","data loss prevention","Database Administration","devops","restore testing"],"articleSection":["Database Backup"],"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/","url":"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/","name":"Detect Corrupted Database Backups Before Disaster","isPartOf":{"@id":"https:\/\/cloudsave.app\/vi\/#website"},"datePublished":"2026-06-14T19:31:06+00:00","dateModified":"2026-06-15T15:39:46+00:00","description":"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.","breadcrumb":{"@id":"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cloudsave.app\/vi\/knowledge-base\/k%e1%ba%bb-s%c3%a1t-nh%c3%a2n-th%e1%ba%a7m-l%e1%ba%b7ng-c%c3%a1ch-ph%c3%a1t-hi%e1%bb%87n-c%c3%a1c-b%e1%ba%a3n-sao-l%c6%b0u-c%c6%a1-s%e1%bb%9f-d%e1%bb%af-li%e1%bb%87u-b%e1%bb%8b-h%e1%bb%8fng-tr%c6%b0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudsave.app\/vi\/"},{"@type":"ListItem","position":2,"name":"K\u1ebb s\u00e1t nh\u00e2n th\u1ea7m l\u1eb7ng: C\u00e1ch ph\u00e1t hi\u1ec7n c\u00e1c b\u1ea3n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u b\u1ecb h\u1ecfng tr\u01b0\u1edbc khi th\u1ea3m h\u1ecda \u1eadp \u0111\u1ebfn"}]},{"@type":"WebSite","@id":"https:\/\/cloudsave.app\/vi\/#website","url":"https:\/\/cloudsave.app\/vi\/","name":"CloudSave","description":"CloudSave","publisher":{"@id":"https:\/\/cloudsave.app\/vi\/#\/schema\/person\/286beefe68281d868e87f46603a7ae4d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudsave.app\/vi\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":["Person","Organization"],"@id":"https:\/\/cloudsave.app\/vi\/#\/schema\/person\/286beefe68281d868e87f46603a7ae4d","name":"shervinrv","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/cloudsave.app\/wp-content\/uploads\/2026\/02\/Logo_Name-2.png","url":"https:\/\/cloudsave.app\/wp-content\/uploads\/2026\/02\/Logo_Name-2.png","contentUrl":"https:\/\/cloudsave.app\/wp-content\/uploads\/2026\/02\/Logo_Name-2.png","width":859,"height":150,"caption":"shervinrv"},"logo":{"@id":"https:\/\/cloudsave.app\/wp-content\/uploads\/2026\/02\/Logo_Name-2.png"},"sameAs":["http:\/\/cloudsave.app"],"url":"https:\/\/cloudsave.app\/vi\/knowledge-base\/author\/shervinrv\/"}]}},"_links":{"self":[{"href":"https:\/\/cloudsave.app\/vi\/wp-json\/wp\/v2\/posts\/4713","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudsave.app\/vi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudsave.app\/vi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudsave.app\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudsave.app\/vi\/wp-json\/wp\/v2\/comments?post=4713"}],"version-history":[{"count":2,"href":"https:\/\/cloudsave.app\/vi\/wp-json\/wp\/v2\/posts\/4713\/revisions"}],"predecessor-version":[{"id":5779,"href":"https:\/\/cloudsave.app\/vi\/wp-json\/wp\/v2\/posts\/4713\/revisions\/5779"}],"wp:attachment":[{"href":"https:\/\/cloudsave.app\/vi\/wp-json\/wp\/v2\/media?parent=4713"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudsave.app\/vi\/wp-json\/wp\/v2\/categories?post=4713"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudsave.app\/vi\/wp-json\/wp\/v2\/tags?post=4713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}