Senario
Dalam operasi pangkalan data berskala besar, sandaran dan pemulihan sering menyebabkan gangguan perniagaan akibat isu prestasi. Contohnya, mysqldump MySQL mungkin mengalami penguncian jadual atau kesesakan I/O, manakala pg_dump PostgreSQL boleh menjana WAL berlebihan semasa tulis berat, memanjangkan masa pemulihan.
Simptom
- Masa sandaran melebihi tetingkap penyelenggaraan (cth., sandaran 8 jam mengambil 15 jam).
- Pemeriksaan konsistensi perlahan atau penggunaan log redo terhenti semasa pemulihan.
- Beban sistem meningkat (tunggu I/O >50%, CPU 100%).
- Fail sandaran terlalu besar (contohnya, sandaran logik 3x saiz data fizikal).
Diagnosis
MySQL
- Senarai proses:
SHOW FULL PROCESSLIST;— cariWaiting for table flushatauSending data. - Pantau I/O:
iostat -x 1—%utilhampir 100% menunjukkan kesesakan cakera. - Status InnoDB:
SHOW ENGINE INNODB STATUS\G—History list lengthterlalu panjang menandakan transaksi tertunggak.
PostgreSQL
- Sesi aktif:
SELECT * FROM pg_stat_activity WHERE state = 'active';— kenal pasti konflik kunci. - Kadar penjanaan WAL:
pg_waldumpatau periksa ketinggalan replikasi melaluipg_stat_replication. - Sumber sistem:
top/htopdenganpidstatuntuk kesesakan CPU/memori.
Arahan & Pengoptimuman
Percepatan Sandaran MySQL
- Gunakan
--single-transaction(InnoDB) untuk elak kunci jadual:mysqldump --single-transaction --skip-lock-tables -u root -p db > backup.sql - Mampatan selari:
mysqldump ... | pigz -1 > backup.sql.gz(gunakan pelbagai teras). - Sandaran berbilang pangkalan data: lancarkan dump berasingan serentak, tetapi pantau I/O.
- Sandaran daripada replika: laksanakan pada slave baca sahaja untuk kurangkan beban utama.
Percepatan Sandaran PostgreSQL
- Gunakan format direktori dengan pekerjaan selari:
pg_dump -j 4 -Fd -f /backup/db dbname - Laraskan tahap
--compress(0-9); cadangkan 0-3 untuk imbangan CPU. - Elakkan kunci jadual penuh: gunakan
--no-blocksatau dayakan pengasingan snapshot (default_transaction_isolation). - Sandaran inkremental: gabungkan
pg_basebackupdengan pengarkiban WAL.
Percepatan Pemulihan MySQL
- Matikan log binari (jika tidak diperlukan):
SET SQL_LOG_BIN=0;sebelum restore. - Tingkatkan kumpulan penampan InnoDB:
innodb_buffer_pool_size = 80% RAM. - Tetapkan
innodb_autoinc_lock_mode=2(jika tiada sisipan serentak).
Percepatan Pemulihan PostgreSQL
- Matikan mod arkib semasa pemulihan:
archive_mode = off. - Ubah suai parameter WAL:
wal_buffers = 16MB,checkpoint_timeout = 1h. - Gunakan
pg_rewinduntuk sinkronisasi replika pantas (elak restore sandaran penuh).
Kawalan Risiko
- Sentiasa sahkan pengoptimuman dalam persekitaran pementasan dahulu.
- Gunakan
--dry-runjika ada atau periksa parameter secara manual sebelum pengeluaran. - Tetapkan masa tamat: cth.,
--max-allowed-packet=1Guntuk cegah putus sambungan. - Pantau ruang cakera:
df -hpastikan direktori sandaran >1.5x saiz pangkalan data.
Pemulihan
Jika prestasi semakin merosot, hentikan operasi semasa:
- MySQL: KILL QUERY <thread_id>; atau tamatkan proses.
- PostgreSQL: SELECT pg_terminate_backend(pid);.
- Kembalikan perubahan konfigurasi dan mulakan semula daripada snapshot sandaran yang baik.
Pengesahan
- Integriti sandaran:
mysqlcheck -u root -p dbatau PostgreSQLpg_verify_checksums. - Uji restore: lakukan pemulihan penuh dalam persekitaran ujian dan ukur masa.
- Bandingkan metrik: tempoh sandaran/pemulihan, penggunaan I/O, penjanaan WAL sebelum dan selepas talaan.
Bila Hantar Tiket OpsGlobal
Hubungi pakar OpsGlobal jika: - Sandaran tidak dapat disiapkan dalam tetingkap walaupun setelah talaan parameter. - Kerosakan data berlaku semasa pemulihan (cth., kerosakan jadual MySQL atau ralat fail kawalan PostgreSQL). - Migrasi merentas awan atau heterogen (cth., MySQL ke PostgreSQL) diperlukan untuk pemulihan bencana. - Saiz kluster melebihi skala TB dan teknik standard tidak mencukupi.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Database dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Analisis mendalam tentang isu prestasi semasa sandaran dan pemulihan MySQL dan PostgreSQL, termasuk alat diagnostik, arahan pengoptimuman, kawalan risiko, dan strategi pemulihan untuk persekitaran pengeluaran.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.