概述
本文档介绍在 Ubuntu 22.04 (Jammy Jellyfish) 系统上安装 MySQL 5.7 的完整步骤。
系统要求
- Ubuntu 22.04 LTS
- 至少 2GB RAM
- 至少 2GB 可用磁盘空间
- 具有 sudo 权限的用户
安装步骤
1. 清理现有 MySQL 安装(如有)
# 停止 MySQL 服务
sudo systemctl stop mysql
# 卸载现有 MySQL 包
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
# 删除配置文件和数据
sudo rm -rf /etc/mysql /var/lib/mysql
# 清理自动安装的依赖
sudo apt autoremove
sudo apt autoclean
2. 下载 MySQL 5.7 Debian 包
# 下载 MySQL 5.7 官方包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-server_5.7.41-1ubuntu18.04_amd64.deb-bundle.tar
# 解压包
tar -xvf mysql-server_5.7.41-1ubuntu18.04_amd64.deb-bundle.tar
3. 安装系统依赖
# 更新包列表
sudo apt update
# 安装必要的依赖包
sudo apt install libaio1 libmecab2 libtinfo5 -y
4. 创建安装脚本
创建 install_mysql.sh 文件:
cat > install_mysql.sh << 'EOF'
#!/bin/bash
set -e
echo "开始安装 MySQL 5.7..."
# 按正确顺序安装 MySQL 包
echo "1. 安装 mysql-common..."
sudo dpkg -i mysql-common_5.7.41-1ubuntu18.04_amd64.deb
echo "2. 安装 libmysqlclient20..."
sudo dpkg -i libmysqlclient20_5.7.41-1ubuntu18.04_amd64.deb
echo "3. 安装 libmysqlclient-dev..."
sudo dpkg -i libmysqlclient-dev_5.7.41-1ubuntu18.04_amd64.deb
echo "4. 安装 libmysqld-dev..."
sudo dpkg -i libmysqld-dev_5.7.41-1ubuntu18.04_amd64.deb
echo "5. 安装 mysql-community-client..."
sudo dpkg -i mysql-community-client_5.7.41-1ubuntu18.04_amd64.deb
echo "6. 安装 mysql-client..."
sudo dpkg -i mysql-client_5.7.41-1ubuntu18.04_amd64.deb
echo "7. 安装 mysql-community-server..."
sudo dpkg -i mysql-community-server_5.7.41-1ubuntu18.04_amd64.deb
echo "8. 安装 mysql-server..."
sudo dpkg -i mysql-server_5.7.41-1ubuntu18.04_amd64.deb
echo "MySQL 5.7 安装完成!"
EOF
# 给脚本执行权限
chmod +x install_mysql.sh
5. 执行安装
# 运行安装脚本
sudo ./install_mysql.sh
# 如果遇到依赖问题,运行修复
sudo apt install -f
6. 配置 MySQL 服务
# 启动 MySQL 服务
sudo systemctl start mysql
# 设置开机自启
sudo systemctl enable mysql
# 检查服务状态
sudo systemctl status mysql
安装后配置
1. 安全配置
# 运行安全安装脚本
sudo mysql_secure_installation
按照提示进行安全配置:
- 设置 root 密码
- 移除匿名用户
- 禁止 root 远程登录
- 移除测试数据库
- 重新加载权限表
2. 验证安装
# 检查 MySQL 版本
mysql --version
# 登录 MySQL
sudo mysql -u root -p
# 在 MySQL 中查看状态
mysql> STATUS;
mysql> SHOW DATABASES;
mysql> EXIT;
故障排除
常见问题解决
1. 依赖问题
# 如果安装过程中出现依赖错误
sudo apt install -f
sudo apt update
sudo apt install libaio1 libmecab2 libtinfo5
2. 服务启动失败
# 查看错误日志
sudo tail -f /var/log/mysql/error.log
# 检查配置文件
sudo mysql --verbose --help | grep -A 1 -B 1 "my.cnf"
# 重新配置 MySQL
sudo dpkg-reconfigure mysql-server-5.7
3. 连接问题
# 检查 MySQL 监听端口
netstat -tlnp | grep mysql
# 检查防火墙设置
sudo ufw status
sudo ufw allow mysql
基本使用
创建新用户和数据库
-- 创建新数据库
CREATE DATABASE mydatabase;
-- 创建新用户
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'password';
-- 授予权限
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
备份和恢复
# 备份数据库
mysqldump -u root -p --all-databases > backup.sql
# 恢复数据库
mysql -u root -p < backup.sql
性能优化建议
编辑 MySQL 配置文件
sudo nano /etc/mysql/my.cnf
添加以下基本优化配置:
[mysqld]
# 基本性能设置
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 100
query_cache_size = 64M
重启 MySQL 使配置生效:
sudo systemctl restart mysql
卸载 MySQL 5.7
# 停止服务
sudo systemctl stop mysql
# 卸载所有 MySQL 相关包
sudo dpkg -l | grep mysql | awk '{print $2}' | xargs sudo dpkg --purge
# 删除残留文件
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
# 清理依赖
sudo apt autoremove
注意事项
- 版本兼容性: MySQL 5.7 在 Ubuntu 22.04 上可能不是官方支持版本
- 安全更新: 考虑使用 MySQL 8.0 以获得更好的安全支持和性能
- 生产环境: 在生产环境中建议使用官方 APT 仓库安装
支持信息
- MySQL 官方文档:https://dev.mysql.com/doc/
- Ubuntu 文档:https://help.ubuntu.com
- MySQL 社区支持:https://forums.mysql.com/
重置密码的完整步骤
步骤 1:停止 MySQL 服务
sudo systemctl stop mysql
sudo systemctl status mysql # 确认服务已停止
步骤 2:启用 skip-grant-tables 模式
# 备份原配置文件
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup
# 启用 skip-grant-tables(取消注释)
sudo sed -i 's/#skip-grant-tables/skip-grant-tables/' /etc/mysql/mysql.conf.d/mysqld.cnf
# 验证修改
sudo grep skip-grant-tables /etc/mysql/mysql.conf.d/mysqld.cnf
步骤 3:以跳过权限检查模式启动 MySQL
# 启动 MySQL 服务(现在不需要密码即可登录)
sudo systemctl start mysql
# 检查服务状态
sudo systemctl status mysql
步骤 4:无密码登录 MySQL
# 直接登录,不需要密码
sudo mysql -u root
步骤 5:在 MySQL 中重置密码
-- 切换到 mysql 系统数据库
USE mysql;
-- 查看当前用户信息
SELECT user, host, authentication_string FROM user WHERE user='root';
-- 方法 A:MySQL 5.7 专用密码重置命令
UPDATE user SET authentication_string = PASSWORD('您的新密码') WHERE user='root';
-- 方法 B:如果上面不行,尝试这个
UPDATE user SET plugin ='mysql_native_password', authentication_string = PASSWORD('您的新密码') WHERE user='root';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出 MySQL
EXIT;
步骤 6:禁用 skip-grant-tables 模式并重启
# 恢复原配置(重新注释掉 skip-grant-tables)
sudo sed -i 's/skip-grant-tables/#skip-grant-tables/' /etc/mysql/mysql.conf.d/mysqld.cnf
# 重启 MySQL 服务
sudo systemctl restart mysql
# 检查服务状态
sudo systemctl status mysql
步骤 7:测试新密码登录
# 使用新密码登录测试
mysql -u root -p
输入您设置的新密码,应该能够成功登录。
完整的命令行操作序列
#!/bin/bash
# MySQL 密码重置完整脚本
echo "1. 停止 MySQL 服务..."
sudo systemctl stop mysql
echo "2. 启用 skip-grant-tables 模式..."
sudo sed -i 's/#skip-grant-tables/skip-grant-tables/' /etc/mysql/mysql.conf.d/mysqld.cnf
echo "3. 启动 MySQL 服务..."
sudo systemctl start mysql
echo "4. 无密码登录并重置密码..."
sudo mysql -u root << EOF
USE mysql;
UPDATE user SET authentication_string = PASSWORD('MyNewPassword123!') WHERE user = 'root';
FLUSH PRIVILEGES;
EXIT;
EOF
echo "5. 恢复配置文件..."
sudo sed -i 's/skip-grant-tables/#skip-grant-tables/' /etc/mysql/mysql.conf.d/mysqld.cnf
echo "6. 重启 MySQL 服务..."
sudo systemctl restart mysql
echo "7. 测试新密码..."
mysql -u root -p'MyNewPassword123!' -e "SELECT '密码重置成功!' as Message;"
echo "MySQL 密码重置完成!"
如果上述方法遇到问题,尝试替代方案
替代方案 1:使用 mysqld_safe 方式
# 停止 MySQL
sudo systemctl stop mysql
# 以跳过权限方式启动
sudo mysqld_safe --skip-grant-tables --skip-networking &
# 无密码登录
mysql -u root
# 在 MySQL 中执行重置命令(同上)
# 完成后杀死进程并正常重启
sudo killall mysqld
sudo systemctl start mysql
替代方案 2:使用 mysql_secure_installation
# 运行安全安装脚本重置密码
sudo mysql_secure_installation
密码重置后的推荐操作
1. 配置远程访问(如果需要)
-- 登录 MySQL
mysql -u root -p
-- 创建远程用户或修改现有用户
CREATE USER 'root'@'%' IDENTIFIED BY '您的密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
-- 修改配置文件允许远程连接
sudo sed -i 's/bind-address.*=.*127.0.0.1/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl restart mysql
2. 安全建议
- 使用强密码(大小写字母 + 数字 + 特殊字符)
- 定期更换密码
- 考虑使用非 root 用户进行日常操作
- 限制远程访问 IP 范围
故障排除
如果重置后仍然无法登录:
- 检查 authentication_string 字段是否更新
- 确认 plugin 设置为 mysql_native_password
- 查看错误日志:
sudo tail -f /var/log/mysql/error.log
常用诊断命令:
-- 查看用户认证信息
SELECT user, host, plugin, authentication_string FROM mysql.user;
最后配置运行非 localhost 地址连接
#!/bin/bash
echo "=== MySQL 远程连接诊断 ==="
# 1. 检查配置
echo "1. 检查 MySQL 绑定地址:"
sudo grep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf
echo "2. 检查监听端口:"
netstat -tlnp | grep mysql
echo "3. 检查用户权限:"
mysql -uroot -p123456 -e "SELECT user, host FROM mysql.user WHERE user = 'root';"
# 2. 修复配置
echo "4. 修改绑定地址..."
sudo sed -i 's/bind-address.*=.*127.0.0.1/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
echo "5. 配置远程用户..."
mysql -uroot -p123456 << EOF
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
echo "6. 重启 MySQL..."
sudo systemctl restart mysql
echo "7. 验证配置:"
sudo grep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf
netstat -tlnp | grep mysql
echo "=== 修复完成,请测试远程连接 ==="


