一、找到进程对应的pid
ps -ef | grep mysql
pid=45914
二、将mysql所有脏页flush到磁盘
(1)停止写
flush tables with read lock;
(2) 观察所有脏页是否被刷入磁盘
show engine innodb status\G;
脏页(BUFFER POOL AND MEMORY: -> Modified db pages 0)为0
日志(LOG: ->LSN 的三个位置不在变化)
插入缓存(INSERT BUFFER AND ADAPTIVE HASH INDEX:—> Ibuf: size 1)
文件读写(FILE I/O :-> 0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s)
如果上面几项都为0,则说明全部被刷入磁盘。一般至少等一个10s周期
若长时间不为0,则强制刷脏页
set global innodb_max_dirty_pages_pct = 0;
若长时间不为0,则强制刷脏页
set global innodb_max_dirty_pages_pct = 0;
三、找到进程占用的文件
ll /proc/45914/fd
注: "->"之前代表实际文件名,"->"之后代表被引用的物理文件,(deleted)代表此文件被删除
点击(此处)折叠或打开
- ll /proc/45914/fd
- lr-x------ 1 root root 64 Apr 29 10:56 0 -> /dev/null
- l-wx------ 1 root root 64 Apr 29 10:56 1 -> /mysql/data/log/mysql-error.log (deleted)
- lrwx------ 1 root root 64 Apr 29 10:56 10 -> /mysql/data/ib_logfile1
- lrwx------ 1 root root 64 Apr 29 10:56 100 -> /mysql/data/dbname/tbname1.ibd
- lrwx------ 1 root root 64 Apr 29 10:56 101 -> /mysql/data/dbname/tbname2.ibd
- lrwx------ 1 root root 64 Apr 29 10:56 102 -> /mysql/data/dbname/tbname3.ibd
- lrwx------ 1 root root 64 Apr 29 10:56 103 -> /mysql/data/dbname/tbname4.ibd
- lrwx------ 1 root root 64 Apr 29 10:56 104 -> /mysql/data/dbname/tbname5.ibd
- lrwx------ 1 root root 64 Apr 29 10:56 105 -> /mysql/data/dbname/tbname6.ibd
- lrwx------ 1 root root 64 Apr 29 10:56 106 -> /mysql/data/dbname/tbname7.ibd
- lrwx------ 1 root root 64 Apr 29 10:56 107 -> /mysql/data/dbname/tbname8.ibd
- lrwx------ 1 root root 64 Apr 29 10:56 108 -> /mysql/data/dbname/tbname9.ibd
- lrwx------ 1 root root 64 Apr 29 10:56 109 -> /mysql/data/dbname/tbname10.ibd
- l-wx------ 1 root root 64 Apr 29 10:56 11 -> /mysql/data/log/mysql-slow.log
四、恢复被删除文件
cp /proc/45914/fd/1 /mysql/data/log/mysql-error.log
chown -R mysql.mysql /mysql/data/