一次Linux修改MySQL配置不生效的问题解决

背景

自己手上有一个项目服务用的是AWS EC2,最近从安全性和性能方面考虑,最近打算把腾讯云的MySQL数据库迁移到AWS RDS上,因为AWS的出口规则和安全组等问题,我需要修改默认的3306端口和Bind Address限制特定的IP访问,我在Stackoverflow上查询了如何修改,但是网上的资料大多比较老旧,不符合目前主流的MySQL版本(使用的MySQL 5.7.27,操作系统使用Ubuntu 18.04.1 LTS)

过程

在 Stackoverflow上的高票回答很简单,修改只需要三步就可以完成

/etc/my.cnf // 找到配置文件
port = 3306 // 修改内容
sudo service mysql restart // 重启MySQL

但实时并没有那么简单,以上答案可能对旧版本管用,但是新版本你在/etc/my.cnf下根本找不到任何东西,文件都不存在

然后我去查阅的官方文档,找到的配置文件原来在目录:/etc/mysql/my.cnf 下,但是不要觉得找到配置文件就万事大吉,当你打开文件你会看到画风变了,因为配置文件里面没有内容,而是引用了另外2个配置文件夹,/etc/mysql/my.cnf 具体内容是这样的

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

可以,至少有线索了,顺着路径去找,在2个目录下每个文件都看了下,最后看到 mysql.conf.d/mysqld.cnf 似乎是我们要找的文件(官方文档也验证了这一点),打开可以看到我们需要修改的文件属性

[mysqld]
prot = 3306
bind-address = 127.0.0.1 // 只允许本机访问

改成我需要的的配置参数后,我以为事情到这里就结束了,当我使用 sudo service mysql restart 重启服务的时候,我发现我的内网机器还是访问不了,我使用 netstat -ntlp 查看 Local Address,Foregin Address,发现我修改的配置后的配置没有生效,我陷入的深深的自我怀疑当中,仿佛线索在这里中断了

然后,有网友说提到说有可能是文件权限问题,如果文件权限过大(全局可写),MySQL 会出现安全考虑不会读取该配置文件,而且读取自身的配置副本文件,我执行命令,如看如下警告

mysql --help | grep my.cnf
mysql: [Warning] World-writable config file '/etc/mysql/mysql.conf.d/mysqld.cnf'
is ignored.
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

上面是指文件由于全局可写存在风险,被MySQL忽略,并且列出MySQL读取配置文件的顺序,这里是可以看到MySQL是存在多个my.cnf配置文件,有些是全局配置,有些是局部配置,找到线索后,处理起来就简单很多了,我们更改文件权限,再看看 mysql --help 就发现警告已经没有了,具体命令如下:

sudo chmod 644 /etc/mysql/mysql.conf.d/mysqld.cnf
mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

然后再执行 sudo service mysql restart,然后再看看 Local Address 和 Foreign Address 已经变成我们在my.cnf配置的内容,但是修改后的配置已经成功生效,确认是文件全局可读的安全问题导致

总结

