`

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-Flush命令用法.docx#资源达人分享计划#

    MySQL Flush 命令用法详解 MySQL Flush 命令是 MySQL 中的一种非常重要的命令,它可以用于清除或重新加载各种高速缓存、表或者获取锁等。执行 Flush 命令必须要有 reload 权限。今天,我们将详细介绍 MySQL Flush ...

    mysql删除日志方法.docx

    - 过期日志的删除会在每次执行 `FLUSH LOGS` 或者 MySQL 服务重启时触发。 #### 方法四:通过配置文件设置 可以在 MySQL 的配置文件 `my.cnf` 或 `my.ini` 中设置 `expire_logs_days` 参数,从而实现自动清理日志...

    MySQL – binlog日志简介及设置

    - `flush logs`:手动切换到新的binlog文件。 - `show master status`:查看当前binlog的状态,包括文件名和位置。 - `reset master`:清空所有binlog日志。 - `mysqlbinlog`:这是一个工具,用于查看binlog的内容,...

    mysql5.7最优配置文件模板.docx

    在主从配置中,文章详细解释了 mysqldump 命令的选项和参数,包括 opt、master-data、single-transaction、flush-logs、extended-insert 等,帮助读者更好地理解 mysqldump 命令的使用方法。 此外,文章还介绍了从...

    mysql binlog日志恢复【亲测有效,有例子实测】

    4. **刷新日志**:使用`Flush logs`命令生成新的binlog文件,模拟数据丢失的情况,如删除某些记录。 5. **查看binlog事件并恢复数据**:通过`show binlog events in 'mysql-bin.000002'`查看binlog文件中的事件,...

    Linux mysql5.7.13安装

    - `mkdir /usr/local/mysql/logs`:创建用于存放日志文件的目录。 - `chown -R mysql:mysql /usr/local/mysql`:将 `/usr/local/mysql` 及其子目录的所有权更改给 `mysql` 用户和组。 ##### 2.5 初始化数据库 - `....

    Debian系统下MySQL主从同步复制

    mysql> flush privileges; ``` - **创建测试数据库**:用于测试同步复制功能。 ```sql mysql> create database testdb; mysql> use testdb; mysql> create table testuser (id int(4), name varchar(20)); mysql> ...

    mysql就地升级

    2. 创建日志文件目录:使用命令 `mkdir -p /var/log/mysql3306/logs` 创建日志文件目录。 三、授权文件 在升级之前,需要授权文件: 1. 授权数据文件目录:使用命令 `chown -R mysql:mysql /data/mysql3306` 授权...

    mysql8.0.11多实例安装

    ### MySQL 8.0.11 多实例安装详解 #### 一、概述 随着业务需求的增长和技术架构的复杂化,数据库系统面临着更多的挑战。为了提高数据库系统的可用性、扩展性和容错能力,多实例部署成为了许多企业的首选方案。本文...

    mysql安装配置教程.pdf

    - 再次应用权限更改: `mysql> flush privileges;` #### 六、配置Binlog 1. **修改MySQL配置文件**: - 在`my.cnf`文件中添加以下内容: ```ini log_bin = /opt/mysql/log/xxx.log binlog_format=ROW expire_...

    Mysql 5.7.22 MHA 0.57

    mkdir /usr/local/mysql/logs && touch /usr/local/mysql/logs/mysqld.log chown -R mysql.mysql /usr/local/mysql && chmod -R 777 /usr/local/mysql chown -R mysql.mysql /data/mysql && chmod -R 777 /data/...

    lampbrother mysql高级教程笔记 超详细

    - 使用 `FLUSH LOGS` 时会创建一个新的 bin-log 文件。 - `SHOW MASTER STATUS` 可以显示当前 bin-log 文件的信息。 - `RESET MASTER` 会清除所有的 bin-log 文件。 - 使用 `mysqlbinlog` 工具时,可以通过 `--start...

    使用binlog日志恢复MySQL数据库删除数据的方法

    3. `flush logs;`:创建新的binlog日志文件,旧的文件会被保留。 4. `reset master;`:清除所有binlog日志,通常在重置数据库状态时使用。 要读取binlog日志内容,可以使用`mysqlbinlog`工具。在命令行中输入`...

    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开启binlog.docx

    `flush logs`命令将创建新的binlog文件,这通常在MySQL服务重启或使用`mysqldump`备份数据时自动执行。`reset master`命令用于清除所有binlog日志,但请注意,这将丢失所有binlog信息,可能会导致无法进行历史数据...

    mysql增量备份LIUNX脚本

    /usr/local/mysql/bin/mysqladmin -uroot -p123456 flush-logs # 用于产生新的mysql-bin.00000*文件 Counter=`wc -l $BinFile | awk '{print $1}'` NextNum=0 for file in `cat $BinFile` do base=`basename ...

Global site tag (gtag.js) - Google Analytics