Как выполнить полную резервную копию базы данных mysql с помощью утилиты командной строки mysqldump
Как я могу сделать полную резервную копию базы данных mysql с помощью mysqldump?
Когда я делаю резервную копию, мои таблицы из указанной базы данных только восстанавливаются. Процедуры и функции отсутствуют.
Здесь используется команда резервного копирования:
(Операционная система - Windows Vista.)
mysqldump -u username -p db1 > backup.sql
Ответы
Ответ 1
Это немного зависит от вашей версии. До 5.0.13 это невозможно с mysqldump.
Со страницы руководства mysqldump (v 5.1.30)
--routines, -R
Dump stored routines (functions and procedures) from the dumped
databases. Use of this option requires the SELECT privilege for the
mysql.proc table. The output generated by using --routines contains
CREATE PROCEDURE and CREATE FUNCTION statements to re-create the
routines. However, these statements do not include attributes such
as the routine creation and modification timestamps. This means that
when the routines are reloaded, they will be created with the
timestamps equal to the reload time.
...
This option was added in MySQL 5.0.13. Before that, stored routines
are not dumped. Routine DEFINER values are not dumped until MySQL
5.0.20. This means that before 5.0.20, when routines are reloaded,
they will be created with the definer set to the reloading user. If
you require routines to be re-created with their original definer,
dump and load the contents of the mysql.proc table directly as
described earlier.
Ответ 2
Если вы хотите сделать полную резервную копию, т.е. Все базы данных, процедуры, процедуры и события, не прерывая соединения:
mysqldump -u [username] -p -A -R -E --triggers --single-transaction > full_backup.sql
-
-A
Для всех баз данных (вы также можете использовать --All-databases
) -
-R
Для всех подпрограмм (хранимые процедуры и триггеры) -
-E
Для всех событий -
--single-transaction
без блокировки таблиц, т.е. без прерывания какого-либо соединения (R/W).
Если вы хотите сделать резервную копию только указанных баз данных:
mysqldump -u [username] -p [database_name] [other_database_name] -R -e --triggers --single-transaction > database_backup.sql
Если вы хотите сделать резервную копию только определенной таблицы в базе данных:
mysqldump -u [username] -p [database_name] [table_name] > table_backup.sql
Если вы хотите сделать резервную копию структуры базы данных, просто добавьте --no-data
к предыдущим командам:
mysqldump -u [username] –p[password] –-no-data [database_name] > dump_file.sql
mysqldump
есть еще много опций, которые описаны в документации по mysqldump
или при запуске man mysqldump
в командной строке.
Ответ 3
Используйте следующие команды: -
mysqldump <other mysqldump options> --routines > outputfile.sql
Если мы хотим резервировать ТОЛЬКО хранимые процедуры и триггеры, а не таблицы и данные mysql, тогда мы должны запускать что-то вроде:
mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt <database> > outputfile.sql
Если вам нужно импортировать их на другой db/server, вам придется запускать что-то вроде:
mysql <database> < outputfile.sql
Ответ 4
В дополнение к флагу -routines вам необходимо предоставить разрешениям на резервное копирование для чтения хранимых процедур:
GRANT SELECT ON `mysql`.`proc` TO <backup user>@<backup host>;
Мой минимальный набор привилегий GRANT для пользователя резервного копирования:
GRANT USAGE ON *.* TO ...
GRANT SELECT, LOCK TABLES ON <target_db>.* TO ...
GRANT SELECT ON `mysql`.`proc` TO ...
Ответ 5
Используйте '-R' для резервного копирования хранимых процедур, но также имейте в виду, что если вы хотите, чтобы последовательный дамп вашей базы данных при ее изменении вам нужно было использовать --single-transaction
(если вы только резервное копирование innodb) или --lock-all-tables
(если вам также нужны таблицы myisam)
Ответ 6
Я использую MySQL 5.5.40. Эта версия имеет опцию --all-databases
mysqldump -u<username> -p<password> --all-databases --events > /tmp/all_databases__`date +%d_%b_%Y_%H_%M_%S`.sql
Эта команда создаст полную резервную копию всех баз данных на сервере MySQL для имени файла в текущую дату.
Ответ 7
На MySQL 5.7 у меня работает, я использую CentOS7.
За взятие дампов.
Команда:
mysqldump -u user_name -p database_name -R -E > file_name.sql
Пример:
mysqldump -u root -p mr_sbc_clean -R -E > mr_sbc_clean_dump.sql
Для развертывания дампа.
Команда:
mysql -u user_name -p database_name < file_name.sql
Пример:
mysql -u root -p mr_sbc_clean_new < mr_sbc_clean_dump.sql
Ответ 8
Чтобы создать дамп, выполните следующие действия:
Откройте CMD и перейдите в папку bin, где вы установили свой MySQL
Например: C:\Program Files\MySQL\MySQL Server 8.0\bin. Если вы видите в этом
папка mysqldump.exe будет там. Или у вас есть настройки над папкой
в вашей переменной Path переменной среды.
Теперь, если вы нажмете mysqldump в CMD, вы увидите, что CMD может определить команду дампа.
- Теперь запустите "mysqldump -h [хост] -P [порт] -u [имя пользователя] -P --skip-триггеры --no-create-info --single-транзакция --quick - lock-tables = false ABC_databse> c:\xyz.sql"
- Выше команда запросит пароль, после чего начнется обработка.