阿里云ECS部署MariaDB,配置问题及排除思路总结,阿里mariadb
因小程序需要部署服务器端进行联调,所以在阿里云ECS 部署了MariaDB,部署过程基本一步一个坑~踩出来的
故简单复盘,遇到问题 ,一定要定位到原因再 再进行有序的排查~
不禁让我想起去年阿里面试 问我服务器连接不上问题排查的思路,现在的思路比当时又上了一层楼吧~
登录:
本地连接:mysql -u root -p
本地远程连接:mysql -h yourip -u user -p
问题:
1.网络监测
只要可以ping通,说明网络没问题
2.端口监测
查看端口监控状态 |
netstat -talnp |
若是0.0.0.0:3306 说明已对所有地址监听,若没有可在my.conf里配置
3.防火墙监测
查看防火墙状态 |
iptables --list |
4.mysql配置文件检查
- 检查my.cnf的配置,bind-address=addr可以配置绑定ip地址。
- 不配置或者IP配置为0.0.0.0,表示监听所有客户端连接。
- #ps -aux | grep mysql 查看进程ID是3340
- #ll /proc/3340 查看进程程序情况,找配置文件或者#which mysql 找程序路径
5.mysql访问权限
- 进入mysql数据库
- $mysql -u root -p
- >use mysql;
- >select host,user from user;
- MySQL建用户的时候会指定一个host,默认是127.0.0.1/localhost只能本机访问;
- 其它机器用这个用户帐号访问会提示没有权限,host改为%,表示允许所有机器访问。
6.阿里云ECS安全组中设置 配置规则
头一天晚上本来早早部署好准备测试,搞到睡觉都没弄好~
睡了一觉突然想起来是不是跟阿里云什么配置有关,果然。。。
增加入方向 MariaDB的3306端口的监听权限~谢谢啊,让我又精通了mysql配置~
远程连接问题参考:
https://www.linuxidc.com/Linux/2017-10/148068.htm
https://www.2cto.com/database/201401/269578.html
https://jingyan.baidu.com/article/95c9d20dac9040ec4f75617a.html
https://blog.csdn.net/qq_26816591/article/details/52462740 |
增加本地防火墙策略 |
防火墙:
centos从7开始默认用的是firewalld,这个是基于iptables的,虽然有iptables的核心,但是iptables的服务是没安装的。所以你只要停止firewalld服务即可:
systemctl stop firewalld.service && systemctl disable firewalld.service
systemctl start firewalld.service && systemctl enable firewalld.service
centos7没有iptables
1 关闭防火墙-----service iptables stop
2 启动防火墙-----service iptables start
3 重启防火墙-----service iptables restart
4 查看防火墙状态--service iptables status
5 永久关闭防火墙--chkconfig iptables off
6 永久关闭后启用--chkconfig iptables on
MariaDb的安装
yum install mariadb mariadb-server #询问是否要安装,输入Y即可自动安装
systemctl start mariadb.service #启动MariaDB
systemctl stop mariadb.service #停止MariaDB
systemctl restart mariadb.service #重启MariaDB
systemctl enable mariadb.service #设置开机自动启动
systemctl disenable mariadb.service #设置开机自启关闭
创建用户 |
|
CREATE USER 'yunqi'@'%' IDENTIFIED BY 'yunqi';
MariaDB [(none)]> CREATE USER 'yunqi'@'IP.%' IDENTIFIED BY 'yangfan'; |
云栖上线后,通过此方式建立数据库授权 |
MariaDB [(none)]> CREATE USER 'yunqi'@'%.yunqilive.cn' IDENTIFIED BY 'yunqi'; |
云栖上线后,通过此方式建立数据库授权 |
MariaDB [(none)]> CREATE USER 'yunqi'@'%' IDENTIFIED BY 'yunqi&'; |
在测试阶段使用 通配符 来授权所有用户 |
设置密码
UPDATE mysql.user SET password = PASSWORD('yunqi&maria') WHERE USER = 'yunqi';
set password for 'yunqi'@'%' =password('yunqi&');
用户管理 |
https://www.cnblogs.com/f-ck-need-u/p/8994220.html |
用户授权(其中 with grant option 表示拥有该权限后的用户可以给别的用户授予自身所拥有的权限。)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.222.1' IDENTIFIED BY 'password' WITH GRANT OPTION;
grant all on yunqi to yunqi identified by 'password';
grant all on yunqi.* TO yunqi@'%' IDENTIFIED BY 'password';
//取消权限
revoke all on *.* from 'root'@'%';
delete from user where user='user' and host='%';,host from user;
//刷新并生效权限
flush privileges;
此时发现问题:local不能登录yunqi用户,报错:ERROR 1045 (28000): Access denied for user 'yunqi'@'localhost' (using password: YES) |
解决方式参考:https://blog.csdn.net/u010098331/article/details/50730309 |
PS:
| GRANT USAGE ON *.* TO 'yunqi'@'%' IDENTIFIED BY PASSWORD '*B717581CBB1306AEA99BAD57CB004F51B4F5BDDC' |
| GRANT ALL PRIVILEGES ON `yunqi`.* TO 'yunqi'@'%' |
| GRANT ALL PRIVILEGES ON `yunqi`.`yunqi` TO 'yunqi'@'%'
注意:all不能和*.*一起使用的,不然就报错了。
find 目录 -name “”
grep -rn "bind-address" *