首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不正确的bin-log清除会导致删除mysql数据库吗?

不正确的bin-log清除会导致删除mysql数据库吗?
EN

Database Administration用户
提问于 2011-11-02 01:56:49
回答 2查看 1.6K关注 0票数 2

在我们的客户端位置中,我们有主人掌握多个从环境。在一个从Db主机中,我们遇到了bin-log的磁盘空间问题。首先,当mysql服务器使用rm -f binlog.0015、binlog.0016.binlog.0026运行时,我手动删除了bin-log文件。但后来,我发现这个程序是错误的,通过发出逗号:

代码语言:javascript
复制
mysql> SHOW BINARY LOGS;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| 0             |           |
| 0             |           |
| 0             |           |
| binlog.000027 |    724935 |
| binlog.000028 |    733481 |
+---------------+-----------+

使用rm -rf删除的bin日志在从服务器中没有被清除。稍后,我发出命令:将二进制日志清除为“mysql-bin.0026”;并且可以看到bin日志被正确清除。

代码语言:javascript
复制
mysql> SHOW BINARY LOGS;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000027 |    724935 |
| binlog.000028 |    733481 |
+---------------+-----------+

但这并不影响从复制和复制是好的。但是过了一段时间,我可以注意到mysql数据库的缺失。什么可能是根本原因。mysql是否因为错误地处理回收站日志而放弃。

代码语言:javascript
复制
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| client_prod        |
+--------------------+
2 rows in set (0.01 sec)

====

因为另一个奴隶很好。

代码语言:javascript
复制
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| client_prod        |
+--------------------+
3 rows in set (0.00 sec)

我们没有看到任何显示文件夹正在被删除或数据库在日志或历史记录中被删除的迹象。背后的谜团是什么。除了获取转储和恢复之外,如何恢复,我们能否只将mysql转储并在这个奴隶中恢复它呢?如果这样做,会导致任何复制问题。

EN

回答 2

Database Administration用户

发布于 2011-11-02 21:00:19

如果您的从站也不充当另一个从站的主站,那么您在删除二进制日志时就不会有任何问题。中继日志对奴隶很重要。

您需要进一步研究mysql模式消失的原因。mysql模式是否仍然存在于磁盘上,即使MySQL没有显示它?如果尚未停止从实例,则可以在MySQL运行的同一用户下运行:

代码语言:javascript
复制
lsof | grep '/path_to_mysql'

您可能会在那里看到标记为已删除的mysql模式表:

代码语言:javascript
复制
(deleted)

另一种可能是,您连接的用户权限有限,只是看不到mysql模式。运行SHOW GRANTS;以查看您当前拥有的特权。

正如Rolando所指出的,使用清除二进制日志作为清理二进制日志的最佳实践。如果MySQL关闭,您可以手动删除文件,但也必须从索引文件中删除相同的文件名。在主服务器上要小心,因为奴隶可能仍然需要二进制日志。

如果确实需要复制mysql模式,则只需在从服务器上执行以下步骤即可。不过,在执行这些步骤之前,我建议在主服务器上执行FLUSH TABLES;

代码语言:javascript
复制
/etc/init.d/mysql stop
scp -rp master_server:/var/lib/mysql/mysql /var/lib/mysql/
/etc/init.d/mysql start
票数 3
EN

Database Administration用户

发布于 2011-11-02 02:18:06

由于mysql模式中没有一个表是InnoDB,所以只需在从服务器上执行以下操作,而不是执行mysqldump

  • 步骤01) service mysql stop
  • 第二步) mkdir /var/lib/mysql/mysql
  • (步骤03) scp master-ip:/var/lib/mysql/mysql/* /var/lib/mysql/mysql/.
  • 第04步) chown -R mysql:mysql /var/lib/mysql/mysql
  • 步骤05) service mysql start

这不应影响复制,因为当您运行“更改主命令”时,复制用户的身份验证发生在主服务器上,而不是从服务器上。实际上,复制用户的凭据存储在从服务器上的master.info中。

顺便说一句,在mysqld运行时,不要使用rm -f删除二进制日志,因为mysql有一个从索引文件加载的内部内存映射。仅使用清除二进制日志、重置主日志和刷新日志来提升二进制日志的索引文件。

我突然明白了。你的问题是:

使用rm -rf删除的bin日志在从服务器中没有被清除。稍后,我发出命令:将二进制日志清除为“mysql-bin.0026”;并且可以看到bin日志被正确清除。

您可能运行了rm -rf mysql。这将扼杀mysql文件夹。检查您的Linux历史记录。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/7490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档