主题
MySQL服务部署
本文档详细介绍在CentOS 7系统上部署MySQL服务的完整步骤。
1. 环境准备
1.1 切换成root身份
bash
su - root # 切换到root用户1
1.2 检查系统版本
bash
cat /etc/redhat-release
# 输出示例:CentOS Linux release 7.9.2009 (Core)1
2
2
2. 卸载MariaDB(如果存在)
CentOS 7 默认安装了 MariaDB,需要先卸载:
bash
# 检查是否已安装MariaDB
rpm -qa | grep mariadb
# 卸载MariaDB
yum -y remove mariadb-libs1
2
3
4
2
3
4
3. 安装MySQL
3.1 下载MySQL官方Yum仓库
bash
# 下载MySQL 8.0官方仓库
# 如果wget未安装,先安装wget:yum -y install wget
wget https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm1
2
3
2
3
3.2 安装MySQL仓库
bash
# 安装下载的仓库包
yum -y localinstall mysql80-community-release-el7-3.noarch.rpm1
2
2
3.3 选择MySQL版本(可选)
如果需要安装MySQL 5.7而不是8.0,可以禁用8.0并启用5.7:
bash
# 禁用MySQL 8.0
yum-config-manager --disable mysql80-community
# 启用MySQL 5.7
yum-config-manager --enable mysql57-community
# 查看启用的仓库
yum repolist enabled | grep mysql1
2
3
4
5
6
2
3
4
5
6

