mysql data ibdata1_database - 如何在MySQL中收缩/清除ibdata1文件
database - 如何在MySQL中收缩/清除ibdata1文件
我在localhost中使用MySQL作为在R中执行统计的“查询工具”,也就是说,每次运行R脚本时,我创建一个新数据库(A),创建一个新表(B),将数据导入B ,提交查询以获得我需要的内容,然后我删除B并删除A.
它对我来说很好,但我意识到ibdata文件大小正在迅速增加,我在MySQL中没有存储任何内容,但ibdata1文件已超过100 MB。
我使用或多或少的默认MySQL设置进行设置,有没有办法可以在一段固定的时间后自动缩小/清除ibdata1文件?
8个解决方案
735 votes
information_schema没有缩小是一个特别恼人的MySQL功能。 除非删除所有数据库,删除文件并重新加载转储,否则实际上无法收缩informations_schema文件。
但您可以配置MySQL,以便将每个表(包括其索引)存储为单独的文件。 这样,information_schema就不会那么大。 根据Bill Karwin的评论,默认情况下启用MySQL版本5.6.6。
不久前我做到了这一点。 但是,要将服务器设置为为每个表使用单独的文件,您需要更改information_schema以启用此功能:
[mysqld]
innodb_file_per_table=1
[http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html]
如果您想从information_schema回收空间,您实际上必须删除该文件:
除information_schema和informations_schema数据库外,执行所有数据库,过程,触发器等的information_schema
删除除上述2个数据库之外的所有数据库
停止mysql
删除information_schema和informations_schema文件
启动mysql
从转储恢复
在步骤5中启动MySQL时,将重新创建information_schema和informations_schema文件。
现在你适合去。 当您创建新数据库进行分析时,这些表将位于单独的information_schema文件中,而不是informations_schema中。由于您通常不久后删除数据库,因此将删除ibd*文件。
[http://dev.mysql.com/doc/refman/5.1/en/drop-database.html]
你可能已经看到了这个:
[http://bugs.mysql.com/bug.php?id=1341]
通过使用命令information_schema或informations_schema,可以从ibdata1中提取数据和索引页面以分离文件。 但是,除非您执行上述步骤,否则ibdata1不会缩小。
关于information_schema,这是不必要的也不可能丢弃。 它实际上只是一堆只读视图,而不是表。 并且没有与它们相关联的文件,甚至也不是数据库目录。 informations_schema正在使用内存db-engine,并在mysqld停止/重启时被删除并重新生成。 见[https://dev.mysql.com/doc/refman/5.7/en/information-schema.html。]
John P answered 2019-01-21T02:36:23Z
34 votes
加入John P的答案,
对于Linux系统,可以使用以下命令完成步骤1-6:
mysql -u [username]-p[root_password] [database_name] < dumpfilename.sql
mysql -u [username]-p[root_password] [database_name] < dumpfilename.sql
mysql -u [username]-p[root_password] [database_name] < dumpfilename.sql
mysql -u [username]-p[root_password] [database_name] < dumpfilename.sql
sudo rm /var/lib/mysql/ib_logfile
(and delete any other ib_logfile's that may be named ib_logfile0, ib_logfile1 etc...)
mysql -u [username]-p[root_password] [database_name] < dumpfilename.sql
mysql -u [username]-p[root_password] [database_name] < dumpfilename.sql
mysql -u [username]-p[root_password] [database_name] < dumpfilename.sql
警告:如果此mysql实例上有其他数据库,这些说明将导致您丢失其他数据库。 确保修改步骤1,2和6,7以涵盖您希望保留的所有数据库。
Vinay Vemula answered 2019-01-21T02:38:14Z
33 votes
删除innodb表时,MySQL不会释放ibdata文件中的空间,这就是它不断增长的原因。 这些文件几乎不会缩小。
如何缩小现有的ibdata文件:
[http://dev.mysql.com/doc/refman/5.5/en/innodb-resize-system-tablespace.html]
您可以编写脚本并安排脚本在一段固定的时间后运行,但对于上述设置,似乎多个表空间是一个更简单的解决方案。
如果使用配置选项innodb_file_per_table,则会创建多个表空间。 也就是说,MySQL为每个表而不是一个共享文件创建单独的文件。 这些单独的文件存储在数据库的目录中,删除此数据库时将删除它们。 这应该消除了在您的情况下缩小/清除ibdata文件的需要。
有关多个表空间的更多信息:
[http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html]
titanoboa answered 2019-01-21T02:39:15Z
14 votes
如果你为你的(某些)MySQL表使用InnoDB存储引擎,你可能已经遇到了其默认配置的问题。 您可能已经注意到MySQL的数据目录(在Debian / Ubuntu中 - / var / lib / mysql)中有一个名为“ibdata1”的文件。 它几乎包含了MySQL实例的所有InnoDB数据(它不是事务日志),并且可能会变得非常大。 默认情况下,此文件的初始大小为10Mb,并自动扩展。 不幸的是,通过设计InnoDB数据文件无法收缩。 这就是为什么DELETE,TRUNCATE,DROP等不会回收文件使用的空间。
我想你可以找到很好的解释和解决方案:
[http://vdachev.net/2007/02/22/mysql-reducing-ibdata1/]
Vik answered 2019-01-21T02:39:50Z
6 votes
如果您的目标是监视MySQL可用空间并且无法阻止MySQL缩小您的ibdata文件,那么请通过表状态命令获取它。 例:
MySQL&gt;5.1.24:
mysqlshow --status myInnodbDatabase myTable | awk '{print $20}'
MySQL&lt;5.1.24:
mysqlshow --status myInnodbDatabase myTable | awk '{print $35}'
然后将此值与您的ibdata文件进行比较:
du -b ibdata1
资料来源:[http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html]
Cyno answered 2019-01-21T02:40:37Z
4 votes
在新版本的mysql-server食谱上面会粉碎“mysql”数据库。在旧版本中它可以工作。 在新的一些表中切换到表类型INNODB,这样做会损坏它们。最简单的方法是转储所有数据库,卸载mysql-server,加入仍然是my.cnf:
[mysqld]
innodb_file_per_table=1
erase all in /var/lib/mysql
install mysql-server
restore users and databases
adjustable_wrench answered 2019-01-21T02:40:59Z
4 votes
在bash中快速编写接受的答案程序:
#!/usr/bin/env bash
DATABASES="$(mysql -e 'show databases \G' | grep "^Database" | grep -v '^Database: mysql$\|^Database: binlog$\|^Database: performance_schema\|^Database: information_schema' | sed 's/^Database: //g')"
mysqldump --databases $DATABASES -r alldatabases.sql && echo "$DATABASES" | while read -r DB; do
mysql -e "drop database \`$DB\`"
done && \
/etc/init.d/mysql stop && \
find /var/lib/mysql -maxdepth 1 -type f \( -name 'ibdata1' -or -name 'ib_logfile*' \) -delete && \
/etc/init.d/mysql start && \
mysql < alldatabases.sql && \
rm -f alldatabases.sql
保存号为/root/.my.cnf,运行方式为/var/lib/mysql。
不包括/root/.my.cnf,/var/lib/mysql,performance_schema(和binlog目录)。
假设您在/root/.my.cnf中拥有管理员凭据,并且您的数据库位于默认的/var/lib/mysql目录中。
您还可以在运行此脚本后清除二进制日志以重新获得更多磁盘空间:
PURGE BINARY LOGS BEFORE CURRENT_TIMESTAMP;
Pierre-Alexis de Solminihac answered 2019-01-21T02:41:46Z
-1 votes
如前所述,你不能缩小ibdata1(这样做你需要转储和重建),但通常也没有真正的需要。
使用autoextend(可能是最常见的大小设置)ibdata1预分配存储,每次接近满时都会增长。 这使得写入速度更快,因为已经分配了空间。
删除数据时,它不会缩小,但文件中的空间会标记为未使用。 现在,当您插入新数据时,它将重新使用文件中的空白空间,然后再进一步增长文件。
所以如果你真的需要这些数据,它只会继续增长。 除非你真的需要空间用于其他应用程序,否则可能没有理由缩小它。
steveayre answered 2019-01-21T02:42:28Z
相关文章:

MySQL学习----各种字符的长度总结
数字型 类型大小范围(有符号)范围(无符号)用途TINYINT1 字节(-128,127)(0,255)小整数值SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值MEDIUMINT3 字节(-8 388 608,8…
分布式消息队列Kafka集群安装
kafka是LinkedIn开发并开源的一个分布式MQ系统,现在是Apache的一个孵化项目。在它的主页描述kafka为一个高吞吐量的分布式(能将消息分散到不同的节点上)MQ。在这片博文中,作者简单提到了开发kafka而不选择已有MQ系统的原因。两个原…

[na]pc加入域认证细节
这也是以前好奇,因为学生时候,经常机房上网, 对一些譬如.. 现在看来很low了. 是小作坊式的技术, 真正上不了台面的.扛不住生产的压力. ftp共享计算机统一管理等无盘/网克等特别好奇 计算机组织的两种形式 加入办公网络里有200多台pc,如果各个独立的上网互不干扰. 这种也挺方便,…

react 树形菜单_关于React 使用antd组件递归实现左侧菜单导航树(MenusTree)的示例...
一、菜单组件Demo这里本人采用的是蚂蚁金服(antd)组件库里的{Menu}组件写的一个左侧菜单树的小Demo(整套开发环境是ReactReduxwebpack)import React from react;import { Menu, Icon } from antd;import {WeaScroll} from ecCom;import {bindActionCreators} from redux;import…

SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )
SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需。SQL数据库有很多,MySQL是一种,…
MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet
1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本。2).下载Tomcat 官网:http://tomcat.apache.org/ 我们选择8.0: http://tomcat.apache.org/download-80.cgi 在windows下选择64位解压版:http://mirror.bit.edu.cn/apache/t…

[转]Linux 的多线程编程的高效开发经验
Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别。不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断。本文中我们从 5 个方面总结出 Linux 多线程编程上的问题…

mac webpack 版本_晓前端周刊 第48期:EMP面向未来微前端方案正式开源了!玩转 webpack,使你的打包速度提升 90%;...
业界动态苹果最大杀招:iPhone App 已能在电脑运行近日网友反馈,苹果 App Store 中大量应用在兼容性一栏中显示:已支持运行 macOS 11(及以上版本)的 Mac 电脑。这意味着,iPhone 中的应用,已可以在 Mac 电脑中运行。并非…

LNMP安装配置
LNMP安装配置 目录bin:存放普通用户可执行命令sbin:存放超级用户可执行命令which iptables : 查看boot目录:存放系统启动所需(内核,映像)dev:设备文件(鼠标,键盘...等外部…
效果广告点击率预估实践:在线学习
效果广告点击率预估实践:在线学习 原创 2016-03-24 腾讯大数据 腾讯大数据1.引言 技术钻研如逆水行舟,不进则退。公司的广告业务发展非常迅猛,有目共睹,激烈的外部竞争和客户越来越高的期望,都要求我们的技术不断进步&…
Redis安装与调试
Redis安装与调试 Redis安装与调试linux版本:64位CentOS 6.5 Redis版本:2.8.17 (更新到2014年10月31日) Redis官网:http://redis.io/ Redis常用命令:http://redis.io/commands 1.安装Redis # wget http:…

lumen mysql 事务_简单几部搞定laravel/lumen跨库操作
1.跨库数据库配置在网站跟目录下的config文件中增加database.php作为数据库配置文件。配置如下://当前默认数据库mysql > [driver > mysql,host > env(DB_HOST, localhost),port > env(DB_PORT, 3306),database > env(DB_DATABASE, forge),username …
springMVC出现HTTP Status 405 - Request method 'GET' not supported错误的解决方法
今天在写一个简单的springMVC的表单请求处理时,出现了这个问题。我的form表单用的是post方法提交,并没有使用get方法,出现这个问题时,笔者可谓是一脸懵逼。这是form表单:这是对post请求的处理方法:检查了半…
从Nginx源码谈大小写字符转化的最高效代码以及ASCII码表的科学
说起大小写字母转换,大家很容易想起系统函数是不是,几乎所有的编程语言都提供了这种转换函数,但是你有没有想过这背后是怎么实现的? 让你写怎么实现?我们都知道Nginx是目前用的最多的Http服务器,那么他的代…

常回“家”看看
近一年来很少写博客了,原因很多,一言难尽!感觉人在每个阶段思想都在不断发生变化,往往某一时期认定的事情会在另外一个阶段发生自我否定或者是改变!之前认为自己也许不再走技术路线了,所以把精力都放在了其…

python launcher怎么使用_QMUI实战(一)—为何我们要使用 LauncherActivity?
QMUI 2 发布了,但是里面换肤等相关的很多东西,如果不讲,那么很多人估计就只能复制粘贴下 QMUIDemo 的代码,而并不能用好 QMUI, 或者是通过 QMUI 来提升自己的 UI 开发能力,毕竟现在很多 Android 开发都是轻…

CoAP 协议解析说明(转)
CoAP 协议全面分析 HTTP与COAP 请求与响应示例 HTTP请求(文本格式) POST https://getman.cn/echo HTTP/1.1 User-Agent: Fiddler Host: getman.cn Content-Length: 9{temp:22}HTTP响应(文本格式) HTTP/1.1 200 OK Server: NWSs Da…

孔雀翎----《Programming C# 》中文版 第4版
孔雀翎----《Programming C# 》中文版 第4版 主页:http://blog.csdn.net/21aspnet/ 时间:2007.8.7 电子工业出版社给我邮寄了此书,所以本人可以先在出版之前一睹为快。 本人曾看过300多本.NET方面的书,感慨颇深。其实一…

iOS开发小技巧--textField成为密码框,view加载完后textField获取焦点
文本框安全输入:Secure Text Entry(安全文本输入)view加载完后textField获取焦点的正确做法

python出现typeerror原因是_Python 文件添加列表数据后TypeError原因
# -*- coding: utf-8 -*-#打开文件,将文件读入字符串colfopen(pride.txt)textf.read()colstext.split()f2open(data.txt,w)for col in cols:f2.write(col)f2.write(\n)以上代码运行无误。# -*- coding: utf-8 -*-#打开文件,将文件读入字符串colfopen(pri…

LVM逻辑卷创建管理
LVM(逻辑分区)的创建顺序:物理分区-物理卷-卷组-逻辑卷-挂载。物理卷(Physical Volume,PV):就是指硬盘分区,也可以是整个硬盘或已创建的软RAID&am…
Linux环境PHP5.5以上连接SqlServer2008【全网最经典无错版】
linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5.28 Sqlserver版本:2008 FreeTDS版本:0.95 关于Linux环境安装NginxPHP参考Linux环境Nginx安装与调试以及PHP安装 即可。一般来说,PHPmysql是…

python矩阵运算库效率_python - 布尔矩阵运算的最快方法_performance_酷徒编程知识库...
只需在compute中进行一些小的更改:def compute(m, n):m np.asarray(m)n np.asarray(n)# Apply mask N in advancem2 m & n# Pack booleans into uint8 for more efficient bitwise operations# Also transpose for better caching (maybe?)mb np.packbits(…

hibernate-session中的方法
1.操作实体对象的方法 save() 保存 update() 更新 saveOrUpdate() 保存或更新 delete() 删除 2.操作缓存的方法 clear() 清除所有缓存 evit() 将指定对象清除出缓存 flush() 刷新到数据库中()马上执行sql语句,不会清除session缓存&#x…

[JZOJ4786]小a的强迫症
[JZOJ4786]小a的强迫症 题目大意: 有\(n(n\le10^5)\)种颜色的珠子,第\(i\)种颜色有\(num[i]\)个。你要把这些珠子排成一排,使得第\(i\)种颜色的最后一个珠子一定在第\(i1\)种珠子的最后一个珠子之前,求方案数。 思路: …

Servlet,过滤器,监听器,拦截器的区别
由于最近两个月工作比较清闲,个人也比较“上进”,利用工作空余时间,也继续学习了一下,某天突然想起struts2和struts1的区别的时 候,发现为什么struts1要用servlet,而struts2要用filter呢?一时又…
Linux环境Nginx安装多版本PHP
关于Linux环境Nginx安装与调试以及PHP安装参考此文即可:http://blog.csdn.net/unix21/article/details/8544922linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5.28 & php5.4.44 所谓多版本多版本PHP就是php5.4…

java 扫描tcp端口号_多线程TCP端口扫描 java实现
界面部分:import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax…

【go同步编程】
锁 互斥锁 函数write中的这条defer语句保证了在该函数被执行结束之前互斥锁mutex一定会被解锁。 var mutex sync.Mutex func write() { mutex.Lock() defer mutex.Unlock() // 省略若干条语句 } func repeatedlyLock() {var mutex sync.Mutexfmt.Println("Lock the lock. …
Linux环境PHP7.0安装
PHP7和HHVM比较PHP7的在真实场景的性能确实已经和HHVM相当, 在一些场景甚至超过了HHVM。HHVM的运维复杂, 是多线程模型, 这就代表着如果一个线程导致crash了, 那么整个服务就挂了, 并且它不会自动重启。另外它采用JIT, 那么意味着, 重启以后要预热, 没有预热的情况下, 性能较为…