前言
MySQL作为最流行的开源关系数据库,在Linux环境中的安装配置是每个开发者和运维的必备技能。本文将提供一套从零开始的完整安装流程,涵盖Ubuntu、CentOS两大主流发行版,包含性能优化、安全加固、远程访问配置等生产环境实用技巧,助你快速搭建稳定可靠的MySQL数据库环境。
一、发行版选择与环境准备
系统要求检查
bash
1. 确认系统架构和内存
uname -m # 查看64位还是32位
free -h # 内存至少2GB推荐
2. 检查是否已有MySQL
systemctl status mysql
或
ps aux | grep mysqld
3. 清理旧版本(如有冲突)
sudo apt remove --purge mysql-* # Ubuntu
sudo yum remove mysql* # CentOS
二、Ubuntu 22.04/20.04 安装MySQL 8.0
- 官方仓库安装(推荐)
bash
更新包列表
sudo apt update
sudo apt upgrade -y
安装MySQL服务器
sudo apt install mysql-server -y
查看安装版本
mysql --version
输出:mysql Ver 8.0.33 for Linux on x86_64
- 安全初始化配置
bash
运行安全安装脚本
sudo mysql_secure_installation
交互式配置:
- 设置密码强度验证策略:选0-2(0最弱,2最强)
- 设置root密码:输入强密码
- 删除匿名用户:输入Y
- 禁止root远程登录:输入Y(生产环境建议)
- 删除测试数据库:输入Y
- 重新加载权限表:输入Y
- 手动配置(如需自定义)
bash
如果跳过安全脚本,手动设置密码:
sudo mysql
MySQL命令行中执行:
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘你的强密码’;
FLUSH PRIVILEGES;
EXIT;
三、CentOS 8/RHEL 8 安装MySQL 8.0
- 添加官方仓库并安装
bash
下载MySQL官方仓库
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm
禁用默认的MySQL模块
sudo dnf module disable mysql -y
安装MySQL服务器
sudo dnf install mysql-community-server -y
启动服务并设置开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld
2. 获取临时密码并修改
bash
查看临时root密码(CentOS首次安装后生成)
sudo grep ‘temporary password’ /var/log/mysqld.log
输出:A temporary password is generated for root@localhost: xxxxxxxxxx
使用临时密码登录
mysql -uroot -p
输入上面获取的临时密码
修改root密码(MySQL命令行中执行)
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘你的新密码’;
FLUSH PRIVILEGES;
3. 运行安全脚本
bash
登出MySQL后运行
mysql_secure_installation
按提示完成安全配置(与Ubuntu相同)
四、基础管理与配置
- 服务管理命令
bash
Ubuntu/Debian
sudo systemctl start mysql # 启动
sudo systemctl stop mysql # 停止
sudo systemctl restart mysql # 重启
sudo systemctl status mysql # 查看状态
sudo systemctl enable mysql # 开机自启
CentOS/RHEL
sudo systemctl start mysqld # 注意服务名不同
sudo systemctl status mysqld
2. 登录MySQL数据库
bash
本地登录
mysql -u root -p
指定主机登录
mysql -h localhost -u root -p
查看所有数据库
SHOW DATABASES;
查看用户权限
SELECT user, host FROM mysql.user;
3. 创建新用户和数据库
bash
登录MySQL后执行
– 创建数据库
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
– 创建用户
CREATE USER ‘myuser’@‘localhost’ IDENTIFIED BY ‘StrongPass123!’;
– 授予权限
GRANT ALL PRIVILEGES ON mydb.* TO ‘myuser’@‘localhost’;
– 刷新权限
FLUSH PRIVILEGES;
– 查看用户权限
SHOW GRANTS FOR ‘myuser’@‘localhost’;
五、性能优化配置
- 调整MySQL配置文件
bash
备份原配置
sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.backup
或(CentOS)
sudo cp /etc/my.cnf /etc/my.cnf.backup
编辑配置文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu
sudo nano /etc/my.cnf # CentOS
2. 关键优化参数(8GB内存服务器示例)
ini
[mysqld]
基础设置
default_authentication_plugin = mysql_native_password
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
连接设置
max_connections = 200
connect_timeout = 10
wait_timeout = 600
interactive_timeout = 600
内存设置
key_buffer_size = 256M
innodb_buffer_pool_size = 4G # 设置为物理内存的50%-70%
innodb_log_file_size = 512M
innodb_log_buffer_size = 16M
性能优化
innodb_flush_log_at_trx_commit = 2 # 平衡性能与安全
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
query_cache_type = 0 # MySQL 8.0已移除查询缓存
慢查询日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
3. 应用配置并重启
bash
重启MySQL使配置生效
sudo systemctl restart mysql # Ubuntu
sudo systemctl restart mysqld # CentOS
检查配置是否生效
mysql -u root -p -e “SHOW VARIABLES LIKE ‘innodb_buffer_pool_size’;”
六、安全加固措施
- 防火墙配置
bash
Ubuntu UFW防火墙
sudo ufw allow 3306/tcp
sudo ufw reload
CentOS Firewalld防火墙
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
2. 创建专用MySQL用户(非root运行)
bash
创建系统用户组
sudo groupadd mysqlgroup
sudo useradd -r -g mysqlgroup -s /bin/false mysqldb
更改MySQL数据目录权限
sudo chown -R mysqldb:mysqlgroup /var/lib/mysql
sudo chmod -R 750 /var/lib/mysql
3. 启用SSL加密连接
bash
检查是否支持SSL
mysql -u root -p -e “SHOW VARIABLES LIKE ‘%ssl%’;”
自动生成SSL证书(如果未启用)
sudo mysql_ssl_rsa_setup --uid=mysql
在配置文件中启用SSL
添加:
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem
require_secure_transport=ON # 强制SSL连接
4. 审计与监控
bash
安装审计插件(MySQL Enterprise功能,社区版可用替代)
或使用通用日志
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log
定期检查错误日志
sudo tail -f /var/log/mysql/error.log
七、备份与恢复
- 使用mysqldump备份
bash
备份单个数据库
mysqldump -u root -p mydb > mydb_backup_$(date +%Y%m%d).sql
备份所有数据库
mysqldump -u root -p --all-databases > all_db_backup_$(date +%Y%m%d).sql
带压缩备份
mysqldump -u root -p mydb | gzip > mydb_backup_$(date +%Y%m%d).sql.gz
2. 定时自动备份(Crontab)
bash
编辑crontab
crontab -e
添加(每天凌晨2点备份)
0 2 * * * /usr/bin/mysqldump -u root -p密码 mydb > /backup/mydb_$(date +%Y%m%d).sql
0 3 * * * find /backup -name “*.sql” -mtime +7 -delete # 删除7天前备份
3. 恢复数据库
bash
创建新数据库
mysql -u root -p -e “CREATE DATABASE mydb_restore;”
恢复数据
mysql -u root -p mydb_restore < mydb_backup.sql
或直接在MySQL中执行
SOURCE /path/to/backup.sql;
八、远程访问配置(谨慎开启)
- 创建远程访问用户
bash
登录MySQL
mysql -u root -p
创建允许远程连接的用户(生产环境建议限制IP)
CREATE USER ‘remoteuser’@‘%’ IDENTIFIED BY ‘StrongRemotePass123!’;
GRANT ALL PRIVILEGES ON mydb.* TO ‘remoteuser’@‘%’;
FLUSH PRIVILEGES;
更安全的做法:限制特定IP
CREATE USER ‘remoteuser’@‘192.168.1.%’ IDENTIFIED BY ‘StrongRemotePass123!’;
2. 修改绑定地址
bash
编辑配置文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu
找到bind-address,改为:
bind-address = 0.0.0.0 # 允许所有IP访问
或
bind-address = 192.168.1.100 # 指定服务器IP
重启MySQL
sudo systemctl restart mysql
3. 测试远程连接
bash
从另一台机器测试
mysql -h 服务器IP -u remoteuser -p
九、故障排除
- 忘记root密码
bash
停止MySQL服务
sudo systemctl stop mysql
安全模式启动
sudo mysqld_safe --skip-grant-tables &
无密码登录
mysql -u root
重置密码(MySQL命令行)
FLUSH PRIVILEGES;
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘新密码’;
EXIT;
重启MySQL
sudo systemctl restart mysql
2. 端口被占用检查
bash
sudo netstat -tulnp | grep :3306
sudo ss -tulnp | grep :3306
3. 查看错误日志
bash
Ubuntu
sudo tail -f /var/log/mysql/error.log
CentOS
sudo tail -f /var/log/mysqld.log
十、生产环境检查清单
✅ 安装完成验证:
MySQL服务正常运行:systemctl status mysql
可以本地登录:mysql -u root -p
版本正确:mysql --version
端口监听正常:ss -tuln | grep :3306
✅ 安全配置验证:
root不能远程登录
匿名用户已删除
测试数据库已删除
防火墙已配置
使用强密码
✅ 性能优化验证:
配置文件已优化
缓冲池大小合适
字符集为utf8mb4
慢查询日志已开启
✅ 备份方案就绪:
备份脚本已测试
自动备份已配置
备份文件可正常恢复
安装成功标志
能够用root用户正常登录MySQL
可以创建数据库和用户
服务稳定运行,无错误日志
配置优化后性能提升
备份恢复流程测试通过
最佳实践建议:
生产环境避免使用root远程连接
定期更新MySQL安全补丁
启用binlog用于数据恢复和主从复制
使用监控工具(如Prometheus + Grafana)监控数据库状态
现在,你已经拥有了一个经过优化和安全加固的MySQL数据库环境,可以开始部署你的应用了!