📋 前置条件检查
1. 确认 MySQL 已安装并运行
bash
# 检查 MySQL 服务状态
service mysqld status
# 或
systemctl status mysqld
# 检查 MySQL 版本
mysql --version
2. 确认网络连通性
bash
# 获取服务器 IP
ip addr show
# 或
hostname -I
# 获取公网 IP(如果需要从外网连接)
curl ifconfig.me
🔧 MySQL 服务器端配置(必须)
步骤1:创建远程连接用户
bash
# 登录 MySQL
mysql -u root -p
# 执行 SQL 创建用户(推荐方式)
CREATE USER 'dbeaver_user'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'dbeaver_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
# 或使用单行命令
mysql -u root -p -e "CREATE USER 'dbeaver_user'@'%' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'dbeaver_user'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;"
步骤2:修改 MySQL 配置允许远程连接
bash
# 编辑 MySQL 配置文件
vi /etc/my.cnf
# 在 [mysqld] 部分添加或修改:
[mysqld]
bind-address = 0.0.0.0 # 允许所有 IP 连接
# skip-networking = 0 # 确保这行被注释掉
# 保存后重启 MySQL
service mysqld restart
# 或
systemctl restart mysqld
步骤3:配置防火墙
bash
# CentOS 7+ 使用 firewalld
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --list-ports | grep 3306
# CentOS 6 使用 iptables
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
service iptables restart
# 临时关闭防火墙测试(仅测试用)
systemctl stop firewalld
# 或
service iptables stop
步骤4:验证配置
bash
# 检查端口监听
netstat -tlnp | grep :3306
# 正确输出应该包含:0.0.0.0:3306
# 本地测试新用户
mysql -u dbeaver_user -p'StrongPassword123!' -h 127.0.0.1 -e "SELECT 'Connection OK' as status;"
💻 DBeaver 客户端配置
方法1:直接连接(最简单)
连接参数:
plain
主机:服务器IP地址(公网或内网)
端口:3306
数据库:(留空或输入具体数据库名)
用户名:dbeaver_user
密码:StrongPassword123!
配置步骤:
- 打开 DBeaver → 点击 "新建连接"(数据库图标 +)
- 选择 MySQL
- 填写连接信息:
- Server Host:
服务器IP - Port:
3306 - Database:
(可选) - Username:
dbeaver_user - Password:
StrongPassword123!
- Server Host:
- 点击 "测试连接"
- 成功 → 点击 "完成"
方法2:SSH 隧道连接(更安全,推荐)
适用场景:
- 有 SSH 访问权限
- 不想暴露 3306 端口到公网
- 更安全的连接方式
配置步骤:
- 在连接设置中,切换到 "SSH" 标签页
- 勾选 "使用 SSH 隧道"
- 填写 SSH 信息:
- Host/IP:
服务器IP - Port:
22 - Username:
服务器SSH用户名(如root) - Authentication:
密码或私钥
- Host/IP:
- 在主连接标签页:
- Host:
localhost或127.0.0.1 - Port:
3306 - 其他信息相同
- Host:
方法3:使用 SSL/TLS 加密连接
服务器端生成证书:
bash
# 在 MySQL 服务器上
cd /usr/local/mysql
mkdir ssl
cd ssl
# 生成自签名证书(示例)
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
# 修改 MySQL 配置
vi /etc/my.cnf
[mysqld]
ssl-ca=/usr/local/mysql/ssl/ca-cert.pem
ssl-cert=/usr/local/mysql/ssl/server-cert.pem
ssl-key=/usr/local/mysql/ssl/server-key.pem
DBeaver SSL 配置:
- 切换到 "SSL" 标签页
- 选择 SSL 模式:
REQUIRED或VERIFY_CA - 上传客户端证书(如果需要)
🛠️ DBeaver 高级配置
驱动配置
bash
# 如果需要更新 MySQL 驱动
1. 数据库 → 驱动管理器
2. 选择 MySQL → 编辑
3. 添加或更新驱动文件
4. 设置默认端口:3306
连接属性优化
plain
# 在"连接属性"中添加:
useSSL=false # 如果不用 SSL
serverTimezone=Asia/Shanghai # 时区设置
characterEncoding=utf8 # 字符编码
allowPublicKeyRetrieval=true # MySQL 8.0+ 需要
连接池设置
plain
# 提高性能
initialPoolSize=5
maxPoolSize=20
minPoolSize=5
maxIdleTime=300
🔍 连接测试与诊断
测试脚本
bash
# 在服务器上执行测试
cat > /tmp/test_dbeaver.sql << 'EOF'
-- 创建测试环境
CREATE DATABASE IF NOT EXISTS dbeaver_test;
USE dbeaver_test;
-- 测试表
CREATE TABLE IF NOT EXISTS connection_test (
id INT AUTO_INCREMENT PRIMARY KEY,
test_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(50)
);
-- 插入测试数据
INSERT INTO connection_test (status) VALUES ('DBeaver connection successful');
-- 查询验证
SELECT * FROM connection_test;
EOF
# 执行测试
mysql -u dbeaver_user -p'StrongPassword123!' < /tmp/test_dbeaver.sql
诊断命令
bash
# 1. 检查用户权限
mysql -u root -p -e "SELECT user, host, authentication_string FROM mysql.user WHERE user LIKE '%dbeaver%';"
# 2. 检查连接限制
mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';"
# 3. 查看当前连接
mysql -u root -p -e "SHOW PROCESSLIST;"
# 4. 测试网络连通性
telnet 服务器IP 3306
# 或
nc -zv 服务器IP 3306
🚨 故障排除
常见错误及解决方案
错误1:Access denied for user
bash
# 重新授权
mysql -u root -p << EOF
GRANT ALL PRIVILEGES ON *.* TO 'dbeaver_user'@'%' IDENTIFIED BY 'StrongPassword123!' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
错误2:Can't connect to MySQL server
bash
# 检查 MySQL 服务
service mysqld status
# 检查端口监听
netstat -tlnp | grep :3306
# 检查防火墙
firewall-cmd --list-ports | grep 3306
错误3:Public Key Retrieval is not allowed
plain
# 在 DBeaver 连接属性中添加:
allowPublicKeyRetrieval=true
错误4:SSL connection required
plain
# 在 DBeaver 连接属性中添加:
useSSL=false
# 或正确配置 SSL
DBeaver 连接测试流程
- 测试本地连接 → 验证 MySQL 服务正常
- 测试服务器本地连接 → 验证用户权限正常
- 测试同网络其他机器连接 → 验证网络配置
- 测试公网连接 → 验证防火墙和端口转发
📱 不同场景配置方案
场景1:内网开发环境
plain
连接方式:直接连接
IP:服务器内网IP(192.168.x.x 或 10.x.x.x)
用户:开发专用用户
权限:开发数据库的读写权限
场景2:生产环境
plain
连接方式:SSH隧道 + SSL
用户:只读监控用户
权限:SELECT权限 only
IP:通过跳板机连接
场景3:云服务器
plain
连接方式:直接连接 + 安全组
安全组:仅允许特定IP访问3306端口
用户:强密码 + IP白名单
📋 安全检查清单
安全配置
- 使用强密码(大小写+数字+符号,12位以上)
- 创建专用用户,避免使用 root
- 按最小权限原则授权
- 限制用户连接IP(如:'user'@'192.168.1.%')
- 定期修改密码
- 启用连接日志
网络安全
- 防火墙仅开放必要端口
- 考虑使用 VPN 或专线
- 生产环境使用 SSH 隧道
- 配置 IP 白名单
- 使用非标准端口(可选)
监控与审计
- 启用 MySQL 审计日志
- 监控连接数
- 定期检查异常连接
- 记录操作日志
🚀 一键配置脚本
bash
#!/bin/bash
# MySQL 远程访问一键配置脚本
echo "=== MySQL 远程访问配置 ==="
# 变量配置
DB_USER="dbeaver_remote"
DB_PASS=$(openssl rand -base64 16)
SERVER_IP=$(hostname -I | awk '{print $1}')
echo "生成密码: $DB_PASS"
echo "服务器IP: $SERVER_IP"
# 1. 创建用户
mysql -u root -p << EOF
CREATE USER IF NOT EXISTS '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASS}';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES ON *.* TO '${DB_USER}'@'%';
FLUSH PRIVILEGES;
EOF
# 2. 配置 MySQL
sed -i '/^\[mysqld\]/a\bind-address = 0.0.0.0' /etc/my.cnf
systemctl restart mysqld
# 3. 配置防火墙
firewall-cmd --permanent --add-port=3306/tcp --add-port=22/tcp
firewall-cmd --reload
# 4. 输出连接信息
cat << EOF
=== 配置完成 ===
连接信息:
主机: $SERVER_IP
端口: 3306
用户名: $DB_USER
密码: $DB_PASS
DBeaver 设置:
1. 新建 MySQL 连接
2. 主机填: $SERVER_IP
3. 用户/密码如上
4. 测试连接
EOF
📞 最佳实践总结
开发环境
- 直接连接 + 简单密码
- 全权限用户
- 内网访问
测试环境
- SSH 隧道连接
- 受限权限用户
- 定期密码更换
生产环境
- SSH 隧道 + SSL
- 只读或最小权限用户
- IP 白名单限制
- 连接池管理
- 完整的审计日志
✅ 最终验证
连接成功后,在 DBeaver 中执行:
sql
-- 验证连接
SELECT @@version as mysql_version,
CURRENT_USER() as current_user,
@@hostname as server_hostname,
NOW() as server_time;
现在您已经掌握了 DBeaver 远程连接 MySQL 的所有正确方法!