记一次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 的安全规则导致修改配置不生效,当然这条规则,大部分情况下我们是不知道的(如果没有完整阅读官网文档的话),在经过这次问题,我大概有如下几点总结,帮助大家在排查问题上少走弯路,尽快找到真实的问题:
- 遇到问题首先应该看官网的最新文档
- 查看资料时间,网上很多资料时间太长,可能会误导你
- 认真查看警告信息,熟练掌握排查工具和命令
- 基础知识很重要,越是深的问题越考验程序员的内功
记一次Linux修改MySQL配置不生效的问题的更多相关文章
- SuSE Linux修改网卡配置
http://blog.chinaunix.net/uid-20765159-id-1850854.html SuSE Linux修改网卡配置 2010 SuSE linux ...
- 重装ArchLinux后修改GRUB配置不生效问题的解决
重装ArchLinux后修改GRUB配置不生效问题的解决 mount指令看一下挂载,或者vim /etc/fstab看一下有没有/boot,看看fstab是不是没写进去.... 我特喵昨天重装完Arc ...
- linux修改mysql的默认端口
本文是基于centos7的环境进行编写,如果是其他linux系统命令可能不一样,根据 1.首先我们查看mysql的默认端口 我们登录mysql到mysql查看mysql使用的端口 show globa ...
- 修改mysql配置中my.conf中max_allowed_packet变量
mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置 show VARIABLES ...
- Centos 7 中yum安装Mysql和修改mysql配置
一. mysql安装 1.安装MySQL官方的Yum Repository [root@ecs-7bec-0002 mysql]# wget -i -c http://dev.mysql.com/ge ...
- 中标麒麟(linux)mysql配置记录
刚装好mysql时,使用正常,后来再次使用时,连接不成功.(虚拟机中) 配置网络有问题, 1.我将ifcfg-*的两个文件备份后删除了. 2.点击右下角的小电脑,重新新建一个网络连接.把网络接入主机的 ...
- linux修改mysql密码
以root为列. 查看文件安装路径whereis mysql 查询运行文件所在路径(文件夹地址) which mysql /usr/bin/mysqld_safe: line 178: 5930 ...
- thinkphp无法安装提示修改mysql配置
在安装以thinkphp为框架的系统时数据库连接错误,提示修改sql-mode或sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION.那我们就顺着提示 ...
- 【Linux】MySQL配置
安装环境/工具 Linux( centOS 版) MySQL(MySQL-5.6.28-1.el7.x86_64.rpm-bundle.tar版) MySQL的目录结构 安装已经说过了,这里不再说了 ...
随机推荐
- java将复数字符串虚部实部分离,并实现加减运算
java字符串构造复数 将字符串分解为复数的实部和虚部 定义一个复数类,数据成员有实部和虚部,根据传参不同构造方法重载,并定义复数的加减方法,以及toString方法.有难度的便是用字符串构造复数了, ...
- Junit简单的案例
Calculator: public class Calculator { public double add(double number1, double number2) { return num ...
- Thread-Per-Message设计模式
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; public class Te ...
- MyBatis从入门到精通:update用法、delete用法
update用法: 1.接口类中添加的方法: int updateById(SysUser sysUser); 2.映射文件中添加的代码: <update id="updateById ...
- 最全面阐述WebDataBinder理解Spring的数据绑定
每篇一句 不要总问低级的问题,这样的人要么懒,不愿意上网搜索,要么笨,一点独立思考的能力都没有 相关阅读 [小家Spring]聊聊Spring中的数据绑定 --- DataBinder本尊(源码分析) ...
- linux初学者-系统日志(二)
linux初学者-系统日志(二) 先前在(一)中介绍到在不同主机间日志同步的方法,在一台主机上可以看到另一台主机的日志.这里会介绍系统日志方面的一些其他内容. 1.日志的采集格式 在日志的采集中,由图 ...
- Linux小火车和流星雨
一.流星雨 [root@localhost ~]# wget https://jaist.dl.sourceforge.net/project/cmatrix/cmatrix/1.2a/cmatrix ...
- 记一次远程CMD开发过程
开发初衷: 有些同学电脑老是要出问题,但又不是什么大问题,通常几句cmd就能搞定.之前解决方案有2:一是远程演示,我口述别人操作:一是我写个cmd脚本,但毕竟不在本机不好调试.(吐槽一下常用的远程控制 ...
- 初探java流操作
在处理集合时,我们通常会迭代遍历它的元素,并从每个元素上执行某项操作.例如,假设我们想要对某本书中的所有长单词进行计数.首先我们要将所有单词放入一个列表中: String contents = new ...
- Flutter学习笔记(12)--列表组件
如需转载,请注明出处:Flutter学习笔记(12)--列表组件 在日常的产品项目需求中,经常会有列表展示类的需求,在Android中常用的做法是收集数据源,然后创建列表适配器Adapter,将数据源 ...