MySQL 常见报错

1、Caused by: java.sql.SQLException: null, message from server: "Unknown error 1130"
原因:没有授权远程连接。

进入到Mysql中,执行以下操作即可
mysql> use mysql;
mysql> select user, host from user;
mysql> update user set host="%" where user=“root”;
mysql> flush privileges;
mysql> quit;

2、出现CPU占用率达到99%

查询了下sql进程,发现:

mysql> show processlist;
+-----+------+----------------------+-------------+---------+------+-------+------------------+
| Id  | User | Host                 | db          | Command | Time | State | Info             |
+-----+------+----------------------+-------------+---------+------+-------+------------------+
|   8 | root | 182.150.55.136:64138 | itresources | Sleep   | 16686 |       | NULL             |
|   18 | root | 182.150.55.136:65138 | itresources | Sleep   | 12886 |       | NULL             |
|   22 | root | 182.150.55.136:66138 | itresources | Sleep   | 14486 |       | NULL             |
|   11 | root | 182.150.55.136:67138 | itresources | Sleep   | 1116 |       | NULL             |
| 206 | root | localhost            | NULL        | Query   |    0 | NULL  | show processlist |
+-----+------+----------------------+-------------+---------+------+-------+------------------+
2 rows in set (0.00 sec)

发现MySQL上有大量的闲置连接。

解决措施1:

MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,可以进行适当的调整小些。

 Mysql> show variables like '%timeout%';

+-----------------------------+----------+
| Variable_name              | Value    |
+-----------------------------+----------+
| connect_timeout            | 10      | 
| delayed_insert_timeout      | 300      | 
| innodb_flush_log_at_timeout | 1        | 
| innodb_lock_wait_timeout    | 50      | 
| innodb_rollback_on_timeout  | OFF      | 
| interactive_timeout        | 28800    | 
| lock_wait_timeout          | 31536000 | 
| net_read_timeout            | 30      | 
| net_write_timeout          | 60      | 
| slave_net_timeout          | 3600    | 
| wait_timeout                | 28800    | 
+-----------------------------+----------+

11 rows in set (0.00 sec)

经查询发现原来mysql没有进行过优化,还是原来的默认值:28800(即8个小时)

编辑 /etc/my.cnf 文件,在mysqld 下 新增 timeout参数,设置为120秒,如下:

【mysqld】
wait_timeout=120
interactive_timeout=120

注意:要同时设置interactive_timeout和wait_timeout才会生效。

最后重启一下mysql 生效 即可!

mysql> show variables like '%timeout%';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| connect_timeout            | 10       |
| delayed_insert_timeout     | 300      |
| innodb_lock_wait_timeout   | 50       |
| innodb_rollback_on_timeout | OFF      |
| interactive_timeout        | 120      |
| lock_wait_timeout          | 31536000 |
| net_read_timeout           | 30       |
| net_write_timeout          | 60       |
| slave_net_timeout          | 3600     |
| wait_timeout               | 120      |
+----------------------------+----------+
10 rows in set (0.00 sec)

解决措施2:

如果上述问题还是不能解决的话,可以使用以下脚本定时杀掉CPU占用率95%以上的进程

#!/bin/sh
# qiyulin to monitor used CPU
record=0
while true;
do
cpu=$(top -b -n1 | grep 'mysql' | head -1 | awk '{print $9}')
pid=$(top -b -n1 | grep 'mysql' | head -1 | awk '{print $1}')
#cpu check
result=${cpu/.*}
if [[ $record == $pid ]];then kill -9 $pid;echo "$pid was killed";fi
if [[ $result > 95 || $result == 100 ]];then let record=${pid};else let record=0;fi
#echo
echo `date +%F" "%H:%M:%S`+" cpu:$result% record pid:$record pid:$pid"
sleep 60
done

使用如下命令启动,可以保证该脚本的持续运行,并且能在CPU.out文件中看到日志记录:

nohup sh ./checkCPU.sh > CPU.out &

3、权限不足问题

​提示错误:Warning: Using a password on the command line interface can be insecure.

​ERROR 1130 (HY000): Host '192.168.3.134' is not allowed to connect to this MySQL server

解决方法:

    ​一、进入mysql数据库命令行

    ​二、输入use mysql;

    ​三、设置root账号密码为123456可以访问用任何ip访问mysql服务器

   输入grant all privileges on *.* to root@"%" identified by "密码";

   这相当于是给IP-xxx.xxx.xxx.xxx赋予了所有的权限,包括远程访问权限,%百分号表示允许任何IP访问数据库。

    四、 然后再输入 flush privileges;

    五、在Linux服务器上重启MySQL

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值