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

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>

创作不易,感谢支持!

相关文章:

  • 基于React 的 AntD 库进行前端开发过程中的问题汇总
  • 使用 C/C++的OpenCV 实时播放火柴人爱心舞蹈动画
  • 机器人/智能车纯视觉巡线经典策略—滑动窗口+直方图法
  • 神经网络-Day48
  • 【CBAP50技术手册】#39 Roles and Permissions Matrix(角色与权限矩阵):业务分析师的“秩序守护器”
  • AU音频软件|Audition 2025网盘下载与安装教程指南
  • 华为开源自研AI框架昇思MindSpore应用案例:ICT实现图像修复
  • 算法:位运算
  • Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用
  • 从零开始的云计算生活——番外,实战脚本。
  • OpenEuler服务器警告邮件自动化发送:原理、配置与安全实践
  • ElGamal加密算法:离散对数难题的安全基石
  • 【大模型】【推荐系统】LLM在推荐系统中的应用价值
  • Linux nano命令的基本使用
  • Java安全点safepoint
  • Fractal Generative Models论文阅读笔记与代码分析
  • C# 表达式和运算符(表达式和字面量)
  • Go基本语法——go语言中的四种变量定义方法
  • Vscode下Go语言环境配置
  • RoboDK 自定义机器人
  • 网站代理做反向/宁海关键词优化怎么优化
  • 自己怎么做视频网站/长春seo外包
  • 宁乡建设局网站/站长工具seo推广秒收录
  • 建站之星平台/seo排名优化工具
  • 建设手机银行官方网站/现在有哪些网址
  • 新手学做网站教程/营销策划的六个步骤