3.4 安装MySQL服务器
bash
# 安装MySQL服务器
yum install -y mysql-community-server
# 如果报密钥错误用下面这个
yum install mysql-community-server -y --nogpgcheck1
2
3
4
2
3
4
4. 启动MySQL服务
4.1 启动MySQL服务
bash
# 启动MySQL服务
systemctl start mysqld
# 设置MySQL开机自启
systemctl enable mysqld
# 检查MySQL服务状态
systemctl status mysqld1
2
3
4
5
6
2
3
4
5
6
4.2 查看初始密码
MySQL 5.7+ 版本会为root用户生成临时密码:
bash
# 查看临时密码
sudo grep 'temporary password' /var/log/mysqld.log
# 输出示例:2023-12-01T10:30:00.123456Z 1 [Note] A temporary password is generated for root@localhost: abcdefg12345!1
2
3
2
3
5. MySQL安全配置
5.1 运行安全配置脚本
bash
# 运行MySQL安全配置脚本
sudo mysql_secure_installation1
2
2
配置过程:
- 输入root用户的当前密码(使用上面查到的临时密码)
- 是否设置密码验证策略:建议选择
y - 设置新密码:输入新的root密码(需要符合密码策略)
- 是否删除匿名用户:选择
y - 是否禁止root远程登录:根据需要选择(生产环境建议
y) - 是否删除test数据库:选择
y - 是否重新加载权限表:选择
y
5.2 手动修改root密码(如果需要)
bash
# 登录MySQL
mysql -u root -p
# 修改密码(MySQL 8.0)
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 修改密码(MySQL 5.7)
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');
# 刷新权限
FLUSH PRIVILEGES;
# 退出MySQL
EXIT;1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
6. 配置MySQL
6.1 编辑MySQL配置文件
bash
# 编辑主配置文件
sudo vi /etc/my.cnf1
2
2
6.2 常用配置参数
ini
[mysqld]
# 设置字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 设置默认存储引擎
default-storage-engine=INNODB
# 设置最大连接数
max_connections=200
# 设置查询缓存
query_cache_type=1
query_cache_size=32M
# 设置日志
log-error=/var/log/mysqld.log
slow_query_log=1
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=2
# 设置网络端口
port=3306
# 设置绑定地址(允许远程连接)
bind-address=0.0.0.0
# 设置时区
default-time-zone='+8:00'1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
6.3 重启MySQL服务
bash
# 重启MySQL使配置生效
sudo systemctl restart mysqld1
2
2
7. 防火墙配置
7.1 开放MySQL端口
bash
# 开放3306端口
sudo firewall-cmd --permanent --add-port=3306/tcp
# 重新加载防火墙配置
sudo firewall-cmd --reload
# 查看开放的端口
sudo firewall-cmd --list-ports1
2
3
4
5
6
2
3
4
5
6
7.2 或者关闭防火墙(测试环境)
bash
# 停止防火墙
sudo systemctl stop firewalld
# 禁用防火墙开机自启
sudo systemctl disable firewalld
setenforce 01
2
3
4
5
2
3
4
5
8. 创建数据库和用户
8.1 登录MySQL
bash
mysql -u root -p1
8.2 创建数据库
sql
-- 创建数据库
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 查看数据库
SHOW DATABASES;1
2
3
4
2
3
4
8.3 创建用户并授权
sql
-- 创建用户
CREATE USER 'appuser'@'%' IDENTIFIED BY 'userpassword';
-- 授予权限
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'%';
-- 或者只授予特定权限
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'appuser'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 查看用户权限
SHOW GRANTS FOR 'appuser'@'%';1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
8.4 创建测试表
sql
-- 使用数据库
USE myapp;
-- 创建测试表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入测试数据
INSERT INTO users (username, email) VALUES ('admin', 'admin@example.com');
INSERT INTO users (username, email) VALUES ('user1', 'user1@example.com');
-- 查询数据
SELECT * FROM users;1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
9. 远程连接测试
9.1 从其他机器连接
bash
# 使用MySQL客户端连接
mysql -h 服务器IP -P 3306 -u appuser -p
# 或者使用完整连接字符串
mysql -h 192.168.1.100 -P 3306 -u appuser -p myapp1
2
3
4
2
3
4
9.2 检查连接问题
如果连接失败,检查以下几点:
bash
# 检查MySQL服务状态
sudo systemctl status mysqld
# 检查端口监听
sudo netstat -tlnp | grep 3306
# 检查防火墙
sudo firewall-cmd --list-ports
# 检查MySQL日志
sudo tail -f /var/log/mysqld.log1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
10. 常用管理命令
10.1 服务管理
bash
# 启动MySQL
sudo systemctl start mysqld
# 停止MySQL
sudo systemctl stop mysqld
# 重启MySQL
sudo systemctl restart mysqld
# 查看状态
sudo systemctl status mysqld
# 查看错误日志
sudo tail -f /var/log/mysqld.log1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
10.2 数据库管理
sql
-- 查看所有数据库
SHOW DATABASES;
-- 查看当前数据库
SELECT DATABASE();
-- 查看所有表
SHOW TABLES;
-- 查看表结构
DESCRIBE users;
-- 查看用户
SELECT User, Host FROM mysql.user;
-- 查看进程列表
SHOW PROCESSLIST;
-- 查看状态信息
SHOW STATUS;1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
11. 备份和恢复
11.1 数据库备份
bash
# 备份单个数据库
mysqldump -u root -p myapp > myapp_backup.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > all_databases_backup.sql
# 压缩备份
mysqldump -u root -p myapp | gzip > myapp_backup.sql.gz1
2
3
4
5
6
2
3
4
5
6
11.2 数据库恢复
bash
# 恢复数据库
mysql -u root -p myapp < myapp_backup.sql
# 恢复压缩的备份
gunzip < myapp_backup.sql.gz | mysql -u root -p myapp1
2
3
4
5
2
3
4
5
11.3 设置定时备份
bash
# 创建备份脚本
sudo vi /usr/local/bin/mysql_backup.sh1
2
2
bash
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="myapp"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump -u root -p密码 $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz
# 删除7天前的备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
echo "Backup completed: ${DB_NAME}_${DATE}.sql.gz"1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bash
# 设置执行权限
sudo chmod +x /usr/local/bin/mysql_backup.sh
# 添加到crontab(每天凌晨2点备份)
sudo crontab -e
# 添加:0 2 * * * /usr/local/bin/mysql_backup.sh1
2
3
4
5
6
2
3
4
5
6
12. 性能优化
12.1 内存配置
ini
[mysqld]
# 缓冲池大小(建议为可用内存的70-80%)
innodb_buffer_pool_size = 1G
# 日志缓冲区大小
innodb_log_buffer_size = 16M
# 查询缓存大小
query_cache_size = 64M1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
12.2 磁盘I/O优化
ini
[mysqld]
# InnoDB日志文件大小
innodb_log_file_size = 256M
# 刷新方式
innodb_flush_log_at_trx_commit = 2
# 文件每表
innodb_file_per_table = 11
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
13. 故障排除
13.1 常见问题
问题1:MySQL启动失败
bash
# 检查错误日志
sudo tail -50 /var/log/mysqld.log
# 检查配置文件语法
sudo mysqld --help --verbose1
2
3
4
5
2
3
4
5
问题2:无法远程连接
bash
# 检查用户权限
mysql -u root -p -e "SELECT User, Host FROM mysql.user;"
# 检查绑定地址
sudo grep bind-address /etc/my.cnf1
2
3
4
5
2
3
4
5
问题3:忘记root密码
bash
# 停止MySQL
sudo systemctl stop mysqld
# 跳过权限验证启动
sudo mysqld_safe --skip-grant-tables &
# 登录并重置密码
mysql -u root
UPDATE mysql.user SET authentication_string = PASSWORD('新密码') WHERE User = 'root';
FLUSH PRIVILEGES;
EXIT;
# 重启MySQL
sudo systemctl restart mysqld1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
14. 监控和维护
14.1 状态监控
sql
-- 查看连接数
SHOW STATUS LIKE 'Threads_connected';
-- 查看查询统计
SHOW STATUS LIKE 'Com_%';
-- 查看慢查询
SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 10;1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
14.2 定期维护
sql
-- 优化表
OPTIMIZE TABLE users;
-- 检查表
CHECK TABLE users;
-- 修复表
REPAIR TABLE users;1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
15. 总结
通过以上步骤,你已经成功在CentOS 7上部署了MySQL服务。主要完成了:
- ✅ 环境准备和系统检查
- ✅ MySQL官方仓库安装
- ✅ MySQL服务器安装和配置
- ✅ 安全配置和用户管理
- ✅ 防火墙和网络配置
- ✅ 数据库创建和测试
- ✅ 备份策略制定
- ✅ 性能优化配置
- ✅ 监控和维护方案
现在你的MySQL服务已经可以正常使用了!记得定期进行备份和维护,确保数据安全。