Подтвердить что ты не робот

Могу ли я получить дамп всех моих баз данных * кроме одного *, используя mysqldump?

В настоящее время я использую mySQLdump для резервного копирования моей машины и серверов dev.

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

В настоящее время я делаю это:

"c:\Program Files\mysql\MySQL Server 5.1\bin\mysqldump" -u root -pxxxxxx --all-databases > g:\backups\MySQL\mysqlbackup.sql

Можно ли как-то указать "кроме этой базы данных"??

Мне не хотелось бы указывать список БД вручную, так как это означало бы, что я должен был бы помнить, как обновлять файл резервной копии каждый раз, когда я создаю новую БД, и я знаю, что этого не произойдет.

EDIT: Как вы, наверное, догадались из моей командной строки выше, я делаю это в Windows, поэтому я не могу делать какие-либо причудливые вещи bash, только wimpy.bat.

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

4b9b3361

Ответ 1

mysql ... -N -e "show databases like '%';" | grep -v -F databaseidontwant | xargs mysqldump ... --databases > out.sql

Ответ 2

echo 'show databases;' | mysql -uroot -proot | grep -v ^Database$ | grep -v ^information_schema$ | grep -v ^mysql$ | grep -v -F db1 | xargs mysqldump -uroot -proot  --databases > all.sql

удаляет все базы данных, кроме: mysql, information_schema, mysql и db1.

Или, если вы хотите просмотреть список перед сбросом:

  • echo 'show databases;' | mysql -uroot -proot > databases.txt
  • отредактируйте databases.txt и удалите все, что вы не хотите выгружать
  • cat databases.txt | xargs mysqldump -uroot -proot --databases > all.sql

Ответ 3

Что насчет

- игнорировать стол = db_name.tbl_name

Не выгружайте указанную таблицу, которая должна быть указана с использованием имен базы данных и таблиц. Чтобы игнорировать несколько таблиц, используйте эту опцию несколько раз.

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

Ответ 4

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

Вам все равно нужно помнить о том, чтобы явно предоставлять привилегии, но это можно сделать в базе данных и не требует редактирования файла.

Ответ 5

Я создал следующее однострочное решение, избегая нескольких команд grep.

mysql -e "show databases;" | grep -Ev "Database|DatabaseToExclude1|DatabaseToExclude2" | xargs mysqldump --databases >mysql_dump_filename.sql

-E в grep позволяет расширенную поддержку регулярных выражений, которая позволяет предоставлять разные соответствия, разделенные символом трубы "|". В команду mysqldump можно добавить дополнительные параметры. Но только перед параметром "--databases".

Маленькая заметка, мне нравится определять имя файла для дампа, как это...

... >mysql_dump_$(hostname)_$(date +%Y-%m-%d_%H-%M).sql

Это автоматически объявит имя хоста, дату и время имени файла.:)

Ответ 6

Увидев, что вы используете Windows, у вас должен быть доступный PowerShell.
Вот короткий PowerShell script, чтобы получить список всех Баз Данных, удалить ненужные из списка, а затем использовать mysqldump для резервного копирования других.

$MySQLPath = "."
$Hostname = "localhost"
$Username = "root"
$Password = ""

# Get list of Databases
$Databases = [System.Collections.Generic.List[String]] (
    & $MySQLPath\mysql.exe -h"$Hostname" -u"$Username" -p"$Password" -B -N -e"show databases;"
)

# Remove databases from list we don't want
[void]$Databases.Remove("information_schema")
[void]$Databases.Remove("mysql")

# Dump database to .SQL file
& $MySQLPath\mysqldump.exe -h"$HostName" -u"$Username" -p"$Password" -B $($Databases) | Out-File "DBBackup.sql"

Ответ 7

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

mysql -hServerName -uUserName -pPassword -e "SELECT CONCAT('\nmysqldump -hServerName -uUserName -pPassword --set-gtid-purged=OFF --max_allowed_packet=2048M --single-transaction --add-drop-database --opt --routines --databases ',DBList,' | mysql -hServerName2 -uUserName2 -pPAssword2 ' ) AS Cmd FROM (SELECT GROUP_CONCAT(schema_name SEPARATOR ' ') AS DBList FROM information_schema.SCHEMATA WHERE LEFT(schema_name, 8) <> 'cclegacy' AND schema_name NOT IN ('mysql','information_schema','performance_schema','test','external','othertoskip')) a \G" | cmd

Вместо перехода к mysql, где я перехожу от serverName к Servername2, вы можете перенаправить файл, но это позволяет мне адаптировать то, что я двигаю. Иногда я даже OR список, поэтому я могу сказать LIKE "Префикс%" и т.д.