MySQL数据库——数据库维护

数据库日志的管理与维护

MySQL数据库主要有5种类型的日志,分别为慢查询日志(log-slow-queries),二进制日志(log-bin),错误日志(log-error),查询日志(log),更新日志(log-update)。在新的MySQL版本中,已取消了更新日志,可以用二进制日志来替代这个功能。文章侧重讲解慢查询日志和二进制日志。慢查询日志(log-slow-queries)

MySQL慢查询,指的是查询消耗时间较多,或者没有使用索引的查询,MySQL可以同时记录这两种情况:

# 慢日志保存路径  
log-slow-queries = slow.log   
# 超过2秒的查询  
long_query_time = 2  
# 没有使用索引的查询  
log-queries-not-using-indexes

二进制日志(log-bin)
在MySQL中,如果启用二进制日志记录,则MySQL的变更修改都会被记录到日志文件中:

[plain] view plain copy
mysql> show variables like 'log_bin';    
+---------------+-------+  
| Variable_name | Value |  
+---------------+-------+  
| log_bin       | ON    |  
+---------------+-------+  
1 row in set  

如果想关闭bin日志的记录,可以修改配置文件my.ini,把里面的log-bin这一行注释掉,重启mysql服务。
查看的数据库的bin日志:

mysql> show binary logs;  
+------------------+-----------+  
| Log_name         | File_size |  
+------------------+-----------+  
| mysql-bin.000001 |    946525 |  
+------------------+-----------+  
1 row in set  

如果没有主从复制,可以通过以下方式,重置数据库日志,清除之前的日志文件:

mysql> reset master;  
Query OK, 0 rows affected

但是如果存在复制关系,应当通过PURGE的方式来清理bin日志:
语法如下:

PURGE MASTER LOGS TO 'log_name';  
PURGE MASTER LOGS BEFORE 'date';  

用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除。
例如:

[sql] view plain copy
PURGE MASTER LOGS TO 'mysql-bin.010';  
PURGE MASTER LOGS BEFORE '2008-06-23 15:00:00';  

清除3天前的 binlog

[sql] view plain copy
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);  

BEFORE变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。
如果有主从复制,则注意以下几个问题:
1、从服务器是活动的,并且刚好在读取你正在试图删除的日志之一,那么执行这个命令不会起作用,而是触发一个错误。
2、从服务器是停止的,你碰巧清理了其想要读取的日志之一,则从服务器启动后不能复制。
3、从服务器是活动的,没有读取你试图删除的日志,那个这个命令是安全的,而且执行这个命令时从服务器不需要停止工作。

要清理日志,需按照以下步骤:

  1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
  2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
  3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
  4. 备份你将要删除的所有日志。(这个步骤是自选的,但是建议采用。)
  5. 清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步

建立一个数据库表维护规范

在一个定期基础而非等到问题出现才实施数据库表的检查是一个好主意。应该考虑到建立一个预防性维护的时间表,以协助自动问题,是你可以采取措施进行修正:执行常规的数据库备份并允许更新日志。安排定期的常规表检查。通过检查表,将减少使用备份的机会。这个工作,在Windows下使用计划任务,Unix使用cron作业(一般从运行服务器所示用的该帐号的crontab文件中调用),并且很容易实现。例如,你作为mysql用户运行服务器,则可以从mysql的crontab文件中建立定期检查。如果你不知道如何使用cron,应使用下列命令查看相关的Unix手册页:作为服务器启动前的系统引导期间检查数据库表。及其可能会因早期的崩溃而重新启动。如果这样的花,数据库表可能已被毁坏,应该对它进行彻底检查。

创建一个适用于定期维护的脚本

为了运行自动的表检查,可以编写一个脚本,将目录改变为服务器数据目录并对所有的数据库表进行myisamchk和isamchk。如果你只有MyISAM表或者只有ISAM表,则只需要其中一个程序,可以将无关的那个程序从脚本中注释掉。该教本可以被cron调用,或者在系统启动期间被调用。为维护目的,你能使用myisamchk -s检查桌子。-s,–silent选项使myisamchk和isamchk以沉默模式运行,只有当错误出现时,才仅仅打印消息。另外myisamchk支持–fast选项,该选项允许程序跳过自上次检查以来没有被修改过的人和表。


超全面的测试IT技术课程,0元立即加入学习!有需要的朋友戳:


腾讯课堂测试技术学习地址

欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章