MyDumper é uma ferramenta de backup lógico MySQL. Possui 2 ferramentas:
mydumper
que é responsável por exportar um backup consistente de bancos de dados MySQLmyloader
lê o backup do mydumper, conecta-se ao banco de dados de destino e importa o backup. Ambas as ferramentas usam recursos multithreading.
MyDumper é Open Source e mantido pela comunidade, não é um produto Percona, MariaDB ou MySQL.
Documentação Oficial (trabalho em andamento)
Esta seção foi migrada
Primeiro obtenha o URL correto na seção de lançamentos e depois:
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
Para o Ubuntu, você precisa instalar as dependências:
apt-get install libatomic1
Então você pode baixar e instalar o pacote:
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
Usando pacote
pkg install mydumper
ou de portos
cd /usr/ports/databases/mydumper && make install
Usando o Homebrew
brew install mydumper
Leve em consideração que o arquivo mydumper.cnf estará localizado em /usr/local/etc ou /opt/homebrew/etc. Então, você pode precisar executar mydumper/myloader com:
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
Você precisa selecionar uma biblioteca de desenvolvimento de fornecedor.
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
O CentOS 7 vem por padrão com bibliotecas MariaDB 5.5 que são muito antigas. Talvez seja melhor baixar uma versão mais recente dessas bibliotecas (MariaDB, MySQL, Percona etc).
zypper install libmysqlclient-devel
sudo port install mariadb-10.11
sudo port select mysql
Correr:
cmake .
make
sudo make install
É preciso ter certeza de que pkg-config, mysql_config, pcre-config estão todos em $PATH
O dump do binlog está desabilitado por padrão para compilar com ele, você precisa adicionar -DWITH_BINLOG=ON às opções do cmake
Para construir em bibliotecas mysql <5.7 você precisa desabilitar o SSL adicionando -DWITH_SSL=OFF
Você pode baixar a imagem oficial do Docker ou construir a imagem do Docker a partir de fontes locais ou diretamente de fontes do Github com o Dockerfile fornecido.
docker build --build-arg CMAKE_ARGS= ' -DWITH_ZSTD=ON ' -t mydumper github.com/mydumper/mydumper
Tenha em mente que o objetivo principal dos endereços do Dockerfile é desenvolver e construir a partir da fonte localmente. Pode não ser ideal para fins de distribuição, mas também pode funcionar como uma solução rápida de construção e execução com o one-liner acima.
Veja o uso
Tudo isso é feito seguindo as melhores práticas e tradições do MySQL:
Por enquanto, isso não fornece instantâneos consistentes para mecanismos não transacionais - o suporte para isso é esperado na versão 0.2 :)
Uma vez pode usar a funcionalidade --regex, por exemplo, para não despejar bancos de dados mysql, sys e testes:
mydumper --regex ' ^(?!(mysql.|sys.|test.)) '
Para despejar apenas bancos de dados mysql e de teste:
mydumper --regex ' ^(mysql.|test.) '
Para não despejar todos os bancos de dados começando com teste:
mydumper --regex ' ^(?!(test)) '
Para despejar tabelas específicas em bancos de dados diferentes (Nota: O nome das tabelas deve terminar com $. problema relacionado):
mydumper --regex ' ^(db1.table1$|db2.table2$) '
Se quiser descartar alguns bancos de dados, mas descartar algumas tabelas, você pode fazer:
mydumper --regex ' ^(?=(?:(db1.|db2.)))(?!(?:(db1.table1$|db2.table2$))) '
O que irá despejar todas as tabelas em db1 e db2, mas excluirá db1.table1 e db2.table2
É claro que a funcionalidade regex pode ser usada para descrever praticamente qualquer lista de tabelas.
Você pode executar comandos externos com --exec assim:
mydumper --exec " /usr/bin/gzip FILENAME "
--exec é uma implementação de thread único e semelhante ao Stream. O programa exec deve ser um caminho absoluto. FILENAME será substituído pelo nome do arquivo que você deseja processar. Você pode definir FILENAME em qualquer lugar como argumento.
O arquivo padrão (também conhecido como parâmetro --defaults-file) está começando a ser mais importante no 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
Antes da 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
De até 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
IMPORTANTE: ao usar opções que não requerem argumentos como: --no-data ou --events, você precisa definir qualquer valor para essas variáveis que sempre indicarão: TRUE/ON/ENABLE. É um Equívoco se você pensa que adicionar --no-data=0
exportará dados:
[mydumper]
no-data=0
NÃO exportará os dados porque nenhum dado está sendo especificado.