聪明屋视角

关注互联网,关注技术开发,透析与分享移动互联网行业最新动态

Linux基础知识:MySQL数据库日志的管理与维护

时间:2019-02-17 13:35:54    阅读:39512次 分类:解决方案
mysql数据库主要有5种类型的日志,分别为慢查询日志(log-slow-queries),二进制日志(log-bin),错误日志(log-error),查询日志(log),更新日志(log-update)。在新的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的变更修改都会被记录到日志文件中:
  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';
  用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除。
  例如:
  PURGE MASTER LOGS TO 'mysql-bin.010';
  PURGE MASTER LOGS BEFORE '2008-06-23 15:00:00';
  清除3天前的 binlog
  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. 清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步


# 按文件:删除mysql-bin.000354之前的日志,不包含mysql-bin.000354
MYSQL>purge binary logs to 'mysql-bin.000354';
Query OK, 0 rows affected (0.16 sec)
# 按时间:删除2011-11-10 00:00:00 之前的日志
MYSQL>purge binary logs before '2011-11-10 00:00:00';
# 按时间:请理三天之前的日志
MYSQL> purge master logs before date_sub(now(), interval 3 day);
自动清理日志 :
# 修改my.cnf文件配置bin-log过期时间
[mysqld]
expire-logs-days=7
max-binlog-size=268435456


芜湖市聪明屋智能科技有限公司(原中江网络),成立于2005年,经过10多年定制开发经验,积累了大量技术储备和定制开发经验,率先创建安徽省内自主研发的云计算平台,具有大数据、高并发等高强度计算能力,为众多政府、学校、公安部门、中小企业解决数据计算与管理难题。2013年公司内部专门创建电商服务部,为企业提供全方位电商解决方案与配套服务。多次获得国家、省市级领导接见,被国内近20家电视台、报纸媒体争相报道。至今,聪明屋智能科技服务过上市公司、大型国企、各类私企超800家,为多家公司提供各类政务系统、app开发定制、微信小程序开发定制、智能家居、电商系统、连锁收银等技术解决方案服务。同时,聪明屋智能科技在智能硬件方面、区块链应用方面持续投入关注及创新。

聪明屋智能科技gf-cloud.cn安徽软件开发,Linux,MySQL,数据库,日志
聪明屋智能科技