小编Chr*_*nch的帖子

时间戳字段的无效默认值(mysql 5.7)

编辑:从 mysql 5.6 更新现有数据库并执行时:

UPDATE phppos_register_log SET shift_end = '2015-01-01 00:00:00' WHERE shift_end = '0000-00-00 00:00:00';

这产生:

#1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'shift_end' at row 1
#1067 - Invalid default value for 'shift_start' 
Run Code Online (Sandbox Code Playgroud)

这在 mysql <=5.7 中有效。我找不到任何关于此的文档......这有什么问题?

CREATE TABLE `phppos_register_log` (
      `register_log_id` int(10) NOT NULL AUTO_INCREMENT,
      `employee_id_open` int(10) NOT NULL,
      `employee_id_close` int(11) DEFAULT NULL,
      `register_id` int(11) DEFAULT NULL,
      `shift_start` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      `shift_end` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      `open_amount` decimal(23,10) NOT NULL, …
Run Code Online (Sandbox Code Playgroud)

mysql mysql-5.7

13
推荐指数
1
解决办法
6万
查看次数

Mysql慢慢使用内存,直到开始使用swap

我正在运行 1gb 的 RAM 机架空间数据库服务器。出于某种原因,在大约 2 天内,内存使用量从使用很少的交换变为使用 100mb。如果我不重新启动 sql,它将继续使用更多的交换。(我的 my.cnf 文件如下所示,内存使用情况如下所示)

一些背景:我有大约 50 个活动数据库,它们具有相同的模式,这些数据库使用 INNODB 来处理表。我有几个使用 MyISAM 的流量很少的数据库。

在 INNODB 表上,我不使用持久连接。我还有一个创建临时表的报告功能。(这可能是资源密集型的,但并不经常发生)

我正在使用 CENTOS 6.3 和 mysql 5.5.28-log

即使我使用的是swap,性能仍然相当不错。我只是担心如果我每隔几天不重新启动我就会出问题。

这是我大约 2 天的 free -m 日志:(第一条记录是在 mysql 重新启动后)

12/26 2:08 PM EST
             total       used       free     shared    buffers     cached
Mem:           992        697        295          0         74        362
-/+ buffers/cache:        260        732
Swap:          976         15        961

12/26 4:10 PM EST
[root@php-pos-db ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           992        791        201          0 …
Run Code Online (Sandbox Code Playgroud)

mysql innodb performance

8
推荐指数
1
解决办法
2万
查看次数

mysql 大量打开的表——这是什么意思,我该如何减少?

我有 300 个数据库,每个数据库最多 59 个表。我的托管服务提供商说我有很多打开的表。我没有任何性能问题;但它会导致备份问题(我使用了使用 Percona XtraBackup 的 rackspace 云数据库)

什么会导致大量开放表,我该如何减少这种情况?我没有太多的流量,性能很好。我也不确定我是否完全理解打开的表是什么。

我确实table_definition_cache设置为,4096因为在我增加它之前我无法对视图运行查询。

mysql> SHOW GLOBAL STATUS LIKE 'Open_%';
mysql> +--------------------------+----------+
    -> | Variable_name            | Value    |
    -> +--------------------------+----------+
    -> | Open_files               | 7        |
    -> | Open_streams             | 0        |
    -> | Open_table_definitions   | 4102     |
    -> | Open_tables              | 4096     |
    -> | Opened_files             | 44025318 |
    -> | Opened_table_definitions | 1660409  |
    -> | Opened_tables            | 1857375  |
    -> +--------------------------+----------+
Run Code Online (Sandbox Code Playgroud)

以下是请求的命令:

https://gist.github.com/blasto333/aa4241a4e37447961188356719ea6984

mysql

8
推荐指数
2
解决办法
1万
查看次数

计数显示 MySQL 中的变量结果

我正在阅读这篇文章,似乎没有办法做这样的事情:

SELECT COUNT(*) 
WHERE SHOW VARIABLES 
WHERE Variable_name = 'innodb_ft_cache_size'
Run Code Online (Sandbox Code Playgroud)

我可以执行以下操作,但这在 MySQL 5.7 中不起作用(表中没有变量)

SELECT COUNT(*) 
FROM information_schema.GLOBAL_VARIABLES 
WHERE Variable_name = 'innodb_ft_cache_size' (always returns 0)
Run Code Online (Sandbox Code Playgroud)

我需要这样做的原因是在存储过程中检测他们是否有能力做全文。它需要在MySQLMySQL 和变体中工作,所以我不能简单地解析@@verison.

有没有另一种方法可以做到这一点?

这是一个works on 5.5,5.6, and 5.7用于检测是否存在全文功能的存储过程。这也应该适用于 mysql 变体

begin
set @supports_ft = 0;
set @information_schema_exists := (SELECT COUNT(SCHEMA_NAME) FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = 'information_schema');

if @information_schema_exists > 0 then
    set @information_schema_exists_global_vars_exists := (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'information_schema' AND TABLE_NAME = 'GLOBAL_VARIABLES');
        if @information_schema_exists_global_vars_exists …
Run Code Online (Sandbox Code Playgroud)

mysql

7
推荐指数
1
解决办法
1267
查看次数

MySQL 安全随机字符串生成器

我希望为 MySQL 中的密码重置生成一个加密安全的字符串。我知道我可以在 PHP 的应用程序级别执行此操作;但这需要我的许多客户可能没有的 OpenSSL 扩展。

如果我能以一种广泛可用的安全方式在 MySQL 5 中做到这一点,那将是理想的。这可能吗?

注意:这是为了生成密码重置的安全令牌。它与安全连接没有任何关系,因此使用 https 不是解决方案。

mysql mysql-5 security encryption

6
推荐指数
1
解决办法
8918
查看次数

mysql MATCH 相关性评分

我认为这是一个很容易通过谷歌搜索的问题;但我找不到它。

给出以下查询:

SELECT name, MATCH (name) AGAINST ('vision black*' IN BOOLEAN MODE) as rel 
FROM (`phppos_items`) 
WHERE MATCH (name) AGAINST ('vision black*' IN BOOLEAN MODE) AND `deleted` = 0
ORDER BY `rel` DESC LIMIT 100
Run Code Online (Sandbox Code Playgroud)

匹配分数越高是否相关性越高?有人能给我指出正确的 mysql 手册页来解释这一点吗?

根据简单的观察,分数越高似乎越好。

mysql full-text-search

4
推荐指数
1
解决办法
2万
查看次数

mysql innodb db全文搜索FTS_DOC_ID列

我正在将全文搜索添加到已经存在的 mysql 表中,这些表具有 id 整数的主要自动递增键。

当我添加全文索引时,我收到一条警告:

/*!50604 ALTER TABLE `phppos_additional_item_numbers` ADD FULLTEXT INDEX item_number_search (`item_number`)*/;      

Warning (Code 124): InnoDB rebuilding table to add column FTS_DOC_ID
Run Code Online (Sandbox Code Playgroud)

我不能简单地重构我的所有代码以添加列 FTS_DOC_ID 来删除此警告。允许这种警告发生是不是很糟糕?

mysql innodb full-text-search

4
推荐指数
1
解决办法
2277
查看次数

session sql模式+默认sql模式

我正在 mysql 5.7 中测试我的应用程序,并且有一些代码不适用于 ONLY_FULL_GROUP_BY ON。我会在以后的版本中修复这个问题。我找到了一种方法,通过在运行任何查询之前执行 'SET SESSION sql_mode=""' 来为我的应用程序关闭此功能。

我有两个问题:

  1. 这是否适用于对数据库没有 root 访问权限的共享主机服务?它似乎对我的测试有效。

  2. 由于模式设置为 '' 这实际上意味着什么?对我来说,这似乎是将其设置为无,并且不受限制。(我的另一个想法是它将它设置为空,让 mysql 决定做什么)。

根据我对手动空模式的阅读,mysql 5.1 中默认使用手动空模式,但每个版本都变得更加严格。对于 mysql 5.7,它是ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION.

因此,基于此,模式似乎是一个规则列表,如果它为空,则规则是否适用?

另外,如果我将模式设置为“”,这将始终禁用服务器设置的模式吗?

mysql mysql-5.7

2
推荐指数
1
解决办法
3807
查看次数