解决远程连接mysql很慢的方法
开发某应用系统连接公司的测试服务器的mysql数据库连接打开的很慢,但是连接本地的mysql数据库很快。但是测试站点打开速度正常,ping访问正常。
解决方法:
找到mysql配置文件, 增加配置参数:
1 | [mysqld] |
注意该配置项是加到mysqld
下的,该配置的作用是避免mysql对外部的连接进行DNS解析,若使用此设置,那么远程主机连接时只能使用ip,而不能使用域名(但是我这里还是可以使用域名,可能是因为公司内的这个域名是内部连接)
Linux下配置文件一般在
/etc/my.cnf
或者/etc/mysql/my.cnf
, Windows下配置文件是mysql安装目录下的my.ini
文件修改配置文件后需要重启mysql
1 | [mysqld] |
无法启动Mysql
报错截图:
解决:
这里是根据最后一点日志中的报错 mysqld: Can't create/write to file '/tmp/ibo4T3D4' (Errcode: 13 - Permission denied)
解决的。
top查看mysql的用户是什么?
1
root@ip:/# top | grep mysql
修改mysql的临时目录(这里可以不修改,但是不修改直接给
/tmp
赋权限我感觉不安全)找到mysql的配置文件,我的位置在
/etc/mysql/my.cnf
1
2
3
4vim /etc/mysql/my.cnf
# 修改tmpdir
tmpdir = /tmpdir/mysql
给新的mysql临时目录赋予权限
1
2
3
4# 设置目录/tmpdir/mysql的文件所有者和文件关联组
chown -R mysql:mysql /tmpdir/mysql
# 下面的是以防万一,给所有用户和组赋予所有权限,可以不加
chmod -R 777 /tmpdir/mysqlmysql 是上面top查看到的USER名称, 这里因为是临时文件,我感觉没有必要区分用户,直接就给了所有权限
重启mysql
1
2
3
4service mysql stop
service mysql start
# 或者
service mysql restart如果重启还是失败,直接给
/tmp
777 的权限吧,暴力直接,但是不清楚会不会有其他后果。我这里就遇到过这个问题,就只能设置成/tmp
目录才不会报错,原因不明,等待大佬给我答疑解惑。
修改mysql的缓存目录
因为公司的海外服务器经常丢包,会较为频繁更换公网IP,但是发现公网IP更换后 /tmp 目录的权限会重置(成drwx——T)。但是mysql的缓存目录需要权限777, 所以希望修改mysql的缓存目录。
tmpdir = /tmp => /tmpdir
重启mysql ( service mysql restart
), 报错:Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
日志显示:
文件夹权限:
未解决
unblock with ‘mysqladmin flush-hosts’”
这个错误信息表明 MySQL 服务器因为多次连接错误而阻止了来自 XXX.XX.XX.XX
主机的连接请求。为了解除阻止,你需要在 MySQL 服务器上执行 mysqladmin flush-hosts
命令。
解决步骤
登录到 MySQL 服务器: 你需要以具有足够权限的用户(如
root
)登录到 MySQL 服务器。1
mysql -u root -p
执行
flush-hosts
命令: 在 MySQL 命令行中执行以下命令来刷新主机缓存,解除阻止。1
FLUSH HOSTS;
检查和调整连接错误阈值: 为了避免将来再次发生类似问题,你可以检查并调整 MySQL 的连接错误阈值。你可以在 MySQL 配置文件(通常是
my.cnf
或my.ini
)中找到并修改以下参数:1
max_connect_errors = 100 # 默认值通常是 100
你可以根据需要增加这个值,例如:
1
max_connect_errors = 1000
重启 MySQL 服务: 修改配置文件后,重启 MySQL 服务以使更改生效。
1
sudo systemctl restart mysql
mysql 里面执行下面语句也可以查看和设置 max_connect_errors,但是重启后设置会失效。另外
SET GLOBAL
需要权限较高,通常需要SUPER
权限或SYSTEM_VARIABLES_ADMIN
权限。
1
2 SHOW VARIABLES LIKE 'max_connect_errors';
SET GLOBAL max_connect_errors = 1000;
本文链接: http://www.ionluo.cn/blog/posts/c599ad35.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!