Jenis pencadangan apa yang dilakukan oleh mysqldump?

Mencadangkan data MySQL sangat penting jika Anda menjalankan MySQL di server produksi apa pun. Kami akan menjelajahi beberapa konsep dasar yang memungkinkan Anda melakukan itu

Kami tertarik pada dua jenis cadangan. penuh dan bertahap

Cadangan lengkap dapat disimpan sebagai kumpulan kueri yang dapat memulihkan database (logis), atau salinan mentah direktori yang berisi data MySQL (fisik). Untuk database besar (>10GB), Anda mungkin ingin menggunakan opsi terakhir

Anda dapat melakukannya dengan menggunakan alat seperti mysqlhotcopyfor MyISAM dan InnoDB Hot Backup atau Xtrabackup untuk tabel InnoDB. Dalam contoh ini kita akan membuat cadangan lengkap logis dengan perintah mysqldump

Pencadangan tambahan dapat dilakukan dengan mencadangkan log biner MySQL

Mari pastikan log biner diaktifkan. Edit MySQL milik saya. cnf config dan periksa baris ini

log_bin                 = /var/log/mysql/mysql-bin. catatan
expired_logs_days        = 10

Opsi pertama memberi tahu MySQL untuk mengaktifkan logging biner dan menyimpan log di bawah direktori /var/log/mysql/
Opsi kedua berarti bahwa semua log yang lebih lama dari 10 hari akan dihapus secara otomatis

Buat perubahan ini di my. cnf seperlunya dan restart server mysql

Jika Anda melihat /var/log/mysql/ dir, Anda akan menemukan sesuatu seperti ini

mysql@mysqlhost1$ ls -al /var/log/mysql/
jumlah 16
drwxr-s--- 2 mysql adm  4096 Sep  5 10. 41
drwxr-xr-x 7 akar  akar 4096 Sep  5 09. 52
-rw-rw---- 1 mysql adm   106 Sep  5 10. 41 mysql-bin. 000001
-rw-rw---- 1 mysql adm    32 Sep  5 10. 41 mysql-bin. indeks

mysql-bin. 000001 saat ini log aktif yang akan ditulis SQL untuk perubahan yang dilakukan pada semua
database (Anda dapat membatasi perilaku itu dengan params binlog_do_db dan binlog_ignore_db)

/var/log/mysql/mysql-bin. indeks berisi daftar semua file log biner

Sekarang, mari buat database pengujian

BUAT DATABASE 'gsp_db';
GUNAKAN 'gsp_db';
BUAT TABEL 'gsp_db_t1' (
'id' INT BUKAN NULL AUTO_INCREMENT,
'test_field' VARCHAR(30) BUKAN NULL,
'time_created' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
KUNCI UTAMA ('id')
) MESIN=InnoDB;

Dan masukkan beberapa baris

GUNAKAN 'gsp_db';
INSERT ke dalam 'gsp_db_t1' (test_field) VALUES ('val1');
INSERT ke 'gsp_db_t1' (test_field) VALUES ('val2');
MASUKKAN ke 'gsp_db_t1' (test_field) VALUES ('val3');

Cadangan
###########################################

Oke, ini adalah keadaan awal db kami yang sekarang akan melakukan pencadangan penuh dengan mysqldump

mysqldump -uroot -p --all-databases --transaksi tunggal --flush-logs --master-data=2 > full_backup. sql

(--transaksi tunggal akan membuang tabel InnoDB dalam status yang konsisten,  --flush-logs akan ditutup
log saat ini dan buka yang baru, --master-data=2 akan menulis koordinat log biner dalam komentar SQL di file dump)

Jika Anda melihat lagi di /var/log/mysql/ dir, Anda akan melihat bahwa file log baru dibuat (mysql-bin. 000002)
Semua perubahan mulai sekarang, akan ditulis ke file itu
Lain kali Anda menjalankan flush-log atau me-restart server mysql, mysql-bin. 000003 akan dibuat dan seterusnya

mysql@mysqlhost1$ ls -al /var/log/mysql/
jumlah 20
drwxr-s--- 2 mysql adm  4096 Sep  5 10. 48
drwxr-xr-x 7 akar  akar 4096 Sep  5 09. 52
-rw-rw---- 1 mysql adm   149 Sep  5 10. 48 mysql-bin. 000001
-rw-rw---- 1 mysql adm   106 Sep  5 10. 48 mysql-bin. 000002
-rw-rw---- 1 mysql adm    64 Sep  5 10. 48 mysql-bin. indeks

Mari sekarang masukkan lebih banyak baris ke dalam db

GUNAKAN 'gsp_db';
INSERT ke 'gsp_db_t1' (test_field) VALUES ('val4');
INSERT ke 'gsp_db_t1' (test_field) VALUES ('val5');
INSERT ke 'gsp_db_t1' (test_field) VALUES ('val6');

