使用mysqldump备份MySQL或MariaDB

MySQLMariaDB包含mysqldump实用程序,以简化创建数据库或数据库系统的备份的过程。使用mysqldump创建逻辑备份仅当您的数据库进程可访问且正在运行时,才可以使用此工具。

如果由于某种原因无法访问数据库,则可以创建一个备份导入,它是包含数据的文件系统结构的副本。

前置条件


  • 您将需要有效的MySQL或MariaDB安装,以及一个数据库用户来运行备份。

  • 您将需要对系统的root访问权限,或者具有sudo特权的用户帐户。

备份数据库


mysqldump命令的一般语法为:

    mysqldump -u [username] -p [databaseName] > [filename]-$(date +%F).sql
  • mysqldump 在开始备份过程之前提示输入密码。
  • 根据数据库的大小,可能需要一段时间才能完成。
  • 数据库备份将在运行命令的目录中创建。
  • -$(date +%F) 在文件名中添加时间戳。

用例示例包括:

  • 创建整个数据库管理系统(DBMS)的备份:

    mysqldump --all-databases --single-transaction --quick --lock-tables=false > full-backup-$(date +%F).sql -u root -p
  • 备份特定的数据库。替换db1为要备份的数据库的名称:

    mysqldump -u username -p db1 --single-transaction --quick --lock-tables=false > db1-backup-$(date +%F).sql
  • 从任何数据库备份一个表。在以下示例中,table1从数据库导出db1

    mysqldump -u username -p --single-transaction --quick --lock-tables=false db1 table1 > db1-table1-$(date +%F).sql

以下是mysqldump上面使用的命令选项的细分:

  • --single-transaction:在从服务器中转储数据之前,发出BEGIN SQL语句。
  • --quick:强制逐行转储表。这为具有较少RAM和/或大型数据库的系统(在其中将表存储在内存中可能会带来问题)提供了更高的安全性。
  • --lock-tables=false:请勿为备份会话锁定表。

使用cron自动执行备份


可以添加条目/etc/crontab以定期计划数据库备份。

  1. 创建一个文件来保存将执行备份的MySQL根用户的登录凭据。注意,此文件存储在其主目录中的系统用户可以与任何MySQL用户无关。

    /home/example_user/.mylogin.cnf

    [client]
    user = root
    password = MySQL root user's password
  2. 限制凭据文件的权限:
    chmod 600 /home/example_user/.mylogin.cnf

  3. 创建cron作业文件。下面是一个示例cron作业,每天凌晨1点备份整个数据库管理系统:
    /etc/cron.daily/mysqldump

    0 1 * * * /usr/bin/mysqldump --defaults-extra-file=/home/example_user/.my.cnf -u root --single-transaction --quick --lock-tables=false --all-databases > full-backup-$(date +\%F).sql

还原备份


恢复命令的一般语法为:

    mysql -u [username] -p [databaseName] < [filename].sql
  • 还原整个DBMS备份。系统将提示您输入MySQL根用户的密码:
    这将覆盖MySQL数据库系统中的所有当前数据。

    mysql -u root -p < full-backup.sql
  • 还原单个数据库转储。一个空的或旧的目标数据库必须已经存在才能将数据导入其中,并且您正在运行命令的MySQL用户必须对该数据库具有写权限:

    mysql -u [username] -p db1 < db1-backup.sql
  • 还原单个表,您必须已准备好要接收数据的目标数据库:

    mysql -u dbadmin -p db1 < db1-table1.sql
mysqlshow快速获取有关MySQL数据库,表,列和索引信息
mysql必须掌握的15个命令