概述
本文档介绍在 Ubuntu 22.04 (Jammy Jellyfish) 系统上安装 MySQL 5.7 的完整步骤。
系统要求
- Ubuntu 22.04 LTS
档详细介绍了在 Ubuntu 22.04 系统上安装、配置及维护 MySQL 5.7 的完整流程。内容包括环境清理、依赖安装、脚本自动化部署、安全加固、密码重置方法以及远程访问配置。同时提供了性能优化建议和常见故障排查步骤,适用于需要手动部署旧版本 MySQL 的开发或测试场景。

本文档介绍在 Ubuntu 22.04 (Jammy Jellyfish) 系统上安装 MySQL 5.7 的完整步骤。
# 停止 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
# 下载 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
# 更新包列表
sudo apt update
# 安装必要的依赖包
sudo apt install libaio1 libmecab2 libtinfo5 -y
创建 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
# 运行安装脚本
sudo ./install_mysql.sh
# 如果遇到依赖问题,运行修复
sudo apt install -f
# 启动 MySQL 服务
sudo systemctl start mysql
# 设置开机自启
sudo systemctl enable mysql
# 检查服务状态
sudo systemctl status mysql
# 运行安全安装脚本
sudo mysql_secure_installation
按照提示进行安全配置:
# 检查 MySQL 版本
mysql --version
# 登录 MySQL
sudo mysql -u root -p
# 在 MySQL 中查看状态
mysql> STATUS;
mysql> SHOW DATABASES;
mysql> EXIT;
# 如果安装过程中出现依赖错误
sudo apt install -f
sudo apt update
sudo apt install libaio1 libmecab2 libtinfo5
# 查看错误日志
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
# 检查 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
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
# 停止服务
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
sudo systemctl stop mysql
sudo systemctl status mysql # 确认服务已停止
# 备份原配置文件
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
# 启动 MySQL 服务(现在不需要密码即可登录)
sudo systemctl start mysql
# 检查服务状态
sudo systemctl status mysql
# 直接登录,不需要密码
sudo mysql -u root
-- 切换到 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;
# 恢复原配置(重新注释掉 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
# 使用新密码登录测试
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 密码重置完成!"
# 停止 MySQL
sudo systemctl stop mysql
# 以跳过权限方式启动
sudo mysqld_safe --skip-grant-tables --skip-networking &
# 无密码登录
mysql -u root
# 在 MySQL 中执行重置命令(同上)
# 完成后杀死进程并正常重启
sudo killall mysqld
sudo systemctl start mysql
# 运行安全安装脚本重置密码
sudo mysql_secure_installation
-- 登录 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
sudo tail -f /var/log/mysql/error.log-- 查看用户认证信息
SELECT user, host, plugin, authentication_string FROM mysql.user;
#!/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 "=== 修复完成,请测试远程连接 ==="

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online