MyDumper — инструмент логического резервного копирования MySQL. Имеет 2 инструмента:
mydumper
, который отвечает за экспорт согласованной резервной копии баз данных MySQL.myloader
считывает резервную копию из mydumper, подключается к целевой базе данных и импортирует резервную копию. Оба инструмента используют возможности многопоточности.
MyDumper имеет открытый исходный код и поддерживается сообществом. Он не является продуктом Percona, MariaDB или MySQL.
Официальная документация (в разработке)
Этот раздел был перенесен
Сначала получите правильный URL-адрес из раздела релизов, затем:
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
Для Ubuntu вам необходимо установить зависимости:
apt-get install libatomic1
Затем вы можете скачать и установить пакет:
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
С помощью пакета
pkg install mydumper
или из портов
cd /usr/ports/databases/mydumper && make install
С помощью доморощенного
brew install mydumper
Учтите, что файл mydumper.cnf будет расположен в /usr/local/etc или /opt/homebrew/etc. Итак, вам может потребоваться запустить mydumper/myloader с помощью:
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
Вам необходимо выбрать библиотеку разработки одного поставщика.
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 по умолчанию поставляется с очень старыми библиотеками MariaDB 5.5. Возможно, лучше загрузить более новую версию этих библиотек (MariaDB, MySQL, Percona и т. д.).
zypper install libmysqlclient-devel
sudo port install mariadb-10.11
sudo port select mysql
Бегать:
cmake .
make
sudo make install
Необходимо убедиться, что pkg-config, mysql_config, pcre-config находятся в $PATH.
Дамп Binlog по умолчанию отключен, для компиляции с ним необходимо добавить -DWITH_BINLOG=ON в параметры cmake.
Для сборки с использованием библиотек MySQL <5.7 вам необходимо отключить добавление SSL -DWITH_SSL=OFF.
Вы можете скачать официальный образ Docker или создать образ Docker либо из локальных источников, либо непосредственно из источников Github с помощью предоставленного файла Dockerfile.
docker build --build-arg CMAKE_ARGS= ' -DWITH_ZSTD=ON ' -t mydumper github.com/mydumper/mydumper
Имейте в виду, что основная цель Dockerfile — локальная разработка и сборка из исходного кода. Хотя это может быть неоптимально для целей распространения, но оно также может работать как решение для быстрой сборки и запуска с помощью приведенного выше однострочника.
См. Использование
Все это делается в соответствии с лучшими практиками и традициями MySQL:
На данный момент это не обеспечивает согласованных снимков для нетранзакционных движков — поддержка этого ожидается в версии 0.2 :)
Once можно использовать функцию --regex, например, чтобы не выгружать базы данных mysql, sys и test:
mydumper --regex ' ^(?!(mysql.|sys.|test.)) '
Чтобы выгрузить только MySQL и тестовые базы данных:
mydumper --regex ' ^(mysql.|test.) '
Чтобы не выгружать все базы данных, начиная с test:
mydumper --regex ' ^(?!(test)) '
Чтобы создать дамп определенных таблиц в разных базах данных (Примечание: имя таблиц должно заканчиваться на $. Проблема, связанная с этим):
mydumper --regex ' ^(db1.table1$|db2.table2$) '
Если вы хотите сбросить пару баз данных, но удалить некоторые таблицы, вы можете сделать:
mydumper --regex ' ^(?=(?:(db1.|db2.)))(?!(?:(db1.table1$|db2.table2$))) '
При этом будут выгружены все таблицы в db1 и db2, но исключены db1.table1 и db2.table2.
Конечно, функциональность регулярных выражений можно использовать для описания практически любого списка таблиц.
Вы можете выполнять внешние команды с помощью --exec следующим образом:
mydumper --exec " /usr/bin/gzip FILENAME "
--exec — однопоточный, реализация аналогична Stream. Программа exec должна иметь абсолютный путь. FILENAME будет заменено именем файла, который вы хотите обработать. Вы можете установить FILENAME в любом месте в качестве аргумента.
Файл по умолчанию (он же параметр --defaults-file) становится более важным в 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
До версии 0.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
От версии 0.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
ВАЖНО: при использовании опций, которые не требуют аргументов, таких как --no-data или --events, вам необходимо установить любое значение для этих переменных, которые всегда будут указывать: TRUE/ON/ENABLE. Это ЗАБЛУЖДЕНИЕ, если вы думаете, что добавление --no-data=0
приведет к экспорту данных:
[mydumper]
no-data=0
НЕ будет экспортировать данные, поскольку не указано отсутствие данных.