MyDumper adalah Alat Cadangan Logis MySQL. Ini memiliki 2 alat:
mydumper
yang bertanggung jawab untuk mengekspor cadangan database MySQL yang konsistenmyloader
membaca cadangan dari mydumper, menghubungkan ke database tujuan dan mengimpor cadangan. Kedua alat tersebut menggunakan kemampuan multithreading.
MyDumper adalah Open Source dan dikelola oleh komunitas, ini bukan produk Percona, MariaDB atau MySQL.
Dokumentasi Resmi (sedang dalam proses)
Bagian ini telah dimigrasikan
Pertama-tama dapatkan url yang benar dari bagian rilis lalu:
release= $( curl -Ls -o /dev/null -w %{url_effective} https://github.com/mydumper/mydumper/releases/latest | cut -d ' / ' -f8 )
yum install https://github.com/mydumper/mydumper/releases/download/ ${release} /mydumper- ${release : 1} .el7.x86_64.rpm
yum install https://github.com/mydumper/mydumper/releases/download/ ${release} /mydumper- ${release : 1} .el8.x86_64.rpm
Untuk ubuntu, Anda perlu menginstal dependensi:
apt-get install libatomic1
Kemudian Anda dapat mengunduh dan menginstal paketnya:
release= $( curl -Ls -o /dev/null -w %{url_effective} https://github.com/mydumper/mydumper/releases/latest | cut -d ' / ' -f8 )
wget https://github.com/mydumper/mydumper/releases/download/ ${release} /mydumper_ ${release : 1} . $( lsb_release -cs ) _amd64.deb
dpkg -i mydumper_ ${release : 1} . $( lsb_release -cs ) _amd64.deb
Dengan menggunakan pkg
pkg install mydumper
atau dari pelabuhan
cd /usr/ports/databases/mydumper && make install
Dengan menggunakan Homebrew
brew install mydumper
Perhatikan bahwa file mydumper.cnf akan berlokasi di /usr/local/etc atau /opt/homebrew/etc. Jadi, Anda mungkin perlu menjalankan mydumper/myloader dengan:
mydumper --defaults-file=/opt/homebrew/etc/mydumper.cnf
myloader --defaults-file=/opt/homebrew/etc/mydumper.cnf
apt-get install cmake g++ git
yum install -y cmake gcc gcc-c++ git make
sudo port install cmake pkgconfig
apt-get install libglib2.0-dev zlib1g-dev libpcre3-dev libssl-dev libzstd-dev
yum install -y glib2-devel openssl-devel pcre-devel zlib-devel libzstd-devel
zypper install glib2-devel libmysqlclient-devel pcre-devel zlib-devel
sudo port install glib2 pcre
Anda perlu memilih satu perpustakaan pengembangan vendor.
apt-get install libmysqlclient-dev
apt-get install libperconaserverclient20-dev
apt-get install libmariadbclient-dev
yum install -y mysql-devel
yum install -y Percona-Server-devel-57
yum install -y mariadb-devel
CentOS 7 hadir secara default dengan perpustakaan MariaDB 5.5 yang sudah sangat tua. Mungkin lebih baik mengunduh versi terbaru dari perpustakaan ini (MariaDB, MySQL, Percona, dll).
zypper install libmysqlclient-devel
sudo port install mariadb-10.11
sudo port select mysql
Berlari:
cmake .
make
sudo make install
Kita harus memastikan, bahwa pkg-config, mysql_config, pcre-config semuanya ada di $PATH
Binlog dump dinonaktifkan secara default untuk mengkompilasinya, Anda perlu menambahkan -DWITH_BINLOG=ON ke opsi cmake
Untuk membangun terhadap lib mysql <5.7 Anda perlu menonaktifkan penambahan SSL -DWITH_SSL=OFF
Anda dapat mengunduh image buruh pelabuhan resmi atau Anda dapat membuat image Docker baik dari sumber lokal atau langsung dari sumber Github dengan Dockerfile yang disediakan.
docker build --build-arg CMAKE_ARGS= ' -DWITH_ZSTD=ON ' -t mydumper github.com/mydumper/mydumper
Ingatlah bahwa tujuan utama alamat Dockerfile adalah pengembangan dan pembangunan dari sumber secara lokal. Ini mungkin tidak optimal untuk tujuan distribusi, namun juga dapat berfungsi sebagai solusi build and run yang cepat dengan one-liner di atas.
Lihat Penggunaan
Ini semua dilakukan dengan mengikuti praktik dan tradisi MySQL terbaik:
Untuk saat ini, ini tidak memberikan gambaran yang konsisten untuk mesin non-transaksional - dukungan untuk itu diharapkan pada 0,2 :)
Sekali dapat menggunakan fungsionalitas --regex, misalnya untuk tidak membuang database mysql, sys, dan pengujian:
mydumper --regex ' ^(?!(mysql.|sys.|test.)) '
Untuk hanya membuang mysql dan menguji database:
mydumper --regex ' ^(mysql.|test.) '
Untuk tidak membuang semua database yang dimulai dengan test:
mydumper --regex ' ^(?!(test)) '
Untuk membuang tabel tertentu ke database yang berbeda (Catatan: Nama tabel harus diakhiri dengan $. masalah terkait):
mydumper --regex ' ^(db1.table1$|db2.table2$) '
Jika Anda ingin membuang beberapa database tetapi membuang beberapa tabel, Anda dapat melakukan:
mydumper --regex ' ^(?=(?:(db1.|db2.)))(?!(?:(db1.table1$|db2.table2$))) '
Yang akan membuang semua tabel di db1 dan db2 tetapi akan mengecualikan db1.table1 dan db2.table2
Tentu saja, fungsionalitas regex dapat digunakan untuk mendeskripsikan hampir semua daftar tabel.
Anda dapat menjalankan perintah eksternal dengan --exec seperti ini:
mydumper --exec " /usr/bin/gzip FILENAME "
--exec adalah implementasi berulir tunggal, serupa dengan Stream. Program exec harus berupa jalur absolut. NAMA FILE akan diganti dengan nama file yang ingin diproses. Anda dapat mengatur NAMA FILE di mana saja sebagai argumen.
File default (alias: --defaults-file parameter) mulai menjadi lebih penting di MyDumper
[mydumper]
host = 127.0.0.1
user = root
password = p455w0rd
database = db
rows = 10000
[myloader]
host = 127.0.0.1
user = root
password = p455w0rd
database = new_db
innodb-optimize-keys = AFTER_IMPORT_PER_TABLE
Sebelum v0.14.0-1:
[mydumper_variables]
wait_timeout = 300
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[myloader_variables]
long_query_time = 300
innodb_flush_log_at_trx_commit = 0
Dari hingga v0.14.0-1:
[mydumper_session_variables]
wait_timeout = 300
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mydumper_global_variables]
sync_binlog = 0
slow_query_log = OFF
[myloader_session_variables]
long_query_time = 300
[myloader_global_variables]
sync_binlog = 0
innodb_flush_log_at_trx_commit = 0
[ ` db ` . ` table ` ]
where = column > 20
limit = 10000
[ ` myd_test ` . ` t ` ]
columns_on_select=qty,price+20
columns_on_insert=qty,price
PENTING: saat menggunakan opsi yang tidak memerlukan argumen seperti: --no-data atau --events, Anda perlu menetapkan nilai apa pun ke variabel tersebut yang akan selalu menunjukkan: TRUE/ON/ENABLE. Merupakan SALAH KONSEPSI jika Anda berpikir bahwa menambahkan --no-data=0
akan mengekspor data:
[mydumper]
no-data=0
TIDAK akan mengekspor data karena tidak ada data yang ditentukan.