Ubuntu 22.04 安装 MySQL 5.7 完整指南
概述
本文档介绍在 Ubuntu 22.04 (Jammy Jellyfish) 系统上安装 MySQL 5.7 的完整步骤。
系统要求
- Ubuntu 22.04 LTS
- 至少 2GB RAM
- 至少 2GB 可用磁盘空间
- 具有 sudo 权限的用户
安装步骤
1. 清理现有 MySQL 安装(如有)
# 停止 MySQL 服务sudo systemctl stop mysql # 卸载现有 MySQL 包sudoapt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* # 删除配置文件和数据sudorm -rf /etc/mysql /var/lib/mysql # 清理自动安装的依赖sudoapt autoremove sudoapt 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. 安装系统依赖
# 更新包列表sudoapt update # 安装必要的依赖包sudoaptinstall 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 # 如果遇到依赖问题,运行修复sudoaptinstall -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 # 登录 MySQLsudo mysql -u root -p # 在 MySQL 中查看状态 mysql> STATUS; mysql> SHOW DATABASES; mysql> EXIT;故障排除
常见问题解决
1. 依赖问题
# 如果安装过程中出现依赖错误sudoaptinstall -f sudoapt update sudoaptinstall libaio1 libmecab2 libtinfo5 2. 服务启动失败
# 查看错误日志sudotail -f /var/log/mysql/error.log # 检查配置文件sudo mysql --verbose --help |grep -A 1 -B 1"my.cnf"# 重新配置 MySQLsudo dpkg-reconfigure mysql-server-5.7 3. 连接问题
# 检查 MySQL 监听端口sudonetstat -tlnp |grep mysql # 检查防火墙设置sudo ufw status sudo ufw allow mysql 基本使用
创建新用户和数据库
-- 创建新数据库CREATEDATABASE mydatabase;-- 创建新用户CREATEUSER'myuser'@'localhost' IDENTIFIED BY'password';-- 授予权限GRANTALLPRIVILEGESON mydatabase.*TO'myuser'@'localhost';-- 刷新权限 FLUSH PRIVILEGES;备份和恢复
# 备份数据库 mysqldump -u root -p --all-databases > backup.sql # 恢复数据库 mysql -u root -p < backup.sql 性能优化建议
编辑 MySQL 配置文件
sudonano /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}'|xargssudo dpkg --purge # 删除残留文件sudorm -rf /etc/mysql /var/lib/mysql /var/log/mysql # 清理依赖sudoapt 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 模式
# 备份原配置文件sudocp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup # 启用 skip-grant-tables(取消注释)sudosed -i 's/#skip-grant-tables/skip-grant-tables/' /etc/mysql/mysql.conf.d/mysqld.cnf # 验证修改sudogrep 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;-- 查看当前用户信息SELECTuser, host, authentication_string FROMuserWHEREuser='root';-- 方法A:MySQL 5.7 专用密码重置命令UPDATEuserSET authentication_string = PASSWORD('您的新密码')WHEREuser='root';-- 方法B:如果上面不行,尝试这个UPDATEuserSET plugin ='mysql_native_password', authentication_string = PASSWORD('您的新密码')WHEREuser='root';-- 刷新权限 FLUSH PRIVILEGES;-- 退出 MySQLEXIT;步骤6:禁用 skip-grant-tables 模式并重启
# 恢复原配置(重新注释掉 skip-grant-tables)sudosed -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 模式..."sudosed -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; EOFecho"5. 恢复配置文件..."sudosed -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 方式
# 停止 MySQLsudo systemctl stop mysql # 以跳过权限方式启动sudo mysqld_safe --skip-grant-tables --skip-networking &# 无密码登录 mysql -u root # 在 MySQL 中执行重置命令(同上)# 完成后杀死进程并正常重启sudokillall mysqld sudo systemctl start mysql 替代方案2:使用 mysql_secure_installation
# 运行安全安装脚本重置密码sudo mysql_secure_installation 密码重置后的推荐操作
1. 配置远程访问(如果需要)
-- 登录 MySQL mysql -u root -p -- 创建远程用户或修改现有用户CREATEUSER'root'@'%' IDENTIFIED BY'您的密码';GRANTALLPRIVILEGESON*.*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
常用诊断命令:
-- 查看用户认证信息SELECTuser, host, plugin, authentication_string FROM mysql.user;最后配置运行非localhost地址连接
#!/bin/bashecho"=== MySQL 远程连接诊断 ==="# 1. 检查配置echo"1. 检查 MySQL 绑定地址:"sudogrep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf echo"2. 检查监听端口:"sudonetstat -tlnp |grep mysql echo"3. 检查用户权限:" mysql -uroot -p123456 -e "SELECT user, host FROM mysql.user WHERE user = 'root';"# 2. 修复配置echo"4. 修改绑定地址..."sudosed -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; EOFecho"6. 重启 MySQL..."sudo systemctl restart mysql echo"7. 验证配置:"sudogrep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf sudonetstat -tlnp |grep mysql echo"=== 修复完成,请测试远程连接 ==="