轻量服务器创建mysql,并配置远程连接

详细介绍在Ubuntu 22.04 ECS实例上安装MySQL并进行安全配置的完整步骤,包括设置密码、移除匿名用户和开启root远程登录。

1. 安装 MySQL

首先更新软件包列表并安装MySQL服务器:

bash 复制代码
sudo apt update
sudo apt install mysql-server -y

安装完成后,检查MySQL服务状态:

bash 复制代码
sudo systemctl status mysql

如果服务没有自动启动,使用以下命令启动并设置开机自启:

bash 复制代码
sudo systemctl start mysql
sudo systemctl enable mysql

2. 初始化安全设置

方法一:使用 mysql_secure_installation(推荐)

MySQL提供了一个安全配置脚本,可以交互式地进行安全设置:

bash 复制代码
sudo mysql_secure_installation

执行后会有一系列提示,按以下方式回答:

  1. 验证密码组件 :输入 n(跳过密码验证策略)
  2. 更改root密码 :输入 y,然后设置密码为 123456
  3. 移除匿名用户 :输入 y
  4. 禁止root远程登录这里要特别注意,输入 n(因为我们想要开启root远程登录)
  5. 移除test数据库 :输入 y
  6. 重新加载权限表 :输入 y

方法二:手动配置(如果上述方法不适用)

如果上述脚本不工作,可以手动进行安全配置:

bash 复制代码
# 登录MySQL(初始安装时可能无需密码)
sudo mysql

# 在MySQL提示符下执行以下命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
EXIT;

3. 开启root远程登录

现在我们需要配置root用户的远程访问权限:

bash 复制代码
# 登录MySQL
sudo mysql -u root -p
# 输入密码:123456

在MySQL提示符下执行以下命令:

sql 复制代码
-- 创建root用户并允许从任何主机连接(生产环境建议限制IP)
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

-- 或者如果root@%已存在,只需更新认证方式和密码
-- ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

-- 授予所有权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

-- 重新加载权限
FLUSH PRIVILEGES;

-- 查看用户权限配置
SELECT user, host, authentication_string FROM mysql.user;

退出MySQL:

sql 复制代码
EXIT;

4. 配置MySQL允许远程连接

编辑MySQL配置文件,修改绑定地址:

bash 复制代码
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

找到 bind-address 这一行,将其修改为:

复制代码
bind-address = 0.0.0.0

或者注释掉这一行:

复制代码
# bind-address = 127.0.0.1

按 Ctrl + O(按住Control键,再按O键)

底部会显示 File Name to Write: ...

直接按 Enter 键确认保存

保存并退出编辑器。

5. 配置防火墙

如果系统启用了UFW防火墙,需要开放MySQL端口:

bash 复制代码
sudo ufw allow 3306/tcp
sudo ufw reload

6. 重启MySQL服务

应用所有配置更改:

bash 复制代码
sudo systemctl restart mysql
sudo systemctl status mysql  # 检查服务状态

7. 测试连接

本地测试:

bash 复制代码
mysql -u root -p -h 127.0.0.1

远程测试(从另一台机器):

bash 复制代码
mysql -u root -p -h 你的ECS服务器IP地址

8. 云服务器安全组配置

重要:在云服务商的控制台中,配置安全组规则,在入方向开放3306端口:

  • 端口范围:3306/3306
  • 授权对象:0.0.0.0/0(任何IP)或您的特定IP段

安全建议

⚠️ 重要安全提醒

  1. 使用简单密码如"123456"在生产环境中极不安全,建议使用强密码
  2. 允许root用户远程登录存在安全风险,建议创建专用用户进行远程连接
  3. 考虑使用SSH隧道进行更安全的远程连接

故障排除

如果连接失败,检查以下内容:

  1. 检查MySQL服务状态

    bash 复制代码
    sudo systemctl status mysql
  2. 检查监听端口

    bash 复制代码
    sudo netstat -tlnp | grep 3306
  3. 检查MySQL错误日志

    bash 复制代码
    sudo tail -f /var/log/mysql/error.log
  4. 验证用户权限

    bash 复制代码
    sudo mysql -u root -p -e "SELECT user, host FROM mysql.user;"

配置云服务器安全组

这是最常见的问题!请登录到您的云服务商控制台:

对于华为云:

  1. 进入 弹性云服务器 ECS 控制台
  2. 找到您的实例 8.138.211.30
  3. 点击实例名称进入详情
  4. 找到 安全组 标签页
  5. 点击安全组名称进入规则配置
  6. 在 入方向规则 中添加:
    • 协议端口:3306/3306
    • 源地址:0.0.0.0/0 或您的特定IP
    • 描述:MySQL远程访问

对于阿里云:

  1. 进入 ECS控制台
  2. 找到您的实例
  3. 在 安全组 中配置入方向规则

完成以上步骤后,您应该能够成功从远程连接到MySQL数据库了。

↑↑↑




↓↓↓

详细介绍如何创建 yeyuge 数据库并确保 root 用户可以访问。

1. 创建 yeyuge 数据库

首先登录 MySQL:

bash 复制代码
mysql -u root -p123456

在 MySQL 命令行中执行:

sql 复制代码
-- 创建数据库
CREATE DATABASE yeyuge;

-- 查看所有数据库确认
SHOW DATABASES;

2. 配置 root 用户访问权限

root 用户默认已经有所有权限,但我们可以确认一下:

sql 复制代码
-- 查看root用户的权限
SHOW GRANTS FOR 'root'@'%';

-- 如果root@%用户不存在,创建它(针对远程访问)
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

-- 确保本地root用户也有权限
GRANT ALL PRIVILEGES ON yeyuge.* TO 'root'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

