Rumah  >  Artikel  >  pangkalan data  >  Cara menggunakan Xtrabackup untuk sandaran tambahan mysql

Cara menggunakan Xtrabackup untuk sandaran tambahan mysql

WBOY
WBOYke hadapan
2023-05-30 14:50:061332semak imbas

Gunakan Xtrabackup untuk sandaran tambahan mysql

Kini versi xtrabackup telah dinaik taraf kepada 8.0, tetapi ia hanya disokong untuk mysql8.0 Kami masih menggunakan 2.4, tetapi 2.4 dibandingkan dengan yang sebelumnya2.1 Terdapat perubahan besar: innobackupex fungsi semuanya disepadukan ke dalam xtrabackup, dan hanya terdapat satu binary Selain itu, atas sebab keserasian, innobackupex digunakan sebagai pautan lembut xtrabackup, iaitu xtrabackup Sandaran jadual bukan Innodb kini disokong dan Innobackupex akan dialih keluar dalam versi seterusnya (sudah dialih keluar dalam 8.0 Adalah disyorkan untuk menggantikan xtrabackup dengan innobackupex). Terdapat juga beberapa ciri baharu yang lain untuk mendapatkan arahan lanjut, sila lihat xtrabackup arahan terperinci versi baharu.

Pemasangan

Jika pemasangan memerlukan kebergantungan, pasangkannya

wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
sudo apt-get update
sudo apt-get install percona-xtrabackup-24

Sediakan pangkalan data untuk akaun sandaran

mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;

Sandaran penuh

xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/mysql
# 会看到输出
200603 09:55:37 Executing UNLOCK TABLES
200603 09:55:37 All tables unlocked
200603 09:55:37 [00] Copying ib_buffer_pool to /data/backups/mysql/ib_buffer_pool
200603 09:55:37 [00]        ...done
200603 09:55:37 Backup created in directory '/data/backups/mysql/'
200603 09:55:37 [00] Writing /data/backups/mysql/backup-my.cnf
200603 09:55:37 [00]        ...done
200603 09:55:37 [00] Writing /data/backups/mysql/xtrabackup_info
200603 09:55:37 [00]        ...done
xtrabackup: Transaction log of lsn (837940114) to (837940123) was copied.
200603 09:55:37 completed OK!
  • Sediakan sandaran

xtrabackup --prepare --target-dir=/data/backups/mysql
  • Salin sandaran

Saya hanya akan buat sandaran penuh di sini untuk menunjukkan Pindahkan direktori data di mana blog saya mysql disimpan

mv /var/lib/mysql /var/lib/mysql_bak
mkdir /var/lib/mysql
xtrabackup --copy-back --target-dir=/data/backups/mysql  # 这样会保留原始备份 他会将当时读到my.cnf的datadir设置为恢复路径
200603 10:47:42 [01]        ...done
200603 10:47:42 [01] Copying ./performance_schema/mutex_instances.frm to /var/lib/mysql/performance_schema/mutex_instances.frm
200603 10:47:42 [01]        ...done
200603 10:47:42 [01] Copying ./performance_schema/events_transactions_history_long.frm to /var/lib/mysql/performance_schema/events_transactions_history_long.frm
200603 10:47:42 [01]        ...done
200603 10:47:42 [01] Copying ./xtrabackup_info to /var/lib/mysql/xtrabackup_info
200603 10:47:42 [01]        ...done
200603 10:47:42 [01] Copying ./ibtmp1 to /var/lib/mysql/ibtmp1
200603 10:47:42 [01]        ...done
200603 10:47:42 completed OK!
  • Sandaran berjaya dan saya masih boleh mengakses blog seperti biasa selepas memulakan semula hahahahahahahaha

# 将恢复目录的属主更改一下
chown -R mysql:mysql mysql
/etc/init.d/mysql start

Jika anda tidak mahu membuat sandaran data semasa pemulihan, anda boleh menggunakan perintah xtrabackup --move-back

Sandaran tambahan

Sandaran tambahan adalah berdasarkan data sedia ada, yang bermakna anda perlu membuat sandaran penuh terlebih dahulu dan kemudian merekodkannya pada masa itu

  • Buat sandaran

xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/base
# 基于全量备份进行增量
xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base
  • <.>Semak jenis sandaran untuk mengesahkan ia adalah sandaran tambahan

  • root@longing:/data/backups/inc1# cat xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 837943393
    to_lsn = 837943393
    last_lsn = 837943402
    compact = 0
    recover_binlog_info = 0
    flushed_lsn = 837943402

ialah titik permulaan sandaran from_lsn, untuk sandaran tambahan ia mestilah LSN sama seperti sandaran to_lsn sebelumnya. base

Dalam kes ini, anda dapat melihat bahawa terdapat perbezaan antara

