Ubuntu 中安装和配置 MySQL 远程连接

374 阅读4分钟

Ubuntu 中安装和配置 MySQL 远程连接

(适用于 Ubuntu 18.04 及更高版本,MySQL 8.0 及更高版本)

一、 安装 MySQL

  1. 更新软件包列表:

    sudo apt update
    
  2. 安装 MySQL 服务器:

    sudo apt install mysql-server
    
    • 安装过程中可能需要设置 root 密码,请务必记住。
    • MySQL 8.0+ 默认使用 auth_socket 插件,可通过 sudo mysql 以 root 身份连接,无需密码。
  3. 启动并检查 MySQL 服务:

    sudo systemctl status mysql  # 检查状态
    sudo systemctl start mysql   # 启动服务
    
  4. (可选但强烈推荐) 运行安全脚本:

    sudo mysql_secure_installation
    
    • 设置 root 密码 (如果安装时未设置)。
    • 删除匿名用户。
    • 禁止 root 远程登录 (稍后会配置远程访问)。
    • 删除测试数据库。
    • 重新加载权限表。
  5. (可选) 安装 MySQL 客户端:

    sudo apt install mysql-client
    
  6. 连接到 MySQL 服务器:

    • auth_socket 插件 (MySQL 8.0+): sudo mysql
    • 设置了 root 密码: mysql -u root -p
  7. 常用 MySQL 命令:

    • SHOW DATABASES;
    • CREATE DATABASE 数据库名;
    • USE 数据库名;
    • SHOW TABLES;
    • EXIT;\q

二、 开启 MySQL 远程连接

安全提示:

  • 开启远程连接会增加安全风险。
  • 不要直接将 root 用户暴露给远程连接,创建专用用户并限制权限。
  • 使用防火墙限制对 MySQL 端口 (3306) 的访问。
  1. 修改 MySQL 配置文件 (允许远程连接):

    • 打开配置文件 (如 /etc/mysql/mysql.conf.d/mysqld.cnf):

      sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
      
    • 找到 bind-address 指令。

    • 修改 bind-address:

      • 允许所有 IP (不推荐): bind-address = 0.0.0.0 或注释掉该行。
      • 允许特定 IP (更安全): bind-address = <你的服务器IP> (内网或公网 IP)。
    • 保存并关闭配置文件。

  2. 授权远程用户访问 MySQL 数据库:

    • 连接到 MySQL: sudo mysql -u root -psudo mysql

    • 创建新用户 (推荐) 或修改现有用户:

      -- 创建新用户 (推荐)
      CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password';
      GRANT ALL PRIVILEGES ON your_database.* TO 'remote_user'@'%';
      FLUSH PRIVILEGES;
      
      -- 修改现有用户 (如 root,不推荐)
      -- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_root_password'; -- 错误语法,不适用所有版本
      -- FLUSH PRIVILEGES;
      
    • 退出 MySQL 命令行。

  3. 配置防火墙 (如果需要):

    • 检查防火墙状态: sudo ufw status

    • 允许 MySQL 端口 (3306):

      • 允许所有 IP (不推荐): sudo ufw allow 3306/tcp
      • 允许特定 IP: sudo ufw allow from <IP地址> to any port 3306 proto tcp
    • 重新加载防火墙规则: sudo ufw reload

  4. 重启 MySQL 服务:

    sudo systemctl restart mysql
    
  5. 测试远程连接:

    mysql -h <服务器IP> -u remote_user -p
    

三、 解决 GRANT 命令错误

  • 错误信息: ERROR 1064 (42000): ... near 'IDENTIFIED BY ...'
  • 原因: IDENTIFIED BYGRANT 语句中的用法可能不正确 (尤其是在设置密码方面)。
  • 解决: 分开操作密码设置和权限授予。
    • 设置/修改密码: ALTER USER 'user'@'host' IDENTIFIED BY 'password';
    • 授予权限: GRANT ALL PRIVILEGES ON *.* TO 'user'@'host';

四、 解决 ALTER USER 命令错误

  • 错误信息: ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'
  • 原因: MySQL 中没有定义用户 'root'@'%'
  • 解决:
    1. 确认用户是否存在: SELECT User, Host FROM mysql.user WHERE User = 'root';
    2. 如果不存在,创建用户 (不推荐使用 root,建议创建新用户):
      CREATE USER 'remote_admin'@'%' IDENTIFIED BY 'RemotePassword123';
      GRANT ALL PRIVILEGES ON *.* TO 'remote_admin'@'%' WITH GRANT OPTION;
      FLUSH PRIVILEGES;
      
    3. 也可以尝试修改已有的root用户,但是不推荐。

五、Ubuntu 系统 MySQL 管理命令 (补充)

  • 启动 MySQL 服务:

    sudo systemctl start mysql
    
  • 停止 MySQL 服务:

    sudo systemctl stop mysql
    
  • 重启 MySQL 服务:

    sudo systemctl restart mysql
    
  • 检查 MySQL 服务状态:

    sudo systemctl status mysql
    
  • 设置 MySQL 开机自启:

    sudo systemctl enable mysql
    
  • 禁止 MySQL 开机自启:

    sudo systemctl disable mysql
    
  • 完全卸载 MySQL (包括数据文件):

    sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
    sudo rm -rf /etc/mysql /var/lib/mysql
    sudo apt autoremove
    sudo apt autoclean
    
    • apt purge: 卸载软件包并删除配置文件。
    • rm -rf: 强制递归删除目录 (请务必谨慎使用,确保目录正确)。
    • apt autoremove: 移除不再需要的依赖包。
    • apt autoclean: 清理已下载的软件包缓存。

六、 最佳实践

  • 创建专门用于远程连接的用户,而不是使用 root
  • 只授予远程用户必要的权限。
  • 限制远程连接的主机范围。
  • 考虑使用 SSH 隧道或 VPN。
  • 定期备份数据库。
  • 及时更新 MySQL 到最新版本,以获取安全补丁和性能改进。