3. 专门为 yeyuge 数据库创建专用用户(推荐)

为了安全考虑,建议为 yeyuge 数据库创建专用用户:

sql 复制代码
-- 创建专用用户
CREATE USER 'yeyuge_user'@'%' IDENTIFIED WITH mysql_native_password BY 'yeyuge_password_123';

-- 授予对yeyuge数据库的所有权限
GRANT ALL PRIVILEGES ON yeyuge.* TO 'yeyuge_user'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

-- 查看用户权限
SHOW GRANTS FOR 'yeyuge_user'@'%';

4. 测试数据库访问

测试 root 用户访问:

sql 复制代码
-- 在MySQL命令行中测试
USE yeyuge;
SELECT DATABASE();  -- 应该显示yeyuge

-- 创建测试表验证权限
CREATE TABLE test_table (id INT, name VARCHAR(50));
INSERT INTO test_table VALUES (1, 'test');
SELECT * FROM test_table;
DROP TABLE test_table;

从命令行测试:

bash 复制代码
# 使用root用户连接并指定yeyuge数据库
mysql -u root -p123456 -D yeyuge -e "SELECT '成功连接到yeyuge数据库' as message;"

# 或者连接后使用USE语句
mysql -u root -p123456 -e "USE yeyuge; SELECT DATABASE();"

5. 完整的配置脚本

创建一个完整的配置脚本:

bash 复制代码
#!/bin/bash
# 保存为 setup_yeyuge_db.sh

echo "=== 设置yeyuge数据库 ==="

# 使用MySQL命令行执行配置
mysql -u root -p123456 << EOF
-- 创建数据库
CREATE DATABASE IF NOT EXISTS yeyuge;

-- 确保root用户有权限
GRANT ALL PRIVILEGES ON yeyuge.* TO 'root'@'localhost';
GRANT ALL PRIVILEGES ON yeyuge.* TO 'root'@'%';

-- 创建专用用户(可选)
CREATE USER IF NOT EXISTS 'yeyuge_user'@'%' IDENTIFIED WITH mysql_native_password BY 'yeyuge_password_123';
GRANT ALL PRIVILEGES ON yeyuge.* TO 'yeyuge_user'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

-- 显示结果
SHOW DATABASES LIKE 'yeyuge';
SHOW GRANTS FOR 'root'@'%';
EOF

echo "=== 配置完成 ==="

给脚本执行权限并运行:

bash 复制代码
chmod +x setup_yeyuge_db.sh
./setup_yeyuge_db.sh

6. 验证配置

验证方法1:权限检查

sql 复制代码
-- 查看数据库权限
SELECT * FROM mysql.db WHERE Db = 'yeyuge';

-- 查看用户权限
SHOW GRANTS FOR 'root'@'%';
SHOW GRANTS FOR 'root'@'localhost';

验证方法2:实际连接测试

bash 复制代码
# 从本地测试
mysql -u root -p123456 -D yeyuge -e "CREATE TABLE IF NOT EXISTS connection_test (test_id INT); DROP TABLE connection_test; SELECT 'yeyuge数据库访问正常' as result;"

# 从远程测试(在另一台机器上)
mysql -u root -p123456 -h 8.138.211.30 -D yeyuge -e "SELECT '远程访问yeyuge成功' as result;"

验证方法3:完整功能测试

bash 复制代码
# 测试脚本:test_yeyuge_access.sh
mysql -u root -p123456 << EOF
USE yeyuge;

-- 测试创建表
CREATE TABLE IF NOT EXISTS test_permissions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 测试插入数据
INSERT INTO test_permissions (data) VALUES ('测试数据1'), ('测试数据2');

-- 测试查询数据
SELECT * FROM test_permissions;

-- 测试删除表
DROP TABLE test_permissions;

SELECT '所有权限测试通过' as result;
EOF

7. 如果遇到权限问题

如果 root 用户仍然无法访问,执行以下修复命令:

sql 复制代码
-- 确保root用户有全局权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

-- 或者重新设置root密码和权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

-- 刷新权限
FLUSH PRIVILEGES;

8. 常用管理命令

sql 复制代码
-- 查看所有用户
SELECT user, host FROM mysql.user;

-- 查看数据库权限
SELECT * FROM mysql.db WHERE Db = 'yeyuge';

-- 查看表权限
SELECT * FROM mysql.tables_priv WHERE Db = 'yeyuge';

-- 删除数据库(如果需要重新创建)
-- DROP DATABASE yeyuge;

完成以上步骤后,root 用户就应该能够完全访问 yeyuge 数据库了。您可以通过测试脚本来验证所有功能是否正常。

相关推荐
A-刘晨阳4 小时前
Linux安装centos8及基础配置
linux·运维·服务器·操作系统·centos8
Saniffer_SH4 小时前
【高清视频】CXL 2.0 over Fibre演示和答疑 - 将内存拉到服务器10米之外
运维·服务器·网络·人工智能·驱动开发·计算机外设·硬件工程
紫钺-高山仰止4 小时前
【Pyzmq】python 跨进程线程通信 跨平台跨服务器通信
服务器·python·github
saber_andlibert5 小时前
【Linux】IPC——命名管道(fifo)
linux·运维·服务器
TU^6 小时前
Linux--权限
linux·服务器
尘埃不入你眼眸6 小时前
服务器安装Java与nginx与nacos
java·服务器·nginx
The star"'6 小时前
iSCSI服务器
运维·服务器
无垠的广袤6 小时前
【LattePanda Mu 开发套件】AI 图像识别网页服务器
服务器·人工智能·python·单片机·嵌入式硬件·物联网
阿星_6 小时前
PyCharm项目依赖库的备份与还原方法
linux·服务器·python