(titik pemeriksaan terakhir LSN) dan to_lsn (terakhir disalin last_lsn), yang bermaksud bahawa semasa proses sandaran Terdapat beberapa trafik pada pelayan. LSN

  • Kami boleh menguji kenaikan pertama dan terus membuat kenaikan sebelum mencipta beberapa keping data

  • xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/data/backups/inc2 --incremental-basedir=/data/backups/inc1
  • Bersedia untuk pulihkan

Sudah ada 3 sandaran kita perlu menyediakan data asas dahulu, dan kemudian menyediakan dua kenaikan

xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base
xtrabackup --user=bkpuser --password=123456 --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/inc1
xtrabackup --user=bkpuser --password=123456 --prepare --target-dir=/data/backups/base --incremental-dir=/data/backups/inc2

Harus digunakan apabila menggabungkan semua. kenaikan kecuali yang terakhir, setelah disediakan, sandaran tambahan adalah sama dengan sandaran penuh dan ia boleh dipulihkan dengan cara yang sama. xtrabackup --apply-log-only

  • Pulihkan

  • xtrabackup --copy-back --target-dir=/data/backups/base
Data yang dimasukkan di tengah boleh dilihat, hebat!

Ringkasan soalan

  • Langkah sandaran tambahan

  • Buat sandaran asas

  • Kenaikan dalam keadaan tertentu Penciptaan sandaran

  • Sediakan semua sandaran tambahan adalah berdasarkan sandaran asas dan bersamaan dengan operasi gabungan

  • Akhirnya, simpan sahaja. secara langsung seperti sandaran penuh

Prinsip

Fail log buat semula akan diselenggara secara dalaman dalam

, yang juga boleh kami panggil sebagai fail log transaksi log akan menyimpan rekod setiap data jadual InnoDB Semak semula. Apabila InnoDB bermula, InnoDB menyemak fail data dan log urus niaga dan melaksanakan dua langkah: ia menggunakan (menuju ke hadapan) log urus niaga komited pada fail data dan melancarkan semula data yang diubah suai tetapi tidak komited. InnoDB

akan mengingati Xtrabackup pada permulaan, dan menyalin semua fail data. Proses penyalinan mengambil sedikit masa, jadi jika fail data diubah suai dalam tempoh ini, pangkalan data akan berada pada masa yang berbeza. Pada masa ini, log sequence number(LSN) akan menjalankan proses latar belakang untuk memantau log transaksi dan menyalin pengubahsuaian terkini daripada log transaksi. xtrabackup Operasi ini mesti dilakukan secara berterusan kerana log transaksi akan ditulis berulang kali secara bergilir, dan log transaksi boleh digunakan semula. Oleh itu Xtrabackup Sejak permulaan, pengubahsuaian pada setiap fail data dalam log transaksi telah direkodkan secara berterusan. Di atas adalah proses sandaran xtrabackup. xtrabackup

Mengapa tidak menggunakan "--apply-log-only" untuk sandaran tambahan terakhir

Operasi "persediaan" terakhir tidak perlu melangkau operasi rollback, supaya fail data? digunakan untuk pemulihan adalah setempat Ia dijaga apabila perkhidmatan bermula, ia tidak akan memasuki fasa rollback lagi Jika parameter ini digunakan untuk kali terakhir, pelayan akan memasuki fasa rollback selepas ia bermula. Jadi

ini hanya digunakan untuk menggabungkan kenaikan untuk mengelakkan kenaikan seterusnya tidak tersedia. Lihat --apply-log-only参见 man xtrabackup

为什么备份完后要准备备份 "prepare"

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。他的作用是使数据文件处于一致性状态,方法是回滚未提交的事务并同步已提交的事务至数据文件。

为什么选择这个做备份?

  • mysqldump 备份缺点

效率较低,备份和还原速度慢,份过程中,数据插入和更新操作会被挂起

  • MySQL 备份工具

跨平台性差,备份时间长,冗余备份,浪费存储空间

  • XtraBackup

备份过程中不锁库表,适合生产环境,由专业组织Percona提供( 改进MySQL分支 )

  • XtraBackup能对表 库进行备份吗?

当然了,只不过博主太懒了,写起来太麻烦了,不过原理都是差不多,操作也差不多,大家自己搞搞!

xtrabackup --user=bkpuser --password=123456 --backup --databases="u_test" --no-timestamp --target-dir=/data/backups/u
xtrabackup --prepare --target-dir=/data/backups/u

还原

  • prepare,利用--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态

  • copy,因为是部分备份,不能直接用--copy-back,只能手动来复制需要的库,也要复制ibdata(数据字典)

  • cp /data/backups/u/ibdata1 /var/lib/mysql/

  • cp -r u/u_test /var/lib/mysql/

Atas ialah kandungan terperinci Cara menggunakan Xtrabackup untuk sandaran tambahan mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam