mysqldumps dengan InnoDB dan MyISAM bersama-sama diperlakukan sebagai saling eksklusif. Inilah alasannya:
Jika Anda dapat masuk ke mysql saat mysqldump sedang berlangsung, Anda akan melihat sesuatu seperti ini:
SELECT /* SQL_NO_CACHE */ * FROM tblname
Secara default, mysqldump akan melakukan hal berikut:
- Setiap basis data dibuang dalam urutan abjad
- Setiap tabel yang dibuang per basis data ditumpuk dalam urutan abjad (terlepas dari mesin penyimpanan)
Ini harus baik untuk MySQL Instance yang tidak memiliki aktivitas database lainnya. Tabel InnoDB dan tabel MyISAM tidak saling memengaruhi.
Menggunakan --single-transaction
terhadap MySQL Instance all-InnoDB menciptakan pos pemeriksaan dan membuang semua tabel dari titik-dalam-waktu yang sama. Setelah tabel MyISAM ditemukan, semua taruhan dimatikan. Ini bisa menyebabkan semua tabel InnoDB setelah MyISAM dibuang dari titik waktu yang berbeda.
Untuk memiliki dump point-in-time yang konsisten untuk campuran InnoDB dan MyISAM Anda memiliki opsi di sana
PILIHAN 1
Mulai ulang mysql sehingga tidak ada orang lain yang bisa masuk melalui TCP / IP dan kemudian mysqldump
service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart
PILIHAN 2
Jika semua tabel MyISAM hanya untuk membaca, hanya mysqldump menggunakan --single-transaction
OPSI # 3
Jika ada tabel MyISAM yang sedang ditulis, - transaksi tunggal tidak cukup
Anda harus melakukan hal berikut:
mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql
Segera setelah mysqldump selesai, login ke mysql dan lakukan show processlist;
. Cari kueri SELECT SLEEP(86400)
, temukan ID proses, dan jalankanKILL <procidnumn>;
tabel mysqldump mengunci selama dump. Gunakan snapshot LVM atau Xtrabackup .
sumber