Senario
Sandaran pangkalan data pengeluaran perlahan atau pemulihan mengambil masa yang lama, menjejaskan SLA. Contoh: sandaran mysqldump untuk pangkalan data MySQL 1TB mengambil masa lebih 8 jam, atau pg_dump untuk PostgreSQL tersekat di tengah jalan.
Gejala
- CPU rendah tetapi I/O menunggu tinggi semasa sandaran (iostat menunjukkan %util hampir 100%)
- Pertumbuhan WAL (PostgreSQL) atau redo log (MySQL) yang berlebihan semasa pemulihan
- Proses sandaran menggunakan terlalu banyak memori sehingga OOM
- Data tidak konsisten atau kerosakan indeks selepas pemulihan
Diagnosis
MySQL
SHOW ENGINE INNODB STATUS\G
-- Periksa History list length dan Log sequence number
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
-- Buffer pool reads tinggi menunjukkan cache miss
Gunakan pt-query-digest untuk menganalisis log pertanyaan perlahan bagi pertanyaan panas semasa sandaran.
PostgreSQL
SELECT * FROM pg_stat_progress_vacuum;
-- Periksa kemajuan vacuum, yang mungkin menyekat sandaran
SELECT * FROM pg_stat_replication WHERE state = 'streaming';
-- Periksa ketinggalan replikasi
Gunakan pg_stat_statements untuk mencari pertanyaan frekuensi tinggi.
Arahan
Sandaran MySQL Dioptimumkan
- Gunakan
mysqldump --single-transaction --innodb-optimize-keys --compressuntuk mengurangkan kunci dan overhead rangkaian. - Sandaran selari:
mydumperataumysqlpump(8.0+) dengan--parallel-workers=4. - Sandaran fizikal:
xtrabackup --parallel=4 --compress --compress-threads=4.
Pemulihan dipercepat:
mysql -e 'SET GLOBAL innodb_flush_log_at_trx_commit=2;'
# Hanya semasa pemulihan; lihat kawalan risiko di bawah
Sandaran PostgreSQL Dioptimumkan
pg_dump -j 4 --format=directory --compress=9untuk sandaran dimampatkan selari.- Gunakan
pgbackrestataubarmanuntuk sandaran fizikal:
pgbackrest --stanza=my_stanza --type=full --process-max=4 backup
Pemulihan melangkau WAL:
pg_restore -j 4 --disable-triggers --exit-on-error --dbname=mydb mydump.dmp
Kawalan Risiko
- Hadkan I/O semasa sandaran: Gunakan
ionice -c 2 -n 7untuk menurunkan keutamaan. - Pemulihan MySQL: Menetapkan
innodb_flush_log_at_trx_commit=2boleh kehilangan sehingga 1 saat data sekiranya ranap; hanya untuk pemulihan tidak kritikal. - Pemulihan PostgreSQL: Gunakan
--single-transactionatau--no-owneruntuk mengelakkan isu kebenaran. - Sentiasa ambil snapshot atau simpan fail sandaran asal sebelum pemulihan.
Gulung Balik
- Proses sandaran tersekat: Gunakan
kill -9(MySQL) ataupg_terminate_backend(PostgreSQL), kemudian bersihkan objek yang tinggal. - Kegagalan pemulihan: Gulung balik ke snapshot atau jalankan semula dengan sandaran yang berjaya sebelumnya.
Pengesahan
- Keutuhan sandaran:
mysqlcheck -A(MySQL) ataupg_amcheck(PostgreSQL). - Ujian pemulihan: Lakukan pemulihan dalam persekitaran terpencil, jalankan
SELECT count(*)dan pertanyaan perniagaan. - Penanda aras prestasi: Bandingkan QPS sebelum dan selepas sandaran pada pengeluaran.
Bila Hantar Tiket OpsGlobal
- Isu prestasi berterusan selepas penalaan.
- Sandaran menggunakan >50% sumber sistem yang menjejaskan perniagaan.
- Kerosakan data atau kehilangan separa selepas pemulihan.
- Perlu bantuan merangka strategi sandaran automatik atau pelan pemulihan bencana.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Database dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Pelajari cara mendiagnosis dan mengoptimumkan prestasi sandaran dan pemulihan pangkalan data MySQL dan PostgreSQL dalam persekitaran pengeluaran, termasuk arahan praktikal dan kawalan risiko.
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.