Skip to content

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.1

2. 创建或修改远程访问用户

登录 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 mysqld

4. 配置防火墙

Ubuntu (UFW):

bash
sudo ufw allow 3306/tcp
sudo ufw reload

CentOS (firewalld):

bash
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

CentOS (iptables):

bash
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# 保存规则(根据系统不同)
sudo service iptables save

5. 验证连接

从远程机器测试连接:

bash
mysql -h [服务器IP] -u username -p

安全建议

  1. 使用强密码:避免使用默认或简单密码
  2. 限制访问IP:尽量指定特定IP而非 %
    sql
    CREATE USER 'username'@'192.168.1.%' IDENTIFIED BY 'password';
  3. 最小权限原则:按需授权,避免使用 GRANT ALL
    sql
    GRANT SELECT, INSERT, UPDATE ON database.* TO 'username'@'%';
  4. 使用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 数据库。

耕书屋