最后是关于 MySQL 的安全规则导致修改配置不生效,当然这条规则,大部分情况下我们是不知道的(如果没有完整阅读官网文档的话),在经过这次问题,我大概有如下几点总结,帮助大家在排查问题上少走弯路,尽快找到真实的问题:

  1. 遇到问题首先应该看官网的最新文档
  2. 查看资料时间,网上很多资料时间太长,可能会误导你
  3. 认真查看警告信息,熟练掌握排查工具和命令
  4. 基础知识很重要,越是深的问题越考验程序员的内功

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • 最全的mysql 5.7.13 安装配置方法图文教程(linux) 强烈推荐!

    linux环境Mysql 5.7.13安装教程分享给大家,供大家参考,具体内容如下 1系统约定 安装文件下载目录:/data/software Mysql目录安装位置:/usr/local/mysql 数据库保存位置:/data/mysql 日志保存位置:/data/log/mysql 2下载mysql 在官网:http://dev.mysql.com/downloads/mysql/ 中,选择以下版本的mysql下载: 执行如下命名: #mkdir /data/software #cd /da

  • linux下apache、mysql、php安装配置详细笔记

    软件准备: mysql-5.0.56.tar.gzhttp://dev.mysql.com/get/Downloads/ httpd-2.2.12.tar.gzhttp://labs.xiaonei.com/apache-mirror/httpd/ php-5.3.0.tar.gzhttp://cn.php.net/get/php-5.3.0.tar.gz/from/this/mirror 一.安装MYSQL 复制代码 代码如下: groupadd mysql                  

  • Linux下MySQL安装配置 MySQL配置参数详解

    一.下载编译安装 #cd /usr/local/src/ #wget http://mysql.byungsoo.net/Downloads/MySQL-5.1/mysql-5.1.38.tar.gz #tar –xzvf mysql-5.1.38.tar.gz ../software/ #./configure --prefix=/usr/local/mysql //MySQL安装目录 --datadir=/mydata //数据库存放目录 --with-charset=utf8 //使用UT

  • linux mysql5.6版本的安装配置过程

    从今年3月份开始mysql官网开始发布相关的5.6系列的各个版本,对于mysql5.6系列的版本对一起的版本进行了全局性的细节性加强:个人感觉,以下是在虚拟机中配置的mysql5.6.10源码安装的过程分享记录下: [root@mysql5 ~]# groupadd mysql [root@mysql5 ~]# useradd -r -g mysql mysql [root@mysql5 ~]# ls anaconda-ks.cfg install.log install.log.syslog

  • mysql 5.7.13 安装配置方法图文教程(linux)

    linux环境Mysql 5.7.13安装教程分享给大家,供大家参考,具体内容如下 1系统约定 安装文件下载目录:/data/software Mysql目录安装位置:/usr/local/mysql 数据库保存位置:/data/mysql 日志保存位置:/data/log/mysql 2下载mysql 在官网:http://dev.mysql.com/downloads/mysql/ 中,选择以下版本的mysql下载: 执行如下命名: #mkdir /data/software #cd /da

  • CentOS Linux 下配置Apache2+PHP5+MySQL5+GD库的方法

    先安装MYSQL 服务器 解压MySQL,把所有文件复制到/usr/local/mysql [root@Bleach usr]# groupadd mysql [root@Bleach usr]# useradd -g mysql mysql [root@Bleach mysql]# cd /usr/local/mysql [root@Bleach mysql]# scrīpts/mysql_install_db --user=mysql  [root@Bleach mysql]# chown 

  • linux下指定mysql数据库服务器主从同步的配置实例

    一. 概念: ① 数据库同步  (主从同步 --- 主数据库写的同时 往从服务器写数据)② 数据库同步  (主主同步 --- 两台数据库服务器互相写数据) 二. 举例数据库服务器(A) 主数据库   IP:192.168.1.134数据库服务器(B) 主数据库   IP:192.168.1.138两台服务器同步的用户名为: bravedu    密码: brave123 一.主数据库操作设置(A):① 创建同步用户名 允许连接的 用户IP地址  (非本机IP) 复制代码 代码如下: grant

  • 查看linux服务器上mysql配置文件路径的方法

    在类NUIX的系统中,配置文件的位置一般在/etc/my.cnf 或者 /etc/MySQL/my.cnf 我们见过有些人尝试修改配置文件但是不生效,因为他们修改的并不是服务器读取的文件.例如Debian下,/etc/mysql/my.cnf才是MySQL读取的配置文件,而不是/etc/my.cnf. 如果不知道当前使用的配置文件路径,可以尝试下面的操作: 对于服务器上只有一个MySQL实例的典型安装,这个命令很有用 以上就是小编为大家带来的查看linux服务器上mysql配置文件路径的方法全部

  • linux下安装apache与php;Apache+PHP+MySQL配置攻略

    1.apache  在如下页面下载apache的for Linux 的源码包   http://www.apache.org/dist/httpd/;  存至/home/xx目录,xx是自建文件夹,我建了一个wj的文件夹. 命令列表:   cd /home/wj  tar -zxvf httpd-2.0.54.tar.gz mv httpd-2.0.54 apache  cd apache  ./configure --prefix=/usr/local/apache2 --enable-mod

  • Linux虚拟机下mysql 5.7安装配置方法图文教程

    记录一下Linux虚拟机下MySQL安装配置方法 一. 下载mysql5.7 http://mirrors.sohu.com/mysql/MySQL-5.7/ Linux下载: 输入命令:wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz 二.建立用户,以及mysql的目录 1.建立一个mysql的组 输入命令: groupadd mysql 2.建立mysql用户,并放到m

随机推荐