这是从这个相关的问题出发,我想知道如何强迫两个事务顺序发生在一个平凡的情况下(其中两个都只在一行上运行)。 我得到了一个答案 – 使用SELECT … FOR UPDATE作为两个事务的第一行 – 但这会导致一个问题: 如果第一个事务从不提交或回退,那么第二个事务将被无限期地阻塞。 innodb_lock_wait_timeoutvariables设置客户端尝试进行第二个事务的秒数,然后告诉“对不起,再试一次”……但据我所知,他们会再次尝试,直到下一次服务器重新启动。 所以: 如果一个交易永远持续下去,肯定有办法强制ROLLBACK ? 我必须诉诸使用守护进程来杀死这样的事务,如果是这样的话,这样的守护进程是什么样的? 如果连接被wait_timeout或interactive_timeout中间事务wait_timeout ,事务是否回滚? 有没有办法从控制台testing这个? 澄清 : innodb_lock_wait_timeout设置事务在放弃之前将等待锁释放的秒数; 我想要的是一种迫使锁被释放的方式。 更新1 :下面是一个简单的例子,它演示了为什么innodb_lock_wait_timeout不足以确保第二个事务不被第一个事务阻塞: START TRANSACTION; SELECT SLEEP(55); COMMIT; 使用innodb_lock_wait_timeout = 50的默认设置,此事务在55秒后完成而没有错误。 如果在SLEEP线之前添加UPDATE ,则从另一个客户端启动第二个事务,该客户端尝试SELECT … FOR UPDATE同一行,这是第二个事务超时,而不是睡着的那个事务。 我正在寻找的是一种强制结束这个交易的安宁睡眠的方法。 更新2 :为了响应hobodave关于上述示例的真实性的问题,以下是一个备用scheme:DBA连接到活动的服务器并运行 START TRANSACTION SELECT … FOR UPDATE 第二行locking应用程序频繁写入的行。 然后DBA被打断,走开,忘记结束交易。 应用程序停止运行,直到行被解锁。 我想尽量减less由于这个错误导致应用程序被卡住的时间。
我有一个Ubuntu 10.04生产MySQL数据库服务器,其中数据库的总大小为260 GB,而根分区的大小本身是300 GB,其中数据库存储在本质上意味着大约96%的/已满,没有空间用于存储转储/备份等到现在没有其他磁盘连接到服务器。 我的任务是将此数据库迁移到位于不同数据中心的其他服务器。 问题是如何以最less的停机时间有效地做到这一点? 我在想: 请求附加一个额外的驱动器到服务器,并在该驱动器转储。 [编辑:现在不可能] 将转储转储到新的服务器,将其恢复并使现有服务器的新服务器从属服务器保持数据同步 当需要迁移时,打破复制,更新从属configuration接受读/写请求,并使旧服务器只读,所以它不会招待任何写请求,并告诉应用程序开发人员更新那里configuration新的IP地址为db。 你有什么build议来改进这个任务或者更好的方法来完成这个任务?
MySQL不是我的事情,但我需要微调我们的服务器之一。 这是要求/规格: MySQL服务器只有一个重要的数据库 我们只有一个“types”的应用程序连接到它,并没有太多的同时连接到它的实例:最多15.(这些应用程序是XMPP机器人) 这些应用程序有一个非阻塞的IO,这意味着他们从不“等待”在数据库服务器上,并在数据库查询处理过程中继续处理传入的请求。 这意味着某个时候,这个应用程序的一个实例可以有几个(很多!)连接到数据库服务器(特别是如果一些查询很慢) 所有的查询都使用索引 我们的主机只运行MySQL。 这是一个2GB内存的Xen实例(@slicehost)。 我们使用InnoDB表,因为我们需要一些基本的事务,但是如果这对性能有真正的影响,我们可能会切换到MyISAM。 现在configuration好了,我们的MySQL服务器慢慢地开始吃所有可用的内存(我们使用collectd,这里是一张图)。 在某个时间点(几天/几周之后),它停止执行查询(它今天晚上停了2个小时,我不得不重新启动MySQL服务器:见第二张图): (对不起,新的用户不能发布图片,只有1个超链接:/) 每周: http : //i27.tinypic.com/6ticyv.jpg 今天:i31.tinypic.com/ir53yg.png 这是我们目前的my.cnf # # The MySQL database server configuration file. # # This will be passed to all mysql clients # It has been reported that passwords should be enclosed with ticks/quotes # escpecially if they contain "#" […]
我的ibdata文件非常大,至less在我看来非常大。 这是过度还是不好? -rw-rw—- 1 mysql mysql 15G Apr 18 10:11 ibdata1
我正在为我的mysql服务器寻找一个备份解决scheme,我需要尽可能减less停机时间。 我有以下几点: MySQL服务器 他们不复制 每个服务器代表它自己的 这个数字可以增长,所以设置主/从复制不是一个好主意。 我看到的最简单的备份方式是使用mysqldump和“automysqlbackup”这样的软件。 我最重要的数据使用InnoDB。 我的InnoDB表很重。 问题是:如果我对服务器中的所有数据库执行mysqldump,它会locking我的Innodb表吗?
我试图修复我们的服务器上的MySQLconfiguration。 我们的应用程序的细节是大量的数据存储在单个表(目前超过3亿行)。 这个表经常用于插入(他们总是来)。 当我在该表上运行select查询需要比几秒钟更长的时间,然后所有插入(正是提交)正在等待表访问,并使我们的应用程序无响应。 据我所知InnoDB在select运行时不会对表进行任何locking。 为什么select阻塞表呢? 我试图用innotopfind一个原因,但我不知道如何解释它的输出和在哪里search。 告诉我你需要什么,我会在这里发布。 +—–+———+———–+——–+———+——+—————-+———————————————————————————————————————————–+ | Id | User | Host | db | Command | Time | State | Info | +—–+———+———–+——–+———+——+—————-+———————————————————————————————————————————–+ | 1 | root | localhost | dbname | Query | 29 | NULL | COMMIT | | 2 | root | localhost | dbname | Query | […]
在生产MySQL环境中,每四分钟将以下错误消息写入/var/log/mysql/error.log : 110723 18:36:02 InnoDB: ERROR: the age of the last checkpoint is 9433856, InnoDB: which exceeds the log group capacity 9433498. InnoDB: If you are using big BLOB or TEXT rows, you must set the InnoDB: combined size of log files at least 10 times bigger than the InnoDB: largest such row. 我不知道如何parsing错误信息。 更具体地说,我不明白检查点的年龄是如何与“日志组容量”相关的,以及如何与具有大BLOB […]
我有一张大约10亿行的桌子,其中98%的阅读密集。 我试着调整数据库,使用不同的存储引擎(MyISAM和InnoDB) 然后跑了几次testing来查看性能 在where子句中,我有一个主键ID,看起来,由于MyISAM Key Cache存储将所有索引加载到缓冲区中,使用MyISAM似乎非常快,比InnoDB快大约2倍 但对于InnoDB,它似乎慢了! InnoDB是否不使用任何缓冲区来预加载索引?
在创buildInnoDB数据库之前,服务器或数据库pipe理员应该了解和做什么。 我正在考虑为innodb_buffer_pool_size和innodb_log_file_size设置正确的值 那么,你会忘记configuration什么简单的东西,会导致使用数据库的应用程序工作得更less?
我发现有很多网站正在讨论这个问题,但是我错过了一些重要的细节。 一般的步骤是 用FLUSH TABLES WITH READ LOCK运行FLUSH TABLES WITH READ LOCK 采取ZFS快照 运行UNLOCK TABLES 各种消息来源都表示,我使用的InnoDB并没有真正兑现FLUSH 。 MySQL用户手册指出,有一个用于InnoDB的FLUSH TABLES…FOR EXPORT变体,但需要单独指定每个表,而不是备份整个数据库。 我宁愿避免单独指定每个表,因为表的列表会与实际存在的表不同步。 我有另一个问题是我打算做一些像mysql -h"$HOST" -u"$USERNAME" -p"$PASSWORD" –execute="FLUSH TABLES WITH READ LOCK" 。 但是,这会在会话退出后立即丢弃locking。 这是有道理的,但也是很烦人,因为当我拿我的快照时,我需要保持读锁。 我的另一个想法是使用像Percona XtraBackup这样的工具进行热备份并拍摄备份的快照,但是我不想花费所有的数据写入第二个位置来进行快照。