复制 /var/lib/mysql 目录是 mysqldump 的一个很好的替代方案吗?

Posted

技术标签:

【中文标题】复制 /var/lib/mysql 目录是 mysqldump 的一个很好的替代方案吗?【英文标题】:Is copying the /var/lib/mysql directory a good alternative to mysqldump? 【发布时间】:2011-01-29 18:18:32 【问题描述】:

由于我正在对整个 debian 系统进行完整备份,因此我在考虑是否拥有 /var/lib/mysql 目录的副本是使用 mysqldump 转储表的可行替代方案。

该目录中是否包含所有需要的信息? 可以在另一个mysql中导入单个表吗? 在(可能略有)不同的 mysql 服务器版本上恢复这些文件时会出现问题吗?

【问题讨论】:

这样做多年,没有矛盾! Percona 有一个工具,它基本上采用这种方法对正在运行的服务器进行“热备份”:percona.com/doc/percona-xtrabackup/2.1 【参考方案1】:

我会坚决反对。

根据我的经验,备份/恢复原始 mysql 数据文件只能在相同的操作系统/服务器版本上使用。它不适用于具有相同服务器版本的跨平台(例如 ubuntu/macos),也不适用于同一平台上的 mysql 服务器版本不同。

来自 Percona MySQL 发行版的Percona XtraBackup (innobackupex) 将让您进行实时和差异 mysql 备份,并为您提供可以通过复制到 /var/lib/mysql/ 来恢复的备份文件。您需要运行 Percona Server for MySQL 才能使用所有这些。

【讨论】:

【参考方案2】:

有关这 2 种策略的完整讨论,您需要阅读以下内容:https://dev.mysql.com/doc/refman/5.5/en/backup-types.html

目前最好的免费和开源解决方案似乎是 Percona 的:http://www.percona.com/software/percona-xtrabackup

【讨论】:

【参考方案3】:

这种方法只有在您先关闭数据库的情况下才能安全工作。否则,您之后很可能会陷入不一致的状态。首先使用 /etc/init.d/mysql 停止命令。然后,您可以在备份完成后重新启动它。

【讨论】:

【参考方案4】: 是的 如果表使用 MyISAM(默认)引擎,则是。如果它使用 InnoDB,则不会。 可能没有,如果有,你只需要执行 mysql_upgrade 来修复它们

为避免数据库处于不一致状态,您可以关闭 MySQL 或在备份前使用 LOCK TABLES 然后 FLUSH TABLES。第二种解决方案要好一些,因为 MySQL 服务器在备份期间将保持可用(尽管是只读的)。

【讨论】:

感谢大家提供此解决方案。它至少减少了一个小时的重新导入时间!如果你想在一条指令中完成:输入“FLUSH TABLES WITH READ LOCK;”。 您能否详细了解“可以将单个表导入另一个mysql”的答案吗? “是的,只要它是 MyISAM”是一个相当稀疏的答案。【参考方案5】:

只要你先关闭MySQL服务器并使用完全相同的版本来检索“备份”就可以了。否则不是。

【讨论】:

以上是关于复制 /var/lib/mysql 目录是 mysqldump 的一个很好的替代方案吗?的主要内容,如果未能解决你的问题,请参考以下文章

mysql连接:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mys

连接数据库报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mys

mysql

Mysql库迁移到别的分区

更改mysql 和jinkins目录

Docker 搭建MySQL5.7 主从复制