我重新启动了服务器,因为它冻结了(可能是迄今为止我做过的最愚蠢的事情),然后出现了一些内部服务器错误。我很快发现mysql启动失败(service mysql status)。我阅读了 mysql 错误日志(Pastebin)并开始谷歌搜索。
我正在运行 Ubuntu 的最新版本,mysql Ver 14.14 Distrib 5.7.31,适用于 Linux (x86_64),使用 EditLine 包装器。我尝试过的:
这是我的 /var/log/mysql/error.log
2020-08-07T15:43:06.094116Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-08-07T15:43:06.095903Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.31-0ubuntu0.18.04.1) starting as process 952 ...
2020-08-07T15:43:06.100450Z 0 [Note] InnoDB: PUNCH HOLE support available
2020-08-07T15:43:06.100482Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic …Run Code Online (Sandbox Code Playgroud) 我正在使用官方 MariadDB 10.7 docker 映像,Windows 10。如果今天开始出现此错误并不断重复,请尝试一切:
- mysqlcheck -Ar
- delete docker image with all the data
- chkdsk -F
- dump and restore of table
- change MariaDB version
- different PC configs (nvme -> SSD)
Run Code Online (Sandbox Code Playgroud) 我正在开发一个我计划使用InnoDB的网络应用程序.但是我读到有时InnoDB默认情况下没有启用,需要更改mysql配置才能启用它......这是真的吗?由于我的网络应用程序将由客户自己安装在他们自己的网站空间,我需要确保我的应用程序尽可能兼容.如果默认情况下禁用InnoDB,那么我必须寻找解决方法.
在一个包含5百万行的表中,SELECT count(*) FROM table在MyISAM中会立即显示,但在InnoDB中需要几秒钟.
为什么这样?为什么他们不像MyISAM那样在InnoDB中优化计数?
谢谢.
我正在尝试使用InnoDB存储引擎优化运行MySQL的应用程序.
innotop在实时环境中运行时,我得到以下输出:
When Load QPS Slow QCacheHit KCacheHit BpsIn BpsOut
Now 0.00 87.80 0 41.21% 100.00% 11.51k 836.42k
Total 0.00 105.50 190 15.04% 99.34% 13.23k 692.85k
Run Code Online (Sandbox Code Playgroud)
When,Load,QPS和Slow是自解释的.
可是你知道QCacheHit,KCacheHit,BpsIn和BpsOut?一般来说,那些被认为是"好"的价值观,我应该何时开始担心?
我已经使用MySQL多年,但没有很多使用InnoDB引擎的经验.
我现在正在对它进行一些测试,因为我将要使用它并且根据我已经阅读的内容,如果THAT事务中的任何查询存在任何问题,则不应该允许任何"经历".
我的问题是,为什么,在下面的代码....当第三个查询显然有问题时,它仍然将前两个查询输入数据库吗?
$query = "BEGIN";
mysql_query($query);
$query = "INSERT INTO list_columns(lid,column_name) VALUES(8,'test')";
mysql_query($query);
$query = "INSERT INTO list_columns(lid,column_name) VALUES(8,'test')";
mysql_query($query);
$query = "INSERT INT list_columns(lid,column_name) VALUES(8,'test')";
mysql_query($query);
$query = "COMMIT";
mysql_query($query);
Run Code Online (Sandbox Code Playgroud)
编辑:我理解使用ROLLBACK&all .....但我认为交易的全部目的是如果交易中的任何查询都有任何问题,那么它们中的任何一个都将被执行......或者这只是在一个查询中有多个插入的情况,例如....如果其中一个插入存在问题,那么将不会插入任何插入?
我有以下内容:
mysql> show create table rc_profile_table \G;
*************************** 1. row ***************************
Table: rc_profile_table
Create Table: CREATE TABLE `rc_profile_table` (
`id` int(11) NOT NULL auto_increment,
`created_at` datetime default NULL,
`name` varchar(32) NOT NULL,
`surname` varchar(32) NOT NULL,
`password` varchar(128) NOT NULL,
`unique_code` varchar(16) NOT NULL,
`msisdn` varchar(32) NOT NULL,
`current_location` varchar(64) NOT NULL,
`profile_pic` varchar(255) default NULL,
`email` varchar(128) NOT NULL,
`age` int(11) NOT NULL,
`city_of_birth` varchar(64) NOT NULL,
`personality` varchar(128) NOT NULL,
`country_id` int(11) NOT NULL,
`religious_id` int(11) NOT NULL, …Run Code Online (Sandbox Code Playgroud) MySQL版本:v5.0.95
基本上,我有一些尝试获取数据的客户端-每个客户端只能获得唯一的行。
START TRANSACTION;
SELECT id where result='new';
UPDATE SET result='old' WHERE id=$id;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
LOCK IN SHARED MODE 在select语句上仍然允许其他客户端读取数据,这似乎是一个问题。
基本上,我需要选择一次数据,更新数据,而不需要其他客户端再次读取数据。
我正在使用软件生成的ID更新表到MySQL auto_increment ID.
ID字段是int(10),数据库类型是InnoDB
将ID更新为顺序后,从1开始,新的最高ID为122.以前,最高ID为62029832
现在我正在尝试更新auto_increment值,以便下一个插入是123.
当前的auto_increment值为62029833.
到目前为止,我尝试过:
ALTER TABLE tableName AUTO_INCREMENT = 123; - - 没运气.没有错误,只是不坚持.
INSERT INTO tableName(ID)VALUES(123); DELETE FROM tableName WHERE ID = 123; ---仍然没有运气
如果有另一种方法,我想避免截断表.
从我读过的内容来看,InnoDB应该允许更改为123,因为最高值当前为122,但它表现得好像有更高的值.
为了测试,我也尝试将auto_increment更改为1000,2000,122等.没有什么可以坚持的.
有任何想法吗?

上图显示了读取和更新操作的延迟,而列显示了吞吐量(操作/秒)我不确定MyISAM如何以如此低的延迟执行操作但在吞吐量方面仍与InnoDB保持同等水平?MongoDB在吞吐量方面也占主导地位,但具有比MyISAM更高的延迟.
这些结果如何有意义?