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>

创作不易,感谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值