如何在删除ibdata1 删除和ib

lovejuan007 的BLOG
用户名:lovejuan007
文章数:731
评论数:121
访问量:706733
注册日期:
阅读量:5863
阅读量:12276
阅读量:348855
阅读量:1048101
51CTO推荐博文
错误方法一:导入数据库后,只是数据库test增大了而已,ibdata1还是默认的11M
1、只删除ibdata1或则ib_logfile0和ib_logfile1&
2、重启Mysql服务器 service mysqld restart
3、创建数据库test,导入备份的数据&
以上的的结果虽然数据没有丢失,但不应用这样的做法
正确方法:ibdata1、ib_logfile同时删除,ibdata才能正常储存数据,重启mysql服务
错误方法二:不对数据库备份,直接就为了瘦身ibdata1而删除ibdata1就会导致整个数据丢失
正确方法:停止mysql服务,再备份数据库,再删除ibdata1和ib_logfile,重启mysql服务,再导入备份
&&&&&&&&&&&&&&&&&&&&&&&
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!root@localhost:/var/lib/mysql# ls -la /proc/14101/fd/ | grep -e ibdata -e ib_
lrwx------ 1 root& root& 64 Aug& 7 23:29 3 -& /var/lib/mysql/ibdata1 (deleted)
lrwx------ 1 root& root& 64 Aug& 7 23:29 8 -& /var/lib/mysql/ib_logfile0 (deleted)
lrwx------ 1 root& root& 64 Aug& 7 23:29 9 -& /var/lib/mysql/ib_logfile1 (deleted)
14101是mysqld的pid(进程ID)
只要mysqld不结束,就可以通过proc文件系统找到这几个被删除的文件(已经被Mark为deleted状态)。
这时候应该松了一口气吧。只要把这几个文件复制回 /var/lib/mysql就行了吗?
事情没有这么简单。
因为,在innodb的buffer pool中,有许多dirty page(就是内存中的数据已经被修改,但是没有写回文件中),
如果直接把文件复制回去,轻则数据丢失,重则ibdata1文件损坏。
备份mysql数据的时候,也不能直接备份这几个文件,是同样的道理。
我们必须保证所有buffer pool中的数据修改都保存到了硬盘文件上面,
为此,首先要停止更多的写入/更新/删除操作,然后等待innodb flush pages to disk.
停止写入的话,可以把网站应用关闭,或lock tables:
复制代码 代码示例:
mysql& FLUSH TABLES WITH READ LOCK;
Query OK, 0 ROWS affected (0.37 sec)
这时就要等它flush结束,怎样知道有没有结束呢?观察checkpoint age就可以了。
复制代码 代码示例:
mysql& SHOW engine innodb STATUS&&
Log SEQUENCE NUMBER
Log flushed up TO
LAST checkpoint at
checkpoint age 就是 Log sequence number的值减去 Last checkpoint at的值,
如果为0,那么表示所有的page都flush到硬盘文件中了。
这时就要等它flush结束,怎样知道有没有结束呢?观察checkpoint age就可以了。
复制代码 代码示例:
mysql& SHOW engine innodb STATUS&&
Log SEQUENCE NUMBER
Log flushed up TO
LAST checkpoint at
checkpoint age 就是 Log sequence number的值减去 Last checkpoint at的值,
如果为0,那么表示所有的page都flush到硬盘文件中了。
加速flush的过程,可以这样设置:
复制代码 代码示例:
mysql& SET global innodb_max_dirty_pages_pct=0;
Query OK, 0 ROWS affected (0.01 sec)
此外,还必须保证一些后台的线程完成了它们的工作,
比如insert buffer thread. ibuf的大小应该=1
复制代码 代码示例:
INSERT BUFFER AND ADAPTIVE HASH INDEX
Ibuf: SIZE 1, free list len 398, seg SIZE 400,
还有purge thread,它应该purge了全部的transactions:
复制代码 代码示例:
------------
TRANSACTIONS
------------
Trx id counter 0 16644
Purge done FOR trx's n:o & 0 16644 undo n:o & 0 0
确保innodb不再进行写操作:
复制代码 代码示例:
I/O thread 0 state: waiting FOR i/o request (INSERT buffer thread)
I/O thread 1 state: waiting FOR i/o request (log thread)
I/O thread 2 state: waiting FOR i/o request (READ thread)
&I/O thread 3 state: waiting FOR i/o request (WRITE thread)
Pending normal aio reads: 0, aio writes: 0,
ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
Pending flushes (fsync) log: 0; buffer pool: 0
332 OS file reads, 47 OS file writes, 32 OS fsyncs
0.00 reads/s, 0 avg bytes/READ, 0.00 writes/s, 0.00 fsyncs/s
然后,把文件复制回去:
复制代码 代码示例:
root@localhost:/var/lib/mysql# cp /proc/14101/fd/3 /var/lib/mysql/ibdata1
root@localhost:/var/lib/mysql# cp /proc/14101/fd/8 /var/lib/mysql/ib_logfile0
root@localhost:/var/lib/mysql# cp /proc/14101/fd/9 /var/lib/mysql/ib_logfile1
修改权限:
复制代码 代码示例:
root@localhost:/var/lib/mysql# chown -R mysql ib*
重启mysqld
root@localhost:/var/lib/mysql# /etc/init.d/mysql restart
1,在解决方案不明确时,不要进行操作,比如重启mysqld,重启服务器。
2,有必要监控mysql的ibdata等文件是否存在。您可能感兴趣的文章:mysql ibdata1文件被污染or损坏,ib_logfile1,iblogfile2删除。怎么恢复数据库
[问题点数:100分]
mysql ibdata1文件被污染or损坏,ib_logfile1,iblogfile2删除。怎么恢复数据库
[问题点数:100分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2016年1月 其他数据库开发大版内专家分月排行榜第二2014年12月 其他数据库开发大版内专家分月排行榜第二2014年11月 其他数据库开发大版内专家分月排行榜第二2014年5月 其他数据库开发大版内专家分月排行榜第二
2014年3月 其他数据库开发大版内专家分月排行榜第三
2014年1月 总版技术专家分月排行榜第二2013年12月 总版技术专家分月排行榜第二
2014年4月 荣获微软MVP称号
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 ibdata1可以删除吗 的文章

 

随机推荐