MyISAM 用于将每个表存储在相应的文件中很方便。InnoDB 在很多方面都取得了进步,但我想知道为什么 InnoDB 将所有数据库存储在一个文件中(ibdata1默认情况下)。
我知道 InnoDB 将通过表的单个索引文件映射文件中数据的位置,但我不明白为什么它将所有数据混合在一个文件中。更重要的是,为什么要混合服务器上所有数据库的数据?
MyISAM 的一个有趣功能是,可以将数据库文件夹复制/粘贴到另一台机器上,然后使用该数据库(无需转储)。
InnoDB 将所有表存储在一个大文件中ibdata1。
删除大表后,无论表有多大,文件都会保持其大小。如何缩小该文件而不必转储并重新导入整个数据库(总共有数百 GB)?
我认为原因是因为您仍然可以回滚下降。就我而言,我不需要。
我想了解这些 ibdata 文件,因为它们在崩溃恢复过程中起着至关重要的作用。我无法通过网络找到合适的资源。
我有一个奇怪的问题,我似乎无法解决。我更像是一个网络程序员而不是服务器/数据库管理员,所以我希望这里有人可以帮助我。
情况
我正在开发一个处理大量update,insert和delete请求的系统。因此,我选择 INNODB 作为我的存储引擎,因为它具有行锁定功能。我们每 10 分钟更新 60,000 条记录,使用 Gearman 在不同服务器上并行处理我们的工作。代码是用 PHP 编写的,我们使用的是 Zend Framework。
问题
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
Run Code Online (Sandbox Code Playgroud)
我们几乎每 30 分钟就会收到一次上述错误,来自我们的一名 Gearman 工人。
这 mysql_report
MySQL 5.1.63-0+squeeze1 uptime 15 9:52:12 Tue Sep 11 21:25:23 2012
__ Key _________________________________________________________________
Buffer used 55.00k of 16.00M %Used: 0.34
Current 2.92M %Usage: 18.24
Write hit 99.95%
Read hit 100.00%
__ Questions ___________________________________________________________
Total 122.05M 91.7/s
DMS 106.63M 80.1/s %Total: …Run Code Online (Sandbox Code Playgroud) 我在 linux 中遇到内存问题。当我使用 df -hi 检查内存分配时,找到了一个路径 /dev/sda1 并且它被 100% 使用。当我挖掘更多时,我发现 /var/lib/mysql 文件几乎占用了所有内存。最后我遇到了一张扩展名为 .ibd 的表,几乎有 20GB。当我点击 sudo du -a | 排序-nr | 头命令,我终于找到了实际的表。它是这样的:
20937708 ./var/lib/mysql/databasename/tablename.ibd
Run Code Online (Sandbox Code Playgroud)
我不知道发生了什么。请帮帮我。由于存储问题,我的服务器几乎停止了。
我正在将 ~52GB 转储恢复到 MySQL 数据库。ibdata1 文件已经超过转储文件的大小,恢复仍然不完整。如果知道 MySQL 转储文件的大小,有没有办法估计 ibdata1 文件的最终大小?
MySQL 5.1.4x (Windows) | 数据库
我最近从 mySQL 数据库(几十万行)中清除了数据,我打算使用
OPTIMIZE TABLE LOGTABLEFOO1,LOGTABLEFOO2,LOGTABLEFOO3;
Run Code Online (Sandbox Code Playgroud)
为了减少文件系统中的空白空间占用的数据空间。
我担心的是,一旦我开始执行此命令,我将不知道要花多长时间或在此过程中处于什么位置。无论如何我可以确定这些信息吗?据我所知,没有进度指示器。
在 MySQL InnoDB 数据库中安排表的自动优化的最佳方法是什么?例如,我可以使用事件吗?我最近遇到了一个很大的性能问题(在查询时),其中一个表实际上是我数据库中最大的表,并且经常更新。我在表上运行OPTIMIZE后,问题就解决了。
我刚刚将我的 Wordpress 数据库切换为使用 InnoDB 引擎。
使用 MyISAM 时,我曾经运行Optimize和Repair table. 但是,对于 InnoDB,这些不起作用。
我手动运行OPTIMIZE TABLE并建议ALTER TABLE但没有一个删除开销。我在mysqltuner显示 14 个碎片表的服务器上运行- 我总共有 14 个表。即使在运行optimizeand 之后alter tables,所有 14 个表仍然碎片化!
我怎样才能正确地OPTIMIZE和REPAIRInnoDB 表?
我正在使用 innodb_file_per_table 运行 MySql innodb。
作为日常脚本,我想为一组表创建一个新分区,并删除昨天的分区。需要运行什么命令来删除旧分区以释放磁盘空间?我希望避免系统因数据库磁盘使用而耗尽磁盘空间。我还想避免关闭 Mysql。
编辑:我读过丢弃表空间应该删除占用大部分空间的 .ibd 文件。
ALTER TABLE tbl_name DISCARD TABLESPACE;
Run Code Online (Sandbox Code Playgroud)
但是,在分区表上使用此命令存在一个已知错误。
我已经安装了一个带有 InnoDB 的 MySQL 集群(随后启用了 innodb_file_per_table),但是由于我切换到 innodb_file_per_table,文件 ibdata1 增长(每月 2GB)。
my.cnf文件是否正确?服务器配置:
Debian 6 amd64
mysql-client-5.1 5.1.61-0+squeeze1
我的 InnoDB 配置文件:
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_file_per_table
innodb_buffer_pool_size = 5G
innodb_additional_mem_pool_size = 48M
innodb_log_files_in_group = 3
innodb_log_file_size = 512M …Run Code Online (Sandbox Code Playgroud) innodb ×11
mysql ×11
disk-space ×2
ibdata ×1
logs ×1
memory ×1
myisam ×1
mysql-5.1 ×1
mysql-5.5 ×1
mysqldump ×1
optimization ×1
partitioning ×1
performance ×1
restore ×1
windows ×1