软件设计:记一次Linux修改MySQL配置不生效的问题

    作者:小二十七更新于: 2020-04-15 14:57:12

      Linux操作系统是基于UNIX操作系统发展而来的一种克隆系统,它诞生于1991年的[Linux桌面]10月5日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并通过全世界各地计算机爱好者的共同努力,已成为今天世界上使用最多的一种UNIX类操作系统,并且使用人数还在迅猛增长。

    软件设计:记一次Linux修改MySQL配置不生效的问题_ubuntu_Linux_MySQL_课课家

      背景

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

      过程

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

      /etc/my.cnf//找到配置文件

      port=3306//修改内容

      sudoservicemysqlrestart//重启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//只允许本机访问

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

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

      mysql--help|grepmy.cnf

      mysql:[Warning]World-writableconfigfile'/etc/mysql/mysql.conf.d/mysqld.cnf'

      isignored.

      orderofpreference,my.cnf,$MYSQL_TCP_PORT,

      /etc/my.cnf/etc/mysql/my.cnf~/.my.cnf

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

      sudochmod644/etc/mysql/mysql.conf.d/mysqld.cnf

      mysql--help|grepmy.cnf

      orderofpreference,my.cnf,$MYSQL_TCP_PORT,

      /etc/my.cnf/etc/mysql/my.cnf~/.my.cnf

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

      总结

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

      1遇到问题首先应该看官网的最新文档

      2查看资料时间,网上很多资料时间太长,可能会误导你

      3认真查看警告信息,熟练掌握排查工具和命令

      4基础知识很重要,越是深的问题越考验程序员的内功

      Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。

课课家教育

未登录