1. 为什么选择Ubuntu安装MySQLMySQL作为最流行的开源关系型数据库之一在Web应用、数据分析和企业系统中广泛应用。而Ubuntu作为最受欢迎的Linux发行版其稳定的软件源和活跃的社区支持使其成为部署MySQL的理想平台。我在过去五年中至少为二十多个项目配置过UbuntuMySQL环境发现这种组合在性能调优和故障排查方面都有明显优势。选择在Ubuntu上安装MySQL主要基于以下几个实际考量Ubuntu的APT包管理系统能自动解决依赖关系避免手动安装的版本冲突官方维护的MySQL软件包经过充分测试稳定性有保障系统服务集成完善开机自启、日志轮转等基础功能开箱即用安全更新及时通过标准系统更新渠道即可获取补丁2. 安装前的准备工作2.1 系统环境检查在开始安装前建议先检查系统基本信息。打开终端执行lsb_release -a # 查看Ubuntu版本 uname -m # 查看CPU架构 free -h # 查看内存情况 df -h # 查看磁盘空间我遇到过不少因为系统版本不匹配导致的安装失败案例。特别是从Ubuntu 18.04升级到20.04后一些旧的配置方式不再适用。确保你的系统至少满足Ubuntu 18.04/20.04/22.04 LTS版本长期支持版更稳定2GB以上内存生产环境建议4GB10GB可用磁盘空间实际需求取决于数据量2.2 软件源配置MySQL官方提供了专门的APT仓库比Ubuntu默认源更新更快sudo apt update sudo apt install wget 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 Workbench可选图形化管理工具不启用MySQL Connectors除非特别需要注意如果遇到Unable to locate package错误可能是系统时间不正确先执行sudo apt install ntpdate sudo ntpdate pool.ntp.org同步时间3. MySQL服务器安装详解3.1 核心安装步骤执行以下命令开始安装sudo apt update sudo apt install mysql-server安装过程会提示设置root密码建议12位以上包含大小写字母、数字和特殊字符选择认证插件建议保持默认的caching_sha2_password是否移除匿名用户选择是是否禁止root远程登录生产环境建议是是否移除测试数据库选择是是否立即重载权限表选择是3.2 安装后验证安装完成后检查服务状态systemctl status mysql正常应该看到active (running)状态。进一步验证mysql -u root -p -e SELECT VERSION();如果返回MySQL版本号如8.0.33说明安装成功。我建议再运行mysqlcheck -u root -p --all-databases检查所有数据库的完整性这在某些硬件环境下能提前发现存储引擎问题。4. 安全加固与基本配置4.1 运行安全脚本MySQL提供了安全配置向导sudo mysql_secure_installation这个脚本会引导你完成密码强度验证策略设置匿名用户删除确认root远程登录限制测试数据库移除权限表立即重载实际经验在云服务器上建议额外限制MySQL只监听内网IP。编辑/etc/mysql/mysql.conf.d/mysqld.cnf找到bind-address改为bind-address 127.0.0.14.2 创建管理用户不建议直接使用root账户操作应该创建专用管理用户CREATE USER adminlocalhost IDENTIFIED BY 复杂密码; GRANT ALL PRIVILEGES ON *.* TO adminlocalhost WITH GRANT OPTION; FLUSH PRIVILEGES;我习惯还会创建一个监控专用账户CREATE USER monitorlocalhost IDENTIFIED BY 另一组复杂密码; GRANT PROCESS, REPLICATION CLIENT ON *.* TO monitorlocalhost;5. 性能调优基础5.1 关键参数配置编辑MySQL配置文件通常位于/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf[mysqld] innodb_buffer_pool_size 1G # 建议物理内存的50-70% innodb_log_file_size 256M max_connections 100 query_cache_size 0 # MySQL 8.0已移除查询缓存 table_open_cache 4000调整后需要重启服务sudo systemctl restart mysql5.2 监控工具设置安装常用监控工具sudo apt install mytop sudo apt install sysstat配置基础的监控命令# 实时监控 mytop -u admin -p密码 -d 5 # 性能快照 mysqladmin -u admin -p ext -i10 | grep -E Queries|Threads_connected|Threads_running6. 常见问题排查6.1 连接问题如果无法连接MySQL按以下步骤排查检查服务状态systemctl status mysql检查端口监听sudo netstat -tulnp | grep 3306检查错误日志sudo tail -50 /var/log/mysql/error.log常见错误解决方案Access denied检查用户名密码确认host限制Too many connections增加max_connections或优化连接池Cant connect to local MySQL server检查是否绑定了错误IP6.2 性能问题慢查询排查方法-- 启用慢查询日志 SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 2; -- 查看正在运行的查询 SHOW PROCESSLIST; -- 分析特定查询 EXPLAIN SELECT * FROM 大表 WHERE 条件;我常用的优化检查清单是否有合适的索引检查EXPLAIN输出是否全表扫描rows列数值过大是否使用了临时表Extra列出现Using temporary排序方式Using filesort通常需要优化7. 备份与恢复策略7.1 基础备份方法使用mysqldump进行逻辑备份# 完整备份 mysqldump -u admin -p --all-databases --single-transaction full_backup.sql # 单库备份 mysqldump -u admin -p --databases 库名 --routines db_backup.sql # 压缩备份 mysqldump -u admin -p --all-databases | gzip full_backup.sql.gz重要提示备份前确保有足够磁盘空间特别是数据量大的情况。我曾经遇到过因为/tmp空间不足导致备份失败的情况。7.2 定时备份方案创建每日自动备份脚本/usr/local/bin/mysql_backup.sh#!/bin/bash DATE$(date %Y%m%d) BACKUP_DIR/backups/mysql mkdir -p $BACKUP_DIR mysqldump -u admin -p密码 --all-databases --single-transaction | gzip $BACKUP_DIR/full_$DATE.sql.gz find $BACKUP_DIR -type f -mtime 30 -delete然后添加到crontabsudo crontab -e添加一行0 2 * * * /usr/local/bin/mysql_backup.sh这会在每天凌晨2点执行完整备份并自动删除30天前的旧备份。8. 高可用方案简介对于生产环境建议考虑以下高可用方案8.1 主从复制配置在主服务器master上CREATE USER repl从服务器IP IDENTIFIED BY 复制密码; GRANT REPLICATION SLAVE ON *.* TO repl从服务器IP; FLUSH PRIVILEGES;修改主服务器配置[mysqld] server-id 1 log_bin mysql-bin binlog_format ROW在从服务器上CHANGE MASTER TO MASTER_HOST主服务器IP, MASTER_USERrepl, MASTER_PASSWORD复制密码, MASTER_LOG_FILEmysql-bin.000001, MASTER_LOG_POS具体位置; START SLAVE;8.2 监控复制状态检查复制状态命令SHOW SLAVE STATUS\G关键指标Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 应接近于0我在实际运维中发现网络延迟和从服务器负载过高是复制延迟的最常见原因。建议在从服务器上定期执行SHOW PROCESSLIST监控长时间运行的查询。
阅读完成 · 觉得有帮助?