`

mysql flush logs

阅读更多

        最近遇到一台mysql机器,空间不足,查看后发现是slow log文件占了大量空间(ext4),果断rm掉,然后再flush logs。flush logs的时候发现mysql会hang住。翻了一下flush logs的逻辑,执行flush logs的时候,mysql会执行reopen_file操作,reopen_file()先closeslow log file,再open,而这个过程是持有LOCK_log锁。目前mysql server层日志(slow/general/binary log)的写操作是都需要持有这个锁的。

       这样,问题就来了。前面执行rm操作的时候,mysqld还在写对应的slow log,因此系统不会真正的删除这个文件,而执行flush logs操作的时候,mysql会去调用close()操作。close的manual是这么写的:

NAME
       close - close a file descriptor

DESCRIPTION
       close()  closes  a file descriptor, so that it no longer refers to any file and
       may be reused.  Any record locks (see fcntl(2)) held on the file it was associ-
       ated  with,  and  owned  by  the  process,  are removed (regardless of the file
       descriptor that was used to obtain the lock).

       If fd is the last copy of a particular file descriptor the resources associated
       with it are freed; if the descriptor was the last reference to a file which has
       been removed using unlink(2) the file is deleted.

         linux删除文件的机制再加上mysql的LOCK_log这把大锁就会引起mysql hang住。类似的general log也会有这个问题。正确的做法是,将slow/general log mv成另外一个名字,再执行flush log操作,然后再去rm对应的文件。

 

 

 

 

 

链接:

http://www.mysqlperformanceblog.com/2007/12/09/be-careful-rotating-mysql-logs/

http://digital-forensics.sans.org/blog/2010/12/20/digital-forensics-understanding-ext4-part-1-extents

http://digital-forensics.sans.org/blog/2011/03/28/digital-forensics-understanding-ext4-part-3-extent-trees

http://digital-forensics.sans.org/blog/2011/04/08/understanding-ext4-part-4-demolition-derby

分享到:
评论

相关推荐

    mysql参数及其优化

    query_cache_size、query_cache_type、innodb_buffer_pool_size、innodb_log_file_size、innodb_log_buffer_size、innodb_flush_logs_at_trx_commit、transaction_isolation、innodb_file_per_table、innodb_open_...

    MySQL中⽇志的⾯试题总结

    mv hostname.err hostname.err.old mysqladmin flush-logs ② 查询⽇志:查询⽇志在 MySQL 中被称为 general log(通⽤⽇志),查询⽇志⾥的内容不要被“查询⽇志”误导,认为⾥⾯只存储 select 语句,其实不然,查询...

    mysql数据库my.cnf配置文件

    # 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。 # 主线程中每秒会将重做日志缓冲写入磁盘的...

    MySQL中的binlog相关命令和恢复技巧

    reset master 删除所有的二进制日志flush logs 产生一个新的binlog日志文件 show master logs; 或者 show binary logs; 查看二进制文件列表和文件大小 代码如下:./mysqlbinlog –start-datetime=”2012-05-21 15:30...

    MySQL日志设置及查看方法

    MySQL有以下几种日志: ...当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时,出现日志刷新 1. 错误日志 用–log- error[=file_name]选项来指定mysqld保存错误日志文件的位置。

    mysql自动增量备份的实例方法(本地备份与远程备份)

    1、本地备份编写自动备份脚本:vim /var/lib/mysql/autobak内容如下: 代码如下:cd /data/home/mysqlbakrq=` date +%Y%m%d `/usr/local/mysql/bin/mysqldump sqldb –flush-logs -uroot -p123456 –opt > 777city_$...

    使用bin-log日志还原数据库的例子

    1、查看是否启用了日志:show variables like ‘log_bin’; 2、查看当前日志文件名:show master status;... 代码如下:方法一:[root@bogon mysql]# mysqladmin -uroot -p flush-logs方法二:mysql

    mysql主从库不同步问题解决方法

    遇到这样的错误如:“Last_IO_Error: Got fatal error 1236 from master when ... 再去master中执行:”flush logs;”来清空日志; 然后在master中执行:”show master status;”查看下主库的状态,主要是日志的文件和po

    貌似很强的mysql备份策略分享

    代码如下:mysqldump database –flush-logs -uroot -p –opt > database_20020601.sql 按照日期规则执行。 如果想恢复到今早10点的数据库,那么:1、完整备份整个当前数据库 代码如下:cd /var/lib/mysqlmysqldump -...

    MySQL手动注册binlog文件造成主从异常的原因

    flush binary logs 然后整个主从环境大量延迟。 二、朋友的测试 下面是另外一个朋友@徐晨亮的测试: master上: (root:db1@xucl:10:30:22)[(none)]> show binary logs; +---------------------+-----------+ | Log...

    azkaban-3.38安装包(已编译)

    FLUSH PRIVILEGES; (3)导入数据 use azkaban; source /opt/azkaban-3.38.0/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql 2. ssl配置 cd /opt/azkaban-3.38.0\azkaban-web-server keytool -keystore keystore -...

    如何用mysqldump进行全量和时间点备份

    mysqldump在mysql中用于逻辑备份,虽然速度不快,但非常...mysqldump --host= --user= --password= --single-transaction --master-data=1 --flush-logs --databases >~/db.log —single-transaction 参数能够报纸一

    短链接:短链接服务

    ~$ docker-compose exec web python manage.py flush --no-input@dev:~$ docker-compose exec web python manage.py migrate检查日志中的错误@dev:~$ docker-compose logs -f停止容器并使用-v标志绑定卷@dev:~$ ...

    数据库灾难性恢复(数据库技术;灾难性;恢复;数据备份)

    当想要进行增量备份时(包含上一次完全备份或增量备份之后的所有更改),应使用FLUSH LOGS回滚二进制日志。然后,你需要将从最后的完全或增量备份的某个时刻到最后某个点的所有二进制日志复制到备份位置。这些二进制...

    php.ini-development

    ;;;;;;;;... 1.... 2.... 3.... 4.... 5.... 6.... The syntax of the file is extremely simple.... Section headers (e.g.... at runtime.... There is no name validation.... (e.g.... previously set variable or directive (e.g....

Global site tag (gtag.js) - Google Analytics