为了安全考虑MySQL默认不开启远程登录。在生产环境中,MySQL通常只需要在本地主机上运行,而不需要允许远程主机连接。如果启用了远程登录,则存在潜在的安全风险。黑客或恶意用户可以利用未经授权的登录尝试来访问数据库,从而威胁数据的安全性。因此,为了保护MySQL服务器免受未经授权的访问和攻击,MySQL默认不允许远程登录,需要用户手动进行配置和授权。
一、登录并配置mysql
- 登录容器
docker exec -it 53e85183fdc0 /bin/bash
- 编辑文件
vim /etc/mysql/conf.d/docker.cnf
- 增加 skip-grant-tables
skip-grant-tables
- 重启容器
docker-compose -f docker-compose.yml restart
- mysql8新增用户,已不支持GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’
create user 'admin'@'%' identified by '数据库密码';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';
flush privileges;
ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '数据库密码';
flush privileges;
二、解决group by问题
java.sql.SQLSyntaxErrorException: Expression #14 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'yxkt.provinceDistrict.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
- 修改mysql配置文件 /etc/mysql/conf.d/my.cnf
vim /etc/mysql/conf.d/my.cnf
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- 重启mysql
docker restart [mysql容器名称或ID]
开启MySQL远程访问前,需要注意以下几点:
-
确认MySQL已经正确安装和配置,且能够正常运行。
-
确认MySQL所在的主机已经开放了MySQL的端口号,一般默认是3306端口。
-
配置MySQL的远程登录用户,需要创建一个允许远程访问MySQL的用户,并且为该用户授权相应的数据库访问权限。
-
防火墙设置,需要开启服务器3306端口防火墙规则。
-
修改MySQL配置文件my.cnf,找到bind-address选项,将其设置为0.0.0.0或者注释掉该选项。
-
确认远程主机的IP地址和MySQL服务器能够互相连通。
-
确认远程主机的MySQL客户端已经正确安装,并且能够正确连接MySQL服务器。
-
防止被攻击,建议只允许指定IP地址访问MySQL。