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系统中运行后会完成这些操作:
- 自动下载并安装MySQL服务器和客户端的最新稳定版本
- 创建系统服务mysql.service并自动启动
- 生成默认配置文件(通常位于
/etc/mysql
目录) - 初始化数据目录(通常为
/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
该脚本通常会执行以下操作:
- 启用密码强度检测——no
- 设置 root 密码(如果尚未设置)——no
- 移除匿名用户——yes
- 禁止 root 远程登录——yes
- 移除测试数据库——yes
- 重新加载权限表(使以上配置立即生效)——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-address
为 0.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>
创作不易,感谢支持!