如何在UbuntuVPS上备份MySQL数据库

来自菜鸟教程
跳转至:导航、​搜索


状态: 已弃用

本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:

原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.

请参阅:
本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。


什么是 MySQL?

MySQL 是一种流行的数据库管理解决方案,它使用 SQL 查询语言来访问和操作数据。 它可以很容易地用于管理来自网站或应用程序的数据。

备份对于任何类型的数据都很重要,这在谈论数据库时尤其重要。 MySQL 可以通过我们将在本文中讨论的几种不同方式进行备份。

对于本教程,我们将使用安装了 MySQL 5.5 的 Ubuntu 12.04 VPS。 大多数现代发行版和最新版本的 MySQL 应该以类似的方式运行。

如何使用 mysqldump 备份 MySQL 数据库

使用 MySQL 备份的最常见方法之一是使用名为“mysqldump”的命令。

备份

这里有一篇关于如何使用mysqldump导出数据库的文章。 该命令的基本语法是:

mysqldump -u username -p database_to_backup > backup_name.sql

恢复

要恢复使用 mysqldump 创建的数据库转储,您只需将文件再次重定向到 MySQL。

我们需要创建一个空白数据库来存放导入的数据。 首先,输入以下命令登录 MySQL:

mysql -u username -p

创建一个新数据库,它将保存数据转储中的所有数据,然后退出 MySQL 提示:

CREATE DATABASE database_name;
exit

接下来,我们可以通过发出以下命令将转储文件重定向到我们新创建的数据库中:

mysql -u username -p database_name < backup_name.sql

您的信息现在应该恢复到您创建的数据库中。

如何将 MySQL 表备份到文本文件

您可以使用 MySQL 中的 select 语句将表中的数据直接保存到文本文件中。

此操作的一般语法是:

SELECT * INTO OUTFILE 'table_backup_file' FROM name_of_table;

此操作会将表数据保存到 MySQL 服务器上的文件中。 如果已经有一个具有所选名称的文件,它将失败。

注意:此选项仅保存表格数据。 如果你的表结构比较复杂,必须要保留,最好换一种方法!

如何使用 automysqlbackup 备份 MySQL 信息

Ubuntu 存储库中有一个名为“automysqlbackup”的实用程序。

可以安排此实用程序定期自动执行备份。

要安装此程序,请在终端中键入以下内容:

sudo apt-get install automysqlbackup

通过键入以下命令运行命令:

sudo automysqlbackup

automysqlbackup 的主要配置文件位于“/etc/default/automysqlbackup”。 使用管理权限打开它:

sudo nano /etc/default/automysqlbackup

您可以看到,该文件默认情况下通过位于“/etc/mysql/debian.cnf”的 MySQL 文件分配了许多变量。 这包含维护登录信息

从该文件中,它读取必须备份的用户、密码和数据库。

备份的默认位置是“/var/lib/automysqlbackup”。 搜索此目录以查看备份的结构:

ls /var/lib/automysqlbackup
daily  monthly weekly

如果我们查看 daily 目录,我们可以看到每个数据库的一个子目录,其中包含一个 gzip 压缩的 sql 转储,该转储来自命令运行时:

ls -R /var/lib/automysqlbackup/daily
.:
database_name  information_schema  performance_schema

./database_name:
database_name_2013-08-27_23h30m.Tuesday.sql.gz

./information_schema:
information_schema_2013-08-27_23h30m.Tuesday.sql.gz

./performance_schema:
performance_schema_2013-08-27_23h30m.Tuesday.sql.gz

Ubuntu 用这个程序安装了一个 cron 脚本,每天都会运行它。 它将文件组织到适当的目录。

使用复制时如何备份

通过上述技术,可以使用 MySQL 复制来备份数据。

复制是 将数据从一台服务器镜像到另一台服务器(主从)将对任一服务器所做的更改镜像到另一台服务器(主-主) 的过程。

虽然复制允许数据镜像,但当您尝试保存特定时间点时它会受到影响。 这是因为它不断地复制动态系统的变化。

为了避免这个问题,我们可以:

  • 暂时禁用复制
  • 将备份机器暂时设为只读

暂时禁用复制

您可以通过发出以下命令暂时禁用从属设备的复制:

mysqladmin -u user_name -p stop-slave

另一个选项,它不会完全停止复制,而是将其暂停,可以这么说,可以通过键入来完成:

mysql -u user_name -p -e 'STOP SLAVE SQL_THREAD;'

复制停止后,您可以使用上述方法之一进行备份。 这允许您在备份从属服务器时保持主 MySQL 数据库在线。

完成后,键入以下内容重新启动复制:

mysqladmin -u user_name -p start-slave

使备份计算机临时只读

您还可以通过将数据临时设为只读来确保服务器内的数据集一致。

您可以在主系统或从系统上执行这些步骤。

首先,以足够的权限登录 MySQL 来操作数据:

mysql -u root -p 

接下来,我们可以将所有缓存的更改写入磁盘,并通过键入以下命令将系统设置为只读:

FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = ON;

现在,使用 mysqldump 执行备份。

备份完成后,通过键入以下命令将系统恢复到其原始工作状态:

SET GLOBAL read_only = OFF;
UNLOCK TABLES;

关于不再推荐的技术的说明

mysqlhotcopy

MySQL 包含一个用于快速备份数据库的 perl 脚本,称为“mysqlhotcopy”。 该工具可用于在本地机器上快速备份数据库,但它有一些限制,我们避免推荐它。

我们不会在这里介绍 mysqlhotcopy 的用法的最重要原因是因为它只适用于使用“MyISAM”和“Archive”存储引擎存储的数据。

大多数用户不会更改其数据库的存储引擎,从 MySQL 5.5 开始,默认存储引擎是“InnoDB”。 无法使用 mysqlhotcopy 备份此类数据库。

此脚本的另一个限制是它只能在保留数据库存储的同一台机器上运行。 这可以防止从远程计算机运行备份,这在某些情况下可能是一个主要限制。

复制表格文件

有时建议的另一种方法是简单地复制 MySQL 存储其数据的表文件。

这种方法遭受与“mysqlhotcopy”相同的原因之一。

虽然将此技术与将数据存储在文件中的存储引擎一起使用是合理的,但新的默认存储引擎 InnoDB 不能以这种方式备份。

结论

在 MySQL 中执行备份有许多不同的方法。 所有这些都有其优点和缺点,但有些比其他更容易实施并且更广泛有用。

您选择部署的备份方案在很大程度上取决于您的个人需求和资源,以及您的生产环境。 无论您决定采用何种方法,请务必验证您的备份并练习恢复数据,以便您可以确保该过程正常运行。

贾斯汀·艾林伍德