Действительно ли там кто-либо эквивалентен из mysqlhotcopy для InnoDB?

echo "Email body text" | mail -s "Subject of email" -a file.to.attach.txt my@email.com
4
задан 1 September 2009 в 16:47
7 ответов

Смотрите на Xtrabackup Percona, который позволяет горячее резервное копирование и полностью свободен.

8
ответ дан 3 December 2019 в 02:31

Если Вы имеете --innodb_file_per_table включенный, чем Вы может переместить .ibd файл и связанную таблицу от одной базы данных до другого, использовать оператор RENAME TABLE:

RENAME TABLE db1.tbl_name TO db2.tbl_name;

Если у Вас есть “чистое” резервное копирование .ibd файла, можно восстановить его к установке MySQL, из которой это произошло следующим образом:

Сделайте это заявление ALTER TABLE для удаления текущего .ibd файла:

ALTER TABLE tbl_name DISCARD TABLESPACE;

Скопируйте резервное копирование .ibd файл к надлежащему каталогу базы данных.

Сделайте это заявление ALTER TABLE, чтобы сказать InnoDB использовать новый .ibd файл для таблицы:

ALTER TABLE tbl_name IMPORT TABLESPACE;

В этом контексте “чистое” .ibd резервное копирование файлов один, для которого удовлетворены следующие требования:

Нет никаких незафиксированных модификаций транзакциями в .ibd файле.

В .ibd файле существуют не необъединенные буферные записи вставки.

Чистка удалила, все удаляют - отмеченные индексные записи из .ibd файла.

mysqld сбросил все измененные страницы .ibd файла от пула буферов до файла.

Можно сделать чистое резервное копирование .ibd файлом с помощью следующего метода:

Остановите все действие с mysqld сервера и фиксируйте все транзакции.

Ожидайте, пока ВЫСТАВОЧНЫЙ МЕХАНИЗМ, СОСТОЯНИЕ INNODB показывает, что нет никаких активных транзакций в базе данных и основного состояния потока InnoDB, не Ожидает действия сервера. Затем можно сделать копию .ibd файла.

Другой метод для того, чтобы сделать чистую копию .ibd файла должен использовать коммерческий инструмент InnoDB Hot Backup

3
ответ дан 3 December 2019 в 02:31

Существует инструмент InnoDB/Oracle Hot Backup, который стоит денег. Я никогда не использовал его, но я предположил бы, что это делает то, что это говорит относительно олова.

Лично, я беру снимок LVM своих таблиц InnoDB и резервное копирование от снимка - на восстановлении, похоже, что системный катастрофический отказ произошел с InnoDB, который проходит, это - нормальный процесс воспроизведения журналов на запуске. Я люблю пояс и подход скреплений к резервным копиям, таким образом, я комбинирую регулярный snapshot-and-rsyncs с менее частым mysqldumps (и иногда удобно иметь довольно недавний дамп SQL, бродящий вокруг так или иначе).

1
ответ дан 3 December 2019 в 02:31

Вместо решения для дампа/восстановления, я подозреваю, что знаю причину, почему текущее восстановление занимает много времени.

У нас есть некоторые довольно большие базы данных (до 40 ГБ), и я восстановил Ваш размер за хорошо менее чем час.

Одна вещь, которую mysqldump сделает для создания вставок быстрее во время восстановления, состоит в том, чтобы выключить индексы, выполнить все вставки и затем применить индексы к таблицам.

Если пара mysql переменные не будет достаточно большой, то mysql скажет, что "восстанавливает ключевым кэшем" или чем-то подобным... это очень, очень, очень медленно.

Если правильные переменные будут установлены достаточно большие, то это скажет "восстановление путем сортировки", который является очень, намного более быстр.

Я не могу помнить точные переменные первое, что пришло на ум, но если это кажется, что может иметь место, сообщить мне в комментарии, и я вижу, могу ли я разыскать детали.

Как Nick упомянул, Xtrabackup Percona определенно достойный внимания также.

0
ответ дан 3 December 2019 в 02:31
  • 1
    Вы когда-либо разыскивали те переменные? Мне было бы любопытно знать, как улучшить это. –  A B 19 October 2010 в 23:33

Если у вас есть какие-либо таблицы MyISAM , Я бы предложил изменить их на InnoDB. Вот что я использую:

    mysql -u root --password=<password> --database=db_name -B -N -e "SHOW TABLES" | awk '!/not_this_db/ && !/or_this_one/ && /^[a-z]/ {print "ALTER TABLE", $1, "ENGINE=INNODB;"}' | mysql -u root --password=<password> --database=db_name

Вы можете исключить и включить базы данных с помощью регулярного выражения awk, например, только базы данных, начинающиеся со строчной буквы в моем примере выше. Это, конечно, заблокирует таблицы во время изменения.

Затем используйте xtrabackup для копирования всей базы данных прямо на другой сервер без блокировки каких-либо таблиц или использования слишком большого количества операций ввода-вывода диска (после установки ключей ssh ​​rsa):

innobackupex --throttle=500 --compress --stream=xbstream /doesntneedtoexist | ssh user@otherhost "xbstream -x -C /root/backup/"

, а затем вы можете сделать шаг применения журнала полностью разделить и сэкономить дисковое пространство, ввод-вывод и ЦП на производственном сервере.

HowTO от Percona для использования xtrabackup

0
ответ дан 3 December 2019 в 02:31

Если вы используете InnoDB, существует множество параметров, которые вы можете настроить для повышения производительности. Если вы используете InnoDB, то в вашем случае совершенно очевидно, что ваш innodb_file_per_table очень маленький. Увеличьте размер этого параметра как минимум до 50% от общего объема оперативной памяти и проверьте время, необходимое для восстановления.

Кроме того, вы можете увеличить параметр innodb_thread_concurrency.

Также попробуйте Percona xtrabackup. Я использую его для своих ТБ Db, и он отлично работает.

0
ответ дан 3 December 2019 в 02:31

Я добавил поддержку горячих копий в рубигем mysql_manager, но он поддерживает только горячие копии всего каталога mysql. Для этого он сначала выполняет повторяющиеся rsyncs без блокировки таблиц до тех пор, пока длительность синхронизации не станет допустимой, а затем получает блокировку с помощью FLUSH TABLES WITH READ LOCK перед выполнением финальной rsyncsnc. Так как используется rsync, она также поддерживает удаленные хосты.

Использование довольно простое.

Сначала установите жемчужину.

gem install mysql_manager

Вот как его запускать.

mysql-manager --hotcopy \
              --hotcopy:data-dir /var/lib/mysql/ \
              --hotcopy:backup-dir user@remote.host.com:/tmp/mysql/ \
              --hotcopy:rsync-args "-av --exclude=*.err" \
              --hotcopy:rsync-ttl 30 \
              --db:user root \
              --db:pass $MYSQL_ROOT_PASSWORD
0
ответ дан 3 December 2019 в 02:31

Теги

Похожие вопросы