linux云服务器上部署mysql8教程
·
1. 完整的一键安装脚本
#!/bin/bash
# 清理环境
yum remove -y mysql* mariadb*
# 下载并安装 MySQL 仓库
wget -O /tmp/mysql80.rpm https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
yum localinstall -y /tmp/mysql80.rpm
# 导入 GPG 密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
# 安装 MySQL
yum install -y mysql-community-server mysql-community-client
echo "MySQL 8 安装完成!"
安装后的配置
1. 启动 MySQL 服务
# 启动 MySQL 服务
systemctl start mysqld
# 设置开机自启
systemctl enable mysqld
# 检查服务状态
systemctl status mysqld
2. 获取初始密码并修改
# 查看临时 root 密码
grep 'temporary password' /var/log/mysqld.log
# 输出类似:2024-01-01T00:00:00.000000Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Abc123def#
3. 运行安全配置
# 运行安全配置脚本
mysql_secure_installation
按照提示操作:
- 输入刚才查到的临时密码
- 重置 root 密码(MySQL 8 要求强密码)
- 移除匿名用户
- 禁止 root 远程登录(建议)
- 移除测试数据库
- 重新加载权限表
/**
示例
1. 输入新设置的 root 密码
2. 是否更改密码?(输入 n,因为刚改过)
3. 是否移除匿名用户?(输入 y)
4. 是否禁止 root 远程登录?(输入 y,增强安全)
5. 是否移除 test 数据库?(输入 y)
6. 是否重新加载权限表?(输入 y)
**/
4. 登录 MySQL
# 使用新密码登录
mysql -u root -p
常见问题解决
如果忘记临时密码:
# 停止 MySQL 服务
systemctl stop mysqld
# 跳过权限检查启动
mysqld_safe --skip-grant-tables &
# 无密码登录并重置密码
mysql -u root
在 MySQL 中执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '您的新密码';
FLUSH PRIVILEGES;
EXIT;
然后重启 MySQL 服务:
pkill mysqld
systemctl start mysqld
配置远程连接(如果需要):
即使没有执行 mysql_secure_installation,MySQL 的 root 用户默认也是不支持远程连接的。
默认的 root 用户权限
安装 MySQL 后,默认的 root 用户配置是:
-- 查看 root 用户的访问权限
SELECT user, host FROM mysql.user WHERE user = 'root';
你会看到类似这样的结果:
+------+-----------+
| user | host |
+------+-----------+
| root | localhost |
| root | 127.0.0.1 |
| root | ::1 |
+------+-----------+
默认安全设置说明
-
localhost:只能从服务器本机连接
-
127.0.0.1:IPv4 本地回环地址
-
::1:IPv6 本地回环地址
所有这些都意味着:root 用户默认只能从 MySQL 服务器本身连接,无法从外部网络连接。
验证当前状态
-- 查看所有用户的连接权限
SELECT user, host FROM mysql.user;
远程连接的必要条件
要让 root 能够远程连接,需要手动创建远程访问权限:
-- 需要手动执行才会开启远程连接
CREATE USER 'root'@'%' IDENTIFIED BY '密码';
-- 或者
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
或者创建一个支持远程连接的新用户:
-- 在 MySQL 中执行
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%';
FLUSH PRIVILEGES;
% 是 固定写法,不是占位符。它表示"所有主机"的意思。
% 的含义:
% = 允许从任何 IP 地址连接
这是 MySQL 中表示"所有主机"的特殊字符
其他常见的主机配置:
-- 允许从任何主机连接(最宽松)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'App123!@#';
-- 只允许从本地连接(最严格)
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'App123!@#';
-- 允许从特定 IP 连接
CREATE USER 'app_user'@'192.168.1.100' IDENTIFIED BY 'App123!@#';
-- 允许从 IP 段连接
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'App123!@#';
-- 允许从域名连接
CREATE USER 'app_user'@'example.com' IDENTIFIED BY 'App123!@#';
修改配置文件允许远程连接:
vi /etc/my.cnf
在 [mysqld] 部分添加:
bind-address = 0.0.0.0
重启服务:
systemctl restart mysqld
验证安装
# 检查 MySQL 版本
mysql --version
# 登录测试
mysql -u root -p -e "SELECT VERSION();"
# 检查服务状态
systemctl status mysqld
总结:
要支持远程连接,需要:
-
创建专门的远程用户(推荐)
-
配置云服务器安全组开放 3306 端口
-
配置防火墙允许 MySQL 端口
重要提示
-
MySQL 8 默认使用强密码策略,密码需要包含大小写字母、数字和特殊字符
-
默认认证插件是 caching_sha2_password,比之前的 mysql_native_password 更安全
-
首次安装后一定要运行 mysql_secure_installation
-
默认只允许本地连接,需要远程访问时要额外配置
步骤5:基本配置(可选)
-- 查看当前字符集
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 永久配置需要修改 /etc/my.cnf
mysql8默认用强密码,如何调整密码策略(不建议)
(如果你的数据库只是用于学习的话没问题)
查看并调整密码策略
-- 查看当前的密码策略
SHOW VARIABLES LIKE 'validate_password%';
你会看到类似这样的输出:
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
临时降低密码策略(测试环境使用)
如果只是测试环境,可以临时降低要求:
-- 先查看当前策略
SHOW VARIABLES LIKE 'validate_password%';
-- 降低策略
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;
-- 设置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
-- 刷新权限
FLUSH PRIVILEGES;
更完整的调整:
-- 临时调整多个密码策略参数
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 4;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.special_char_count = 0;
-- 现在可以设置简单密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
永久修改密码策略(修改配置文件)
如果需要永久修改,编辑 MySQL 配置文件:
# 编辑 MySQL 配置文件
vi /etc/my.cnf
在 [mysqld] 部分添加:
[mysqld]
validate_password.policy=LOW
validate_password.length=4
然后重启 MySQL:
systemctl restart mysqld
推荐操作步骤
对于生产环境,建议使用方案1(强密码):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MySQL@2024';
对于测试/学习环境,可以使用上面临时降低密码策略
更多推荐
所有评论(0)