MySQL 平时积累技巧

2019/04/22 MySQL 共 1473 字,约 5 分钟
山川尽美

mysql 中 long 时间的转换

在开发中,有时候为方便将日期时间以 long 类型(秒钟)存在数据库,这里要查询数据就需要进行转换。 在 mysql 中只要使用from_unixtime函数就可以了。

附 mysql 的两个转换函数:

  1. 在 mysql 数据库中,“2018-06-01 00:00:00”转化为列为长整型的函数: select unix_timestamp("2018-06-01 00:00:00")*1000, 这里要注意,mysql 数据库中的长整型,比 java 中的长整型少了秒后面的毫秒数,所以要乘以 1000,这样只有几毫秒之差

  2. 在 mysql 数据库中,“1527782400000”(java 中的 long 型数据)转化为日期: select from_unixtime(1527782400); 【注】:要将最后三位去掉。

mysql> select unix_timestamp("2018-06-01 00:00:00");
+---------------------------------------+
| unix_timestamp("2018-06-01 00:00:00") |
+---------------------------------------+
|                            1527782400 |
+---------------------------------------+
1 row in set (0.00 sec)
 ----------
 
mysql> select from_unixtime(1527782400);
+---------------------------+
| from_unixtime(1527782400) |
+---------------------------+
| 2018-06-01 00:00:00       |
+---------------------------+
1 row in set (0.00 sec)

too many connections 解决方法

show processlist;

查看连接数,可以发现有很多连接处于sleep状态,这些其实是暂时没有用的,所以可以 kill 掉

show variables like "max_connections";

查看最大连接数,应该是与上面查询到的连接数相同,才会出现too many connections的情况

set GLOBAL max_connections=1000;

修改最大连接数,但是这不是一劳永逸的方法,应该要让它自动杀死那些 sleep 的进程。

show global variables like 'wait_timeout';

这个数值指的是 mysql 在关闭一个非交互的连接之前要等待的秒数,默认是 28800s

set global wait_timeout=300;

修改这个数值,这里可以随意,最好控制在几分钟内

set global interactive_timeout=500;

修改这个数值,表示 mysql 在关闭一个连接之前要等待的秒数,至此可以让 mysql 自动关闭那些没用的连接,但要注意的是,正在使用的连接到了时间也会被关闭,因此这个时间值要合适。

解决办法

批量 kill 之前没用的 sleep 连接

  1. 先把要 kill 的连接 id 都查询出来
    select concat('KILL ',id,';') from information_schema.processlist where user='root'; 
    
  2. 复制中间的kill id;内容到 word 文档
  3. 替换掉符号“”和回车符(在 word 中查询 ^p 即可查询到回车符)
  4. 把修改过的内容复制回终端,最后按回车执行!

文档信息

Search

    Table of Contents