当前位置: 首页 > java >正文

Ubuntu20.04中MySQL的安装和配置

Ubuntu20.04 中 MySQL 的安装和配置

Ubuntu 安装 MySQL 及其配置

1. 安装 MySQL

更新系统包列表并安装 MySQL 服务器和客户端:

sudo apt update
# -y:自动确认所有提示(非交互式安装)
# mysql-server:MySQL数据库服务端核心组件
# mysql-client:MySQL命令行客户端工具
sudo apt install -y mysql-server mysql-client

在Ubuntu系统中运行后会完成这些操作:

  1. 自动下载并安装MySQL服务器和客户端的最新稳定版本
  2. 创建系统服务mysql.service并自动启动
  3. 生成默认配置文件(通常位于/etc/mysql目录)
  4. 初始化数据目录(通常为/var/lib/mysql

1.1. 配置本地 MySQL 访问

使用默认的管理账户 debian-sys-maint 登录 MySQL:

# 查看 debian-sys-maint 账户名和密码
sudo cat /etc/mysql/debian.cnf  
# 结果如下
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = ******************
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = ******************
socket   = /var/run/mysqld/mysqld.sock# 使用 debian-sys-maint 账户登录
mysql -u debian-sys-maint -p <PASSWORD_FROM_FILE># 若密码包含特殊字符,如 $、! 等,需用引号包裹:
mysql -u debian-sys-maint -p "PASSWORD_WITH_SPECIAL_CHARS"

修改 root 用户的认证方式并设置密码:

  • 为了从默认的 auth_socket 插件切换为 mysql_native_password,从而允许通过密码登录。这对于某些客户端或应用程序(如 PHP、Python 脚本等)是必要的,因为它们可能不支持默认的认证方式。
# 需要在登录MySQL的条件下进行
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '[your_password]';  
FLUSH PRIVILEGES;  

运行安全脚本以加固 MySQL 安装:

sudo mysql_secure_installation  

该脚本通常会执行以下操作:

  1. 启用密码强度检测——no
  2. 设置 root 密码(如果尚未设置)——no
  3. 移除匿名用户——yes
  4. 禁止 root 远程登录——yes
  5. 移除测试数据库——yes
  6. 重新加载权限表(使以上配置立即生效)——yes

1.2. 配置远程 MySQL 访问

创建远程访问用户并授权:

# 需要在登录MySQL的条件下进行,这里使用 mysql_native_password 身份验证插件,因为 MySQL8.0 及以上默认不是它,需要手动设置,不然会报错,当然,这个安全性没有那么高,后续看最后的部分
CREATE USER 'root'@'[your_host]' IDENTIFIED WITH mysql_native_password BY '[your_password]';  # ALL 是指增删改查等所有权限
# *.* 代表 所有库 的 所有表
# WITH GRANT OPTION 表示把“赋权”的权力也赋给对方
GRANT ALL PRIVILEGES ON *.* TO 'root'@'[yout_host]' WITH GRANT OPTION;  
FLUSH PRIVILEGES;  # 刷新权限
FLUSH PRIVILEGES;

修改 MySQL 数据库服务器的配置,使其能够允许远程连接:

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf  

修改 bind-address0.0.0.0,允许所有ip连接,不要在生产环境使用

开放防火墙端口并重启 MySQL 服务:

sudo ufw allow 3306  
sudo systemctl restart mysql  

2. 相关问题说明

2.1. MySQL 认证插件问题

MySQL 8.0+ 默认使用 caching_sha2_password身份验证插件,可能导致连接问题。解决方法:

  • 修改 MySQL 服务器的用户认证方式为 mysql_native_password(MySQL8.0之前的默认身份验证插件,不过9.0之后就不支持了):

    ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';  
    
  • 或在 JDBC 连接字符串中配置(不推荐,公钥易泄露):

    jdbc:mysql://host:3306/db?allowPublicKeyRetrieval=true  
    
  • 或指定服务器公钥文件路径(需要先将公钥保存到本地):

    jdbc:mysql://host:3306/db?serverRSAPublicKeyFile=/local_path/to/key.pem  
    
    • 公钥的获取
    # Linux中 MySQL登陆后
    SHOW STATUS LIKE 'Caching_sha2_password_rsa_public_key';
    # 然后将value存储到Java服务本地,储存到caching_sha2_password_public_key.pem文件  
    
  • 使用 SSL 加密连接(安全性高,但是会有一定的开销):

    jdbc:mysql://host:3306/db?useSSL=true  
    

通过以上步骤,可以完成 MySQL的安装与配置,确保本地和远程访问正常。

2.2. 相关命令

# 查看 MySQL 版本
mysql -V# 查看是否启动
sudo systemctl status mysql# 启动
sudo systemctl start mysql
sudo systemctl restart mysql# 关闭
sudo systemctl stop mysql# 查看状态
sudo systemctl status mysql# 检查 MySQL 是否默认启动
sudo systemctl is-enabled mysql# 设置 默认/非默认启动
sudo systemctl enable/disable mysql# 查看本机某端口是否被监听
sudo netstat -tulnp | grep 3306# 查看端口占用情况
sudo lsof -i :3306# 杀死进程,-9 是强制结束
sudo kill -9 <PID>

创作不易,感谢支持!

http://www.xdnf.cn/news/12741.html

相关文章:

  • 【iOS】JSONModel源码学习
  • LLMs 系列科普文(8)
  • 多线程语音识别工具
  • 【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
  • 告别 @MockBean!在 Spring Boot 3.2+ 中使用 @MockitoBean 进行单元测试
  • 智慧园区管理平台
  • 阿里云Alibaba Cloud安装Docker与Docker compose【图文教程】
  • Spring 中的三级缓存机制详解
  • MySQL索引:7大类型+4维分类
  • 《Windows 10下QT+OpenCV+Yolo11:AI视觉开发实战指南》
  • GNSS高精度定位之-----星基差分
  • 数据网格的革命:从集中式到分布式的数据管理新范式
  • C++中的数组
  • Linux Docker的简介
  • uni-app学习笔记三十三--触底加载更多和下拉刷新的实现
  • 重新定义 AI 协同:三款开源 MCP 工具开启智能体从“聊天”到“操控”
  • [论文阅读] 人工智能+软件工程(软件测试) | 当大语言模型遇上APP测试:SCENGEN如何让手机应用更靠谱
  • 【论文阅读29】区间预测CIPM(2025)
  • RabbitMQ fanout交换机
  • 国防科技大学计算机基础慕课课堂学习笔记
  • Unity中的Mathf.Clamp01
  • 6.5 自学测试 数据库基础 Day5
  • 利用frp和腾讯云服务器将内网暴露至外网(内网穿透)
  • 【MATLAB代码】基于MCC(最大相关熵)的EKF,一维滤波,用于解决观测噪声的异常|附完整代码,订阅专栏后可直接查看
  • 模拟法解题的思路与算法分享
  • [GitHub] 优秀开源项目
  • python训练营打卡第47天
  • 27、基于map实现的简易kv数据库
  • AIGC的产品设计演进:从工具到协作者
  • 黑马Sting四道练习题