Articles of innodb

在MySQL 5.0-> 5.6升级之后永远不会结束交易问题

我将整个后台mysql数据库从5.0升级到5.6,包括将几个表更改为innodb,而且我们一直没有任何问题,因为从来没有结束过的交易。 我还有一个使用5.0的登台服务器,我可以确认我们只在新的数据库服务器上发生停滞事务。 这两个服务器都运行在tx_isolation = REPEATABLE-READ模式( http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html )。 我很确定涉及到的所有表都是InnoDB。 因此,我们遇到的一个简单的例子就是发送欢迎电子邮件的过程,这个电子邮件作为一个supervisord子节点运行(不是很重要)。 在使用mysql 5.0的舞台上,连接持续几分钟,并且没有打开的事务: From show full processlist: 1639945 dbuser <app-stage>:54536 db Sleep 246 NULL InnoDB transaction logs: <nothing> 我们的生产环境与MySQL 5.6完全相同的程序,它突然间locking真正重要的表的恶魔的孩子,从来没有释放他们。 From show full processlist: 28674638 dbuser <app-prod>:54836 db Sleep 67131 NULL Innodb transaction: —TRANSACTION 90461789, ACTIVE 67062 sec MySQL thread id 28674638, OS thread handle 0x7f8ab934f700, query […]

检查MySQL INNODB文件夹

考虑以下情况。 我目前在我的虚拟机中安装了Ubuntu安装。 这个安装已经安装了mysql。 mysql服务器的数据可以在下面find。 /var/lib/mysql 默认安装包含; Folder "mysql" Folder "performance_schema" ibdata + ib_logfiles mysql_upgrade_info 最近有人向我提供了一个具有完全相同结构,包含数据的文件夹。 我怎样才能成功地实现我收到的文件夹到“干净的安装”? 平原复制没有工作,因为它造成了各种权限问题。 有什么办法可以成功提取ibdata文件中的数据到我的新的mysql安装? 使用的引擎是InnoDB。 我只是有兴趣查看这个数据库的实际内容。 如果有任何forms的浏览器可以在这个结构中快速地“窥视”,那么这也可以派上用场。

关于innodb_buffer_pool_instances的Mysql innodb_buffer_pool_size

我运行一个虚拟服务器上有一个Owncloud安装。 现在Owncloud的问题就是它现在开发的方式,每次file upload都会导致一点MySql开销。 因此,尽可能地优化MySql数据库非常重要。 有很多人在网上推荐一个非常大的innodb_buffer_pool_size达到4,5或更多的GByte,有人甚至说到70到80%的总ram,嗯? 好吧,但是很less有人介意叫做innodb_buffer_pool_instances的第二个参数 所以让我们看看我的情况。 我的虚拟机资源有限。 这意味着6400 GByte总RAM,并在正常模式下约3000(由libvirt处理)。 因此,如果我设置innodb_buffer_pool_instances超过1,或者让它在新的MySql服务器的默认configuration(8或者什么)意味着(只要我明白了这一点)在最坏的情况下,例如innodb_buffer_pool_instances = 4和innodb_buffer_pool_size = 4 =>在最大情况下,4 * 4 = 16 GB RAM。 什么会导致交换磁盘的不良使用,以及MySql innodb缓冲区的每个交换使用对于任何性能都是一种矫枉过正。 结论很容易。 可用的缓冲区大小必须小于至less70%的可用ram,其余可能需要php,apache和系统本身。 那么更好的决策是什么? 只有一个可能的innodb_buffer_pool_instances但是一个非常大的innodb_buffer_pool_size或更好的一个更小的innodb_buffer_pool_size ,因此如果需要,同时更多的innodb_buffer_pool_instances 。 我的服务器最多使用10到30人左右。

MySQL(MariaDB)崩溃

