mysql8 开启远程访问
在 MySQL 8 中开启远程访问,需要完成以下几个步骤:
1. 修改 MySQL 配置文件
编辑 MySQL 配置文件(位置可能不同):
bash
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 或
sudo vim /etc/my.cnf
# 或
sudo vim /etc/mysql/my.cnf找到 bind-address 并修改为:
ini
bind-address = 0.0.0.0
# 或者注释掉这行
# bind-address = 127.0.0.12. 创建或修改远程访问用户
登录 MySQL:
bash
mysql -u root -p执行以下 SQL 语句:
方法一:创建新用户并授权
sql
-- 创建用户(推荐)
CREATE USER 'username'@'%' IDENTIFIED BY 'your_password';
-- 授予所有权限(生产环境请按需授权)
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;方法二:修改 root 用户允许远程访问
sql
-- 查看用户信息
SELECT host, user FROM mysql.user;
-- 修改 root 用户的主机权限
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 或者直接更新 host
UPDATE mysql.user SET host='%' WHERE user='root';
-- 刷新权限
FLUSH PRIVILEGES;3. 重启 MySQL 服务
bash
# Ubuntu/Debian
sudo systemctl restart mysql
# CentOS/RHEL
sudo systemctl restart mysqld4. 配置防火墙
Ubuntu (UFW):
bash
sudo ufw allow 3306/tcp
sudo ufw reloadCentOS (firewalld):
bash
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reloadCentOS (iptables):
bash
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# 保存规则(根据系统不同)
sudo service iptables save5. 验证连接
从远程机器测试连接:
bash
mysql -h [服务器IP] -u username -p安全建议
- 使用强密码:避免使用默认或简单密码
- 限制访问IP:尽量指定特定IP而非
%sqlCREATE USER 'username'@'192.168.1.%' IDENTIFIED BY 'password'; - 最小权限原则:按需授权,避免使用
GRANT ALLsqlGRANT SELECT, INSERT, UPDATE ON database.* TO 'username'@'%'; - 使用SSL连接:sql
ALTER USER 'username'@'%' REQUIRE SSL;
常见问题解决
问题1:认证插件问题
sql
-- 修改认证方式为 mysql_native_password
ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';问题2:端口被占用或防火墙
bash
# 检查端口监听
sudo netstat -tlnp | grep 3306
# 临时关闭防火墙测试
sudo systemctl stop firewalld # CentOS
sudo ufw disable # Ubuntu问题3:检查用户权限
sql
-- 查看用户权限
SHOW GRANTS FOR 'username'@'%';
-- 查看用户信息
SELECT host, user, plugin FROM mysql.user;完成以上步骤后,应该可以成功从远程连接 MySQL 8 数据库。