别再踩坑了!Ubuntu 22.04 LTS 上 MySQL 5.7 保姆级安装与密码重置指南
Ubuntu 22.04 LTS 上 MySQL 5.7 安装与密码管理全攻略
当你在Ubuntu 22.04 LTS上安装MySQL 5.7时,可能会遇到一些意想不到的挑战。与早期版本不同,Ubuntu 22.04默认不再提供MySQL 5.7的官方软件包,而且安装后的密码管理方式也发生了变化。本文将带你一步步完成从安装到密码配置的完整流程,避免常见的陷阱。
1. 为什么选择MySQL 5.7?
MySQL 5.7虽然已经不是最新版本,但仍然是许多企业应用和遗留系统的首选。它提供了稳定的性能和广泛的应用支持,特别是在以下场景中:
- 需要与特定应用程序兼容
- 依赖MySQL 5.7特有功能的系统
- 尚未准备好升级到MySQL 8.0的环境
重要考虑:MySQL 5.7已于2023年10月结束官方支持,这意味着它将不再接收安全更新。在生产环境中使用前,请评估安全风险。
2. 在Ubuntu 22.04上安装MySQL 5.7
2.1 添加MySQL官方APT仓库
由于Ubuntu 22.04默认仓库中不再包含MySQL 5.7,我们需要手动添加MySQL官方APT仓库:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb在配置界面中:
- 选择"MySQL Server & Cluster"
- 选择"mysql-5.7"
- 选择"OK"确认
然后更新软件包列表:
sudo apt update2.2 安装MySQL 5.7服务器
执行以下命令安装MySQL服务器:
sudo apt install mysql-server-5.7安装过程中,系统会提示你设置root密码。这是与早期Ubuntu版本的一个重要区别- 现在你可以在安装过程中直接设置密码。
注意:如果跳过密码设置,系统会生成一个随机密码并存储在日志文件中,我们稍后会介绍如何查找。
2.3 验证安装
安装完成后,检查MySQL服务状态:
systemctl status mysql你应该看到类似以下输出:
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2023-04-20 10:30:45 UTC; 2min 30s ago3. MySQL root密码管理
3.1 如果你在安装时设置了密码
如果你在安装过程中设置了root密码,可以直接使用该密码登录:
mysql -u root -p3.2 如果密码未知或丢失
如果你跳过了密码设置或忘记了密码,可以按照以下步骤重置:
- 首先停止MySQL服务:
sudo systemctl stop mysql- 以安全模式启动MySQL:
sudo mysqld_safe --skip-grant-tables &- 连接到MySQL服务器(此时不需要密码):
mysql -u root- 在MySQL提示符下执行以下命令:
UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root'; FLUSH PRIVILEGES; exit;- 重启MySQL服务:
sudo systemctl restart mysql3.3 解决认证插件问题
如果你遇到类似"plugin caching_sha2_password could not be loaded"的错误,可能是因为MySQL 5.7和8.0的默认认证插件不同。解决方法:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;4. 常见问题与解决方案
4.1 无法连接到MySQL服务器
错误现象:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
解决方案:
- 检查MySQL服务是否运行:
systemctl status mysql- 如果服务未运行,尝试启动:
sudo systemctl start mysql- 如果服务启动失败,检查错误日志:
sudo tail -n 50 /var/log/mysql/error.log4.2 权限问题
错误现象:Access denied for user 'root'@'localhost'
解决方案:
- 确认你使用的密码正确
- 如果忘记密码,按照3.2节的步骤重置
- 检查用户权限:
SELECT Host, User FROM mysql.user;4.3 字符集配置
要确保MySQL支持中文和其他Unicode字符,建议配置UTF-8字符集:
- 编辑MySQL配置文件:
sudo nano /etc/mysql/my.cnf- 在[mysqld]部分添加:
character-set-server=utf8 collation-server=utf8_general_ci- 重启MySQL服务:
sudo systemctl restart mysql5. 安全加固建议
安装完成后,建议运行MySQL安全脚本:
sudo mysql_secure_installation这个脚本会引导你完成以下安全设置:
- 设置root密码(如果尚未设置)
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重新加载权限表
6. 日常管理命令
以下是一些常用的MySQL管理命令:
启动/停止/重启MySQL服务:
sudo systemctl start|stop|restart mysql查看MySQL版本:
SELECT VERSION();查看所有数据库:
SHOW DATABASES;创建新用户:
CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';授予权限:
GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'localhost'; FLUSH PRIVILEGES;
7. 性能调优基础
对于小型到中型应用,可以考虑以下基本优化:
- 编辑配置文件:
sudo nano /etc/mysql/my.cnf- 添加或修改以下参数:
[mysqld] innodb_buffer_pool_size = 1G # 根据可用内存调整,通常为总内存的50-70% innodb_log_file_size = 256M max_connections = 100 query_cache_size = 64M query_cache_type = 1- 重启MySQL使更改生效:
sudo systemctl restart mysql提示:在生产环境中进行重大配置更改前,建议先在测试环境验证。
8. 备份与恢复
8.1 使用mysqldump备份
mysqldump -u root -p --all-databases > full_backup.sql8.2 备份单个数据库
mysqldump -u root -p 数据库名 > database_backup.sql8.3 恢复数据库
mysql -u root -p < backup_file.sql8.4 定时自动备份
可以设置cron任务实现自动备份:
- 创建备份脚本:
sudo nano /usr/local/bin/mysql_backup.sh- 添加以下内容:
#!/bin/bash DATE=$(date +%Y%m%d%H%M) mysqldump -u root -p你的密码 --all-databases > /backups/mysql_backup_$DATE.sql find /backups -type f -name "*.sql" -mtime +7 -exec rm {} \;- 设置可执行权限:
sudo chmod +x /usr/local/bin/mysql_backup.sh- 添加cron任务(每天凌晨2点运行):
sudo crontab -e添加以下行:
0 2 * * * /usr/local/bin/mysql_backup.sh9. 监控与日志
9.1 查看慢查询日志
- 启用慢查询日志:
sudo nano /etc/mysql/my.cnf添加:
slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 2- 重启MySQL:
sudo systemctl restart mysql9.2 查看当前连接
SHOW PROCESSLIST;9.3 查看系统变量
SHOW VARIABLES;9.4 查看状态信息
SHOW STATUS;10. 升级到MySQL 8.0
虽然本文重点介绍MySQL 5.7,但建议在可能的情况下考虑升级到MySQL 8.0。升级前请注意:
- 备份所有数据
- 检查应用程序兼容性
- 查看官方升级指南中的重大变更
- 考虑先在测试环境验证升级过程
升级基本步骤:
- 备份所有数据库
- 停止MySQL 5.7服务
- 安装MySQL 8.0
- 运行mysql_upgrade工具
- 验证数据和应用程序功能
在实际项目中,我发现��多开发者遇到问题时会直接重装MySQL,这往往导致数据丢失。掌握正确的密码管理和故障排查方法可以节省大量时间。特别是在团队协作环境中,确保所有成员都了解这些基本操作流程非常重要。
