如何使用mysqldump命令行实用程序完成mysql数据库的备份

时间:2009-07-03 07:30:53

标签: mysql backup mysqldump complete

如何使用mysqldump对mysql数据库进行完整备份? 当我进行备份时,我的指定数据库中的表只会被备份。程序和功能不是。

这是我正在使用的备份命令:
(操作系统是Windows Vista。)

mysqldump -u username -p db1 > backup.sql

8 个答案:

答案 0 :(得分:72)

如果您想在不中断任何连接的情况下进行完整备份,即所有数据库,过程,例程和事件:

mysqldump -u [username] -p -A -R -E --triggers --single-transaction > full_backup.sql
  1. -A对于所有数据库(您也可以使用--all-databases
  2. -R适用于所有例程(存储过程和触发器)
  3. -E适用于所有活动
  4. --single-transaction不锁定表格,即不中断任何连接(R / W)。
  5. 如果您只想备份指定的数据库:

    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 documentation中,或者在命令行中运行man mysqldump

答案 1 :(得分:14)

这取决于你的版本。在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 :(得分:14)

使用以下命令: -

mysqldump <other mysqldump options> --routines > outputfile.sql

如果我们只想备份存储过程和触发器而不是mysql表和数据,那么我们应该运行类似的东西:

mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt <database> > outputfile.sql

如果需要将它们导入到另一个数据库/服务器,则必须运行以下内容:

mysql <database> < outputfile.sql

答案 3 :(得分:5)

除了--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 ...

答案 4 :(得分:2)

使用'-R'备份存储过程,但请记住,如果要在修改数据库时进行一致的转储,则需要使用--single-transaction(如果只备份innodb)或{ {1}}(如果你还需要myisam表)

答案 5 :(得分:2)

我正在使用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服务器中所有数据库的完整备份,以命名为当前日期时间。

答案 6 :(得分:0)

在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

答案 7 :(得分:0)

要创建转储,请执行以下步骤:

  1. 打开CMD并转到已安装MySQL的bin文件夹
    例如:C:\ Program Files \ MySQL \ MySQL Server 8.0 \ bin。如果你看到这个
    文件夹mysqldump.exe将存在。或者您已经在文件夹上方设置了 在您的环境变量的路径变量中。

  2. 现在,如果您在CMD中单击mysqldump,则可以看到CMD能够识别转储命令。

  3. 现在运行“ mysqldump -h [host] -P [port] -u [username] -p --skip-triggers --no-create-info --single-transaction --quick --lock -tables = false ABC_databse> c:\ xyz.sql
  4. 以上命令将提示输入密码,然后开始处理。