Oke, sekarang saatnya melakukan backup tambahan. Ini cukup sederhana, kami hanya
perlu menyiram log lagi dan menyimpan log biner yang dibuat dari penuh terakhir
cadangan sampai sekarang ke beberapa lokasi yang aman


Untuk membersihkan log secara manual, jalankan perintah ini
###########################################

mysqladmin -uroot -p flush-logs

Log biner baru dibuat di /var/log/mysql/

mysql@mysqlhost1$ ls -al /var/log/mysql/
jumlah 24
drwxr-s--- 2 mysql adm  4096 Sep  5 10. 58
drwxr-xr-x 7 akar  akar 4096 Sep  5 09. 52
-rw-rw---- 1 mysql adm   149 Sep  5 10. 48 mysql-bin. 000001
-rw-rw---- 1 mysql adm   884 Sep  5 10. 58 mysql-bin. 000002
-rw-rw---- 1 mysql adm   106 Sep  5 10. 58 mysql-bin. 000003
-rw-rw---- 1 mysql adm    96 Sep  5 10. 58 mysql-bin. indeks

Dan kita hanya perlu menyimpan mysql-bin. 000002, karena berisi semua perubahan yang kami lakukan setelah pencadangan penuh kami
Memulihkan

Mari kita lihat bagaimana tampilan meja kita sekarang

mysql> pilih * dari gsp_db_t1;
+----+------------+------------------------+
Indo. test_field. time_created
+----+------------+------------------------+
1. val1. 05-09-2010 10. 15. 35
2. val2. 05-09-2010 10. 15. 35
3. val3. 05-09-2010 10. 15. 35
4. val4. 05-09-2010 10. 57. 43
5. val5. 05-09-2010 10. 57. 43
6. val6. 05-09-2010 10. 57. 44
+----+------------+------------------------+
6 baris dalam set (0. 00 detik)

Sekarang kami akan menghancurkan database dan mencoba memulihkannya dari cadangan

mysql> jatuhkan basis data gsp_db;
Kueri Oke, 1 baris terpengaruh (0. 01 detik)

Pertama, dari cadangan penuh

mysql@mysqlhost1$ mysql -u root -p

mysql> buat basis data gsp_db;
Kueri Oke, 1 baris terpengaruh (0. 00 detik)

mysql@mysqlhost1$ mysql -u root -p gsp_db < full_backup. sql

Ini adalah isi tabel sekarang

mysql> pilih * dari gsp_db_t1;
+----+------------+------------------------+
Indo. test_field. time_created
+----+------------+------------------------+
1. val1. 05-09-2010 10. 15. 35
2. val2. 05-09-2010 10. 15. 35
3. val3. 05-09-2010 10. 15. 35
+----+------------+------------------------+
3 baris dalam set (0. 00 detik)

Sekarang kita hanya perlu menerapkan perubahan dari log biner

Ada alat bernama mysqlbinlogyang menampilkan konten log dalam format teks
Hasilnya dapat disalurkan langsung ke perintah mysql

mysql@mysqlhost1$ mysqlbinlog --stop-datetime="2010-09-05 10. 55. 44" mysql-bin. 000002. mysql -uroot -p gsp_db

Apa saja jenis cadangan di MySQL?

1. 1 Jenis Pencadangan dan Pemulihan .
Pencadangan Fisik (Mentah) Versus Logis. .
Pencadangan Online Versus Offline. .
Pencadangan Lokal Versus Jarak Jauh. .
Pencadangan Snapshot. .
Pencadangan Penuh Versus Inkremental. .
Pemulihan Penuh Versus Point-in-Time (Incremental). .
Pemeliharaan Meja. .
Penjadwalan Cadangan, Kompresi, dan Enkripsi

Apakah Mysqldump merupakan cadangan panas?

mysqldump juga merupakan opsi - perhatikan bahwa mysqldump bukan alat cadangan panas secara default (terutama jika tabel Anda menggunakan beberapa mesin penyimpanan .

Apakah Mysqldump mencadangkan prosedur tersimpan?

Secara default, mysqldump akan mencadangkan semua pemicu tetapi BUKAN prosedur dan fungsi tersimpan . Jika Anda ingin memasukkan stored procedure dan trigger, Anda perlu menambahkan –routines dalam perintah backup Anda sebagai berikut. Perintah ini akan mencadangkan seluruh database termasuk prosedur tersimpan.

Apa itu cadangan di MySQL?

Mysqldump adalah utilitas baris perintah yang digunakan untuk menghasilkan cadangan logis dari database MySQL . Ini menghasilkan Pernyataan SQL yang dapat digunakan untuk membuat ulang objek dan data database. Perintah juga dapat digunakan untuk menghasilkan keluaran dalam format XML, teks terbatas, atau CSV.