1、前言
因为要ip直接访问mysql,故去修改bind-address参数,按照mysql配置文件查找顺序是:/etc/my.cnf 、/etc/mysql/my.cnf 、~/.my.cnf ,服务器上没有 /etc/my.cnf 文件,故去修改 /etc/mysql/my.cnf文件,但是一直不生效。
2、环境
mysql版本:8.0.34-0ubuntu0.20.04.1 (select version();sql查询)
系统:ubuntu 20.04
3、确定原因
3.1、确定配置文件路径
使用命令:
mysql --help|grep 'my.cnf'
输出:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
由于没有找到/etc/my.cnf 文件,故确定首先找到的配置文件为/etc/mysql/my.cnf
3.2、尝试寻找文件不生效问题
3.2.1、配置文件
初始配置文件配置:
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
增加启动参数后:
[mysqld]
port=33062
bind-address=0.0.0.0
mysqlx-bind-address = 0.0.0.0
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
修改启动端口和绑定地址,发现端口修改生效
,但是绑定地址不生效
,确定配置文件没问题
看了下mysql官方文档,我都以为我拼写错误了,修改了格式,依然无效。
原文:bind_address,后知后觉,配置文件写法是bind-address,这里写的bind_address是数据库的参数名
3.2.2、验证当前绑定地址
-
查询数据库的bind_address参数
SELECT VARIABLE_NAME, VARIABLE_VALUE FROM performance_schema.global_variables
WHERE VARIABLE_NAME = 'bind_address';
看值是否为127.0.0.1
-
查看系统端口监听:
netstat -anp | grep 3306
看是否出现127.0.0.1:3306
-
查看是否能指定ip登录上:
mysql -u root -proot -h 你的ip -P 33062
看是否能登录上,不能登录的,先把用户管理里面用户的host改为%,表示为全部ip都能访问这个用户,这里测试环境,使用了root测试,正式环境,最好不要给root用户随便ip都能访问
访问不了的报错:
ERROR 2003 (HY000): Can't connect to MySQL server on '175.27.191.203:33062' (111)
3.2.3、查看是否服务启动参数问题
-
直接查看进程
ps -ef|grep "mysql"
输出:
mysql 2591855 1 0 10:59 ? 00:00:01 /usr/sbin/mysqld
root 2594993 2566566 0 11:12 pts/0 00:00:00 grep --color=auto mysql
可以看到启动没有带任何参数
-
查看mysql.server有没异常
mysql是直接使用apt命令安装的,所以默认有server命令systemctl status mysql
输出:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2023-09-10 10:59:52 CST; 14min ago
Process: 2591830 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 2591855 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 2272)
Memory: 372.3M
CGroup: /system.slice/mysql.service
└─2591855 /usr/sbin/mysqld
Sep 10 10:59:51 VM-0-15-ubuntu systemd[1]: Starting MySQL Community Server...
Sep 10 10:59:52 VM-0-15-ubuntu systemd[1]: Started MySQL Community Server.
可以看到loaded行的service文件位置,查看后,没有什么异常。
4、解决问题
最后解决肯定还是百度找到类似的问题,就是看到有一篇博客说找到mysqld.cnf文件,这就是使用find命令,我之前也尝试过在那几个配置文件手动找,没找到,使用find命令:
find / -name 'mysqld.cnf' -ls
输出:
782051 4 -rw-r--r-- 1 root root 2220 Sep 10 10:59 /etc/mysql/mysql.conf.d/mysqld.cnf
原来有这个文件,故进查看配置文件,里面有完整的配置文件模板,是要找的文件,修改配置项bind-addres、mysqlx-bind-address为0.0.0.0。
接着使用
service mysql restart
重启mysql,奇迹发生了。又是后知后觉,为什么前面port配置生效,但是bind-addres配置不生效,因为这个模板文件里面port配置项是注释的,bind-address是默认的,我写的配置,被后续导入的文件夹里面的配置覆盖了,导致不成功。
知道是覆盖原因,那么,我们恢复一下之前修改的mysqld.cnf文件,将最先的配置,稍微改下顺序,那是不是也行。
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
port=33062
bind-address=0.0.0.0
mysqlx-bind-address = 0.0.0.0
重启mysql,尝试使用ip登录mysql,成功了。
成功躺完一次坑QAQ
参考博客:
记一次Linux修改MySQL配置不生效的问题