早上好 – 我已经回顾了以前的一篇文章,关于将性能模式改为“在configuration设置中closures”,看起来好像我们的configuration已经设置为这个,所以不知道是什么原因导致了崩溃的问题。 [root@#### etc]# vim my.cnf [mysqld] general_log = 1 general_log_file=/var/log/mariadb/query.log datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 innodb_file_per_table = 1 #thread_stack = 131072 # mgk change 11/23/15 thread_stack = 256k net_buffer_length = 2K read_rnd_buffer_size = 256K read_buffer_size = 256K sort_buffer_size = 64K table_open_cache = 4 max_allowed_packet = 1M key_buffer_size = 16K performance_schema = off 这是一个日志摘要 InnoDB: mmap(137756672 […]

当预计使用率高峰时,如何调整MySQL服务器

我有很大的问题试图调整我的MySQL服务器。 在下午五点到六点之间买了电视广告后,我在网站上预计会有很多人在这个时候在网站上有300多人。 我在my.cnf中尝试了很多调整,但是每天晚上都变得越来越糟……我真的很感谢一些帮助,想知道我的问题在哪里..我目前的基础设施如下: 一个服务器为我的网站 安装在它上面的apache2 6c / 12t – Intel(R)Xeon(R)CPU E5-1650 v2 @ 3.50GHz 64GB RAM – DDR3 ECC 1600 MHz 磁盘 – HardRaid + 3×480 Go SSD 一个服务器为我的数据库 Mysql 5.5.38就可以了 4c / 8t – Intel(R)Xeon(R)CPU E5-1620 v2 @ 3.70GHz 32GB内存 – DDR3 ECC 1600 MHz 磁盘 – SoftRaid 3×160去SSD 这是我目前的configurationmy.cnf: innodb_file_per_table = 1 innodb_buffer_pool_instances […]

如何从innodb缓冲池中排除特定的表?

这是我的情况。 我有一个非常大的表,可以容纳大约90 GB的数据。 我已经利用DATA DIRECTORY将该表放置在另一个驱动器上,因为我很less使用该表并且不希望它浪费SSD上的空间。 但是,InnoDB数据大小有问题。 InnoDB的数据大小都是73GB,而InnoDB的池大小是30GB。 我真的不知道73 GB来自哪里,我认为这是因为我有非常大的90 GB的表。 我怎样才能减less数据大小? 我知道我的InnoDB池的大小是足够的,到目前为止我看不到对服务器的负面影响。 谢谢!

可视化InnoDB的外键

什么是最好的方式来获得一组MySQL表的外键约束的可视化表示? (除了用手绘出) 像这样的东西: http://www.postgresonline.com/images/journal/oo_relationships1.jpg

将mysql innodb数据分区从一台计算机移动到另一台计算机

/etc/mysql/conf.d/myserver: [mysqld] innodb_file_per_table datadir = /elastidb/lib/mysql #log-bin = /elastiblockdb/log/mysql/mysql-bin.log general_log = true log = /elastiblockdb/log/mysql/mysql_general.log log-error = /elastiblockdb/log/mysql/mysql_error.log max_binlog_size = 1000M log-slow-queries = /elastiblockdb/log/mysql/mysql-slow.log long_query_time = 10 innodb_buffer_pool_size = 4500M innodb_additional_mem_pool_size = 200M innodb_log_file_size = 64M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 2 我在亚马逊服务器上有两个相同的Ubuntu机器。 两台机器有相同的/ etc / mysqlconfiguration文件。 问题是,当我卸载/ elastidb(MySQL数据)在一台服务器上,并重新安装在另一台,当我尝试启动其他服务器上的MySQL我得到以下错误: /usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: […]

从MySQL innodb中删除大量的数据

我需要在我的生产数据库中删除大量的数据,这个数据库大小为100GB。 如果可能的话,我想尽量减less我的宕机时间。 我的删除select标准可能是 DELETE * FROM POSTING WHERE USER.ID = 5 AND UPDATED_AT <100 什么是删除它的最好方法? build立一个索引? 写一个连续的脚本,通过每次行1000分页删除?

删除旧的MySQL数据会提高性能吗?

从我的表中删除旧数据会提高MySQL查询性能? 当我的查询使用索引? 当我的查询不使用索引? 当我使用InnoDB? 当我使用MyISAM?