MySQL安装配置教程:超详细图文教程(附MySQL安装包)
安装MySQL的方式有很多种,但二进制安装凭借“解压即用”的特点,成为生产环境中最推荐的部署方式。本文基于实际运维经验,从目录规范、用户创建到配置文件优化,完整记录MySQL 5.7二进制安装的全过程,并总结了6类常见启动失败案例及解决方案。
还在为源码编译安装MySQL头疼吗?二进制版本安装不仅快速,而且稳定可靠。本文将手把手教你如何在Linux系统(以CentOS 7为例)上安装MySQL 5.7的二进制版本,图文详解。
适用人群:运维工程师、后端开发、云服务器使用者、Linux初学者
前置要求:一台CentOS 7服务器,如果还没有,可以参考我前面的文章,VMware安装centos教程:https://blog.csdn.net/weixin_41558294/article/details/162388432
一、MySQL安装规范
-
MySQL安装方式:二进制安装(源码编译安装、yum 、rpm)
-
MySQL运行用户:
mysql:mysql 注意该用户是虚拟用户,只是用于mysql进程运行使用,不允许登录、不创建家目录
切换到root用户
useradd -s /sbin/nologin -M mysql
- MySQL目录规范:
下载目录 /server/tools
系统目录 /opt/mysql/mysql-xx.xx
软连接 ln -s /opt/mysql/mysql-xx.xx /usr/local/mysql
数据目录 /data/mysql/mysql+port/{data,logs}
配置文件 /data/mysql/mysql+port/my+port.cnf
-
确定libc版本,>=2.12,小于2.12会有报错
[root@test ~]# ldd --version ldd (GNU libc) 2.17 Copyright (C) 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 由 Roland McGrath 和 Ulrich Drepper 编写。 -
MySQL下载
通过网盘分享的文件:mysql-5.7.44-linux-glibc2.12-x86_64 链接: https://pan.baidu.com/s/12f0rVP1qfbhNLphWAw-Hww?pwd=tkp5 提取码: tkp5 --来自百度网盘的分享
二、二进制安装MySQL
1. 创建MySQL虚拟用户
useradd -s /sbin/nologin -M mysql

2. 创建MySQL目录
mkdir -p /server/tools
mkdir -p /opt/mysql
mkdir -p /data/mysql/mysql3306/{data,logs}
cd /server/tools

3. 上传MySQL二进制包
rz
如果没有这个工具,安装 `yum install -y lrzsz`

4. 解压MySQL二进制包
tar xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz

5. 将软件部分移动到指定目录
mv mysql-5.7.44-linux-glibc2.12-x86_64 /opt/mysql/mysql-5.7.44

6. 创建软连接
ln -s /opt/mysql/mysql-5.7.44/ /usr/local/mysql

7. 删除mariadb
rpm -e --nodeps mariadb-libs

8. 配置文件整理
编辑 /data/mysql/mysql3306/my3306.cnf:
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql/mysql3306/data
socket = /data/mysql/mysql3306/mysql.sock
server_id = 1
port = 3306
log_error=/data/mysql/mysql3306/logs/error.log
log_bin=/data/mysql/mysql3306/logs/mysql-bin
binlog_format=row
gtid_mode=on
enforce_gtid_consistency=true
log_slave_updates=1
max_connections=1024
wait_timeout=60
sort_buffer_size=2M
max_allowed_packet=32M
join_buffer_size=2M
innodb_buffer_pool_size=128M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_log_files_in_group=2
binlog_cache_size=2M
max_binlog_cache_size=8M
max_binlog_size=512M
expire_logs_days=7
slow_query_log=on
slow_query_log_file=/data/mysql/mysql3306/logs/slow.log
long_query_time=0.5
log_queries_not_using_indexes=1

9. 安装MySQL依赖包
```
yum install libaio-devel -y
yum install numactl -y
```

10. 更改MySQL相关目录的用户组
```
chown -R mysql:mysql /data/*
```

11. 初始化MySQL数据库
```
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data
```

12. 加入环境变量
编辑 `vim /etc/profile`:
```
PATH="/usr/local/mysql/bin:$PATH"
source /etc/profile
```


13. 启动MySQL
```
mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &
```
14. 查看是否启动成功
```
netstat -lntup |grep mysql
```

15. MySQL8.0安装教程
- Linux安装MySQL 8.0教程:https://blog.csdn.net/weixin_41558294/article/details/162642562
- Windows安装MySQL 8.0教程:https://blog.csdn.net/weixin_41558294/article/details/162705242
三、首次登录MySQL与MySQL密码修改
3.1 无密码登录
# 本地登录
mysql -uroot -p -S /data/mysql/mysql3306/mysql.sock

3.2 修改root密码
# MySQL 5.7中password字段已改为authentication_string
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';

3.3 清理无用用户
DELETE FROM mysql.user WHERE user != 'root';
四、MySQL启动失败常见问题与排查
4.1 MySQL目录权限问题
错误信息:[ERROR] Could not open file '/data/mysql/mysql3306/logs/error.log' for error logging: Permission denied
原因:数据目录的所有者不是mysql用户
解决:
chown -R mysql:mysql /data/mysql
4.2 MySQL配置文件参数错误
错误信息:[ERROR] unknown variable 'xxx'
原因:参数拼写错误或该版本不支持该参数
解决:检查配置文件,修正错误参数
4.3 MySQL配置文件未正确加载
解决:启动时必须通过 --defaults-file 指定配置文件
mysqld --verbose --help | grep defaults
4.4 MySQL端口被占用
错误信息:[ERROR] Do you already have another mysqld server running on port: 3306?
解决:
# 查找占用端口的进程
netstat -lntup | grep 3306
# 修改配置文件中的端口,或停止冲突的服务
4.5 MySQL二进制日志文件丢失
错误信息:[ERROR] Failed to open log (file '.../mysql-bin.000014', errno 2)
解决:编辑 mysql-bin.index 文件,删除对应的日志记录
4.6 MySQL共享表空间大小不匹配
错误信息:[ERROR] InnoDB: The Auto-extending innodb_system data file './ibdata1' is of a different size
解决:在初始化前设置 innodb_data_file_path=ibdata1:12M:autoextend,或删除data目录重新初始化
4.7 MySQL配置文件隐形字符问题
有时启动失败是因为配置文件中存在看不见的字符(如Windows编辑器的换行符、BOM头等)。
解决:使用 dos2unix 工具转换格式,或用 vim 的 :set ff=unix 修复。
4.8 MySQL启动失败排查方法
- 确认版本和启动方式:明确当前MySQL版本及启动命令
- 查看错误日志:
tail -100 /data/mysql/mysql3306/logs/error.log - 检查配置文件:
mysqld --defaults-file=xxx --verbose --help - 检查系统资源:磁盘空间、内存、端口等
五、连接MySQL数据库的方式
本地连接(通过socket):
mysql -uroot -p -S /data/mysql/mysql3306/mysql.sock
远程连接(通过TCP/IP):
mysql -uroot -p -P3306 -h192.168.58.51
六、MySQL安全加固建议
- 使用非root用户运行:已通过
mysql:mysql用户实现 - 设置强密码:避免使用默认或简单密码
- 删除匿名用户:
DELETE FROM mysql.user WHERE User=''; - 限制远程root登录:仅允许localhost登录
- 定期备份:配合二进制日志实现增量备份
- 启用慢查询日志:便于性能分析和优化
七、常用MySQL管理命令
-- 创建数据库
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户并授权
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO 'appuser'@'localhost';
-- 查看数据库状态
SHOW STATUS LIKE 'Threads_connected';
SHOW PROCESSLIST;
-- 导入SQL文件
SOURCE /path/to/backup.sql;
八、MySQL常用命令与基础操作
8.1 MySQL数据库登录
# 本地登录(通过socket)
mysql -uroot -p -S /data/mysql/mysql3306/mysql.sock
# 远程登录
mysql -uroot -p -P3306 -h192.168.58.51
-u:指定用户名-p:提示输入密码-h:指定主机IP地址-P:指定端口
8.2 MySQL数据库基础操作(DDL)
查看与切换数据库:
-- 查看所有数据库
SHOW DATABASES;
-- 使用(切换)数据库
USE 数据库名;
-- 查看当前使用的数据库
SELECT DATABASE();
创建与删除数据库:
-- 创建数据库(指定字符集)
CREATE DATABASE 数据库名 CHARSET=utf8mb4;
-- 删除数据库
DROP DATABASE 数据库名;
8.3 MySQL表的基础操作
查看与删除表:
-- 显示当前数据库所有表
SHOW TABLES;
-- 删除表
DROP TABLE 表名;
创建表:
CREATE TABLE 表名 (
列名 类型 约束1 约束2,
列名 类型 约束
);
示例:
CREATE TABLE emp (
ename VARCHAR(10),
hiredate DATE,
sal DECIMAL(10,2),
deptno INT(2)
);
查看表结构:
-- 查看表定义
DESC 表名;
-- 查看详细表定义(含创建语句)
SHOW CREATE TABLE 表名 \G;
修改表结构:
-- 修改字段类型
ALTER TABLE emp MODIFY ename VARCHAR(20);
-- 添加字段
ALTER TABLE emp ADD COLUMN age INT(3);
-- 删除字段
ALTER TABLE emp DROP COLUMN age;
-- 字段改名
ALTER TABLE emp CHANGE age age1 INT(4);
-- 修改表名
ALTER TABLE emp RENAME emp1;
8.4 MySQL数据操纵语句(DML)
插入数据:
-- 指定字段插入
INSERT INTO emp (ename, hiredate, sal, deptno)
VALUES ('zhangsan', '2018-01-01', 2000, 1);
-- 不指定字段(按顺序全部插入)
INSERT INTO emp VALUES ('lisi', '2018-01-01', 2000, 1);
-- 批量插入
INSERT INTO dept VALUES (1, 'dept1'), (2, 'dept2');
更新与删除数据:
-- 修改记录
UPDATE emp SET sal=4000, deptno=2 WHERE ename='zhangsan';
-- 删除记录
DELETE FROM emp WHERE ename='zhangsan';
查询数据:
-- 查询所有记录
SELECT * FROM emp;
-- 查询不重复的记录
SELECT DISTINCT deptno FROM emp;
-- 条件查询
SELECT * FROM emp WHERE deptno=1 AND sal<3000;
-- 排序和限制(取前2条)
SELECT * FROM emp ORDER BY deptno DESC LIMIT 2;
-- 分页查询(从第0条开始取10条)
SELECT * FROM emp ORDER BY deptno DESC LIMIT 0,10;
8.5 MySQL字段约束
| 约束类型 | 关键字 | 说明 |
|---|---|---|
| 主键约束 | PRIMARY KEY | 唯一标识每一行,不能为NULL |
| 唯一约束 | UNIQUE | 列中所有值唯一 |
| 非空约束 | NOT NULL | 列不能为空 |
| 默认约束 | DEFAULT | 未提供值时使用默认值 |
| 自动递增 | AUTO_INCREMENT | 自动生成唯一值 |
| 外键约束 | FOREIGN KEY | 建立和维护表间关系 |
8.6 MySQL系统变量管理
查询变量:
-- 查询会话变量(默认)
SHOW VARIABLES LIKE '%read_only%';
SHOW VARIABLES LIKE '%chara%';
-- 查询全局变量
SHOW GLOBAL VARIABLES LIKE '%read_only%';
修改变量:
-- 修改全局变量(影响后续新连接,重启失效)
SET GLOBAL character_set_client=utf8;
-- 修改会话变量(仅影响当前会话)
SET character_set_client=gbk;
查询状态变量(用于监控和性能分析):
SHOW SESSION STATUS LIKE '%Table_locks_immediate%';
九、MySQL用户与权限管理
9.1 创建用户
-- 方式一:使用CREATE USER
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
-- 示例
CREATE USER 'test1'@'localhost' IDENTIFIED BY 'abc123';
⚠️ 注意:MySQL的账号由“用户名”和“登录主机”共同构成,两者组合才是一个完整账号。
9.2 授权管理
-- 授予权限
GRANT 权限 ON 数据库.表 TO '用户'@'主机' IDENTIFIED BY '密码';
-- 示例:授予test数据库的所有权限
GRANT ALL ON test.* TO 'user1'@'%' IDENTIFIED BY '123456';
-- 查看用户权限
SHOW GRANTS FOR 'user'@'localhost';
-- 撤销权限
REVOKE 权限 ON 数据库.表 FROM '用户'@'主机';
-- 示例:撤销update权限
REVOKE UPDATE ON *.* FROM 'lisi'@'localhost';
9.3 查看与删除用户
-- 查看所有用户
SELECT user, authentication_string, host FROM mysql.user;
-- 删除用户
DROP USER 'user'@'host';
-- 重命名用户
RENAME USER 'old_user'@'host' TO 'new_user'@'host';
9.4 修改密码
-- 修改当前登录用户密码
SET PASSWORD = PASSWORD('新密码');
-- 修改其他用户密码
SET PASSWORD FOR 'user'@'host' = PASSWORD('新密码');
9.5 MySQL忘记root密码的解决办法
# 1. 停止MySQL服务
systemctl stop mysqld.service
# 2. 在配置文件/etc/my.cnf的[mysqld]下添加
skip-grant-tables
# 3. 重启MySQL,无密码登录后修改密码
UPDATE mysql.user SET authentication_string = PASSWORD('新密码') WHERE user='root';
# 4. 删除配置文件中skip-grant-tables参数,重启MySQL
十、MySQL备份与恢复
10.1 mysqldump全量备份
mysqldump 是MySQL自带的逻辑备份工具,通过生成SQL脚本来备份数据库。
备份单个数据库:
mysqldump -u 用户名 -p 数据库名 > 备份文件.sql
# 示例
mysqldump -u root -p mydb > mydb_backup.sql
备份所有数据库:
mysqldump -u root -p --all-databases > all_databases_backup.sql
备份特定表:
mysqldump -u root -p 数据库名 表名 > 表备份.sql
# 示例
mysqldump -u root -p mydb users > users_backup.sql
备份时加常用选项:
mysqldump --all-databases --master-data=2 --single-transaction \
--routines --events --triggers > all_databases.sql
10.2 数据恢复
还原到指定数据库:
mysql -u 用户名 -p 数据库名 < 备份文件.sql
# 示例
mysql -u root -p mydb < mydb_backup.sql
创建新数据库并恢复:
# 先创建数据库
mysql -u root -p -e "CREATE DATABASE newdb;"
# 再恢复数据
mysql -u root -p newdb < mydb_backup.sql
恢复所有数据库:
mysql -u root -p < all_databases_backup.sql
10.3 备份注意事项
- 备份频率:根据业务需求确定,重要数据建议定期备份
- 备份文件存储:存放在安全位置,建议加密和访问控制
- 测试恢复:定期测试备份文件的有效性
- 性能影响:大规模备份建议在低峰时段进行
- 备份和恢复过程中确保MySQL服务正在运行
十一、MySQL性能优化
11.1 核心性能参数
连接管理参数:
| 参数 | 说明 | 建议值 |
|---|---|---|
max_connections | 最大并发连接数 | 并发用户数的1.2-1.5倍 |
thread_cache_size | 线程缓存数量 | 根据Threads_created指标调整 |
内存配置参数:
| 参数 | 说明 | 建议值 |
|---|---|---|
innodb_buffer_pool_size | InnoDB核心缓存区 | 物理内存的50%-70% |
key_buffer_size | MyISAM索引缓存 | InnoDB为主时保持默认8MB |
日志配置参数:
| 参数 | 说明 | 建议值 |
|---|---|---|
slow_query_log | 开启慢查询日志 | 生产环境开启 |
long_query_time | 慢查询阈值 | 0.5-2秒 |
innodb_log_file_size | 重做日志大小 | innodb_buffer_pool_size / 4 |
11.2 性能监控指标
- QPS/TPS:每秒查询数/事务数,反映系统吞吐量
- 连接使用率:
Threads_connected / max_connections - 缓存命中率:InnoDB缓冲池命中率应 > 99%
- 锁等待时间:
Innodb_row_lock_waits值过高需优化事务
11.3 诊断与调优工具
-- 查看运行状态
SHOW GLOBAL STATUS LIKE 'Threads%';
-- 查看InnoDB引擎状态
SHOW ENGINE INNODB STATUS\G
-- 查看当前参数值
SHOW VARIABLES LIKE 'max_connections';
-- 动态修改参数(重启失效)
SET GLOBAL max_connections = 500;
11.4 参数调优原则
- 循序渐进:每次只修改1-2个参数,观察效果
- 监控先行:优化前建立性能基线
- 因地制宜:根据工作负载调整配置
- 动态调整优先:先在线调整观察效果,再写入配置文件固化
十二、MySQL主从复制配置
12.1 环境准备
- 两台服务器(Master和Slave),建议配置相同
- 操作系统:Linux(如CentOS 7)
- MySQL版本:5.7或更高,主从版本需一致
- 确保两台服务器网络互通
12.2 主库配置(Master)
编辑配置文件 /etc/my.cnf:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=row
重启MySQL服务后,创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
获取二进制日志位置:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
-- 记录 File 和 Position 的值
12.3 从库配置(Slave)
编辑配置文件 /etc/my.cnf:
[mysqld]
server-id=2
log-bin=mysql-bin
binlog-format=row
relay-log=mysql-relay-bin
log-slave-updates=1
read-only=1
12.4 数据同步与启动复制
# 在主库备份数据
mysqldump --all-databases --master-data=2 --single-transaction > all_databases.sql
# 传输到从库
scp all_databases.sql user@slave_ip:/path/to/backup/
# 在从库恢复
mysql < /path/to/backup/all_databases.sql
配置从库并启动:
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=12345;
START SLAVE;
-- 检查复制状态
SHOW SLAVE STATUS\G
十三、日常运维与安全加固
13.1 安全加固建议
- 使用专用用户运行:使用
mysql:mysql虚拟用户运行服务 - 删除匿名用户:
DELETE FROM mysql.user WHERE User=''; - 删除测试数据库:
DROP DATABASE test; - 限制root远程访问:仅允许localhost登录
- 最小化权限原则:按需授予用户最小必要权限
- 禁用匿名账户:确保没有空用户名的账户
13.2 日志管理
MySQL日志类型包括:错误日志、通用查询日志、二进制日志、慢查询日志
| 日志类型 | 说明 | 配置参数 |
|---|---|---|
| 错误日志 | 记录启动、停止及运行错误 | log_error |
| 二进制日志 | 记录DDL、DML等变更操作 | log_bin |
| 慢查询日志 | 记录超过阈值的SQL | slow_query_log |
| 通用查询日志 | 记录所有连接和查询 | general_log |
13.3 日常监控要点
- 监控数据库连接数、CPU使用率、内存使用率、磁盘空间
- 定期分析慢查询日志,优化SQL语句
- 监控
Threads_connected与max_connections的比率 - 关注
Innodb_row_lock_waits锁等待情况
13.4 多实例部署
MySQL支持在一台服务器上部署多个实例,每个实例通过不同的端口提供服务。各实例之间相互独立,拥有各自的datadir、port、socket和pid文件。
# 多实例部署时,每个实例使用独立的配置文件
/data/mysql/mysql3306/my3306.cnf # 实例1(端口3306)
/data/mysql/mysql3307/my3307.cnf # 实例2(端口3307)
通过以上步骤,你应该能在CentOS 7系统上顺利完成MySQL 5.7的二进制安装与配置。二进制安装方式相比源码编译更加快速便捷,同时保持了良好的可控性,非常适合生产环境部署。
建议在实际操作中注意以下几点:
- 严格按照目录规范组织文件,便于后期维护和多实例管理
- 初始化时根据安全需求选择
--initialize-insecure或--initialize - 遇到启动失败时,第一时间查看
error.log错误日志定位问题
如果在安装过程中遇到问题,欢迎在评论区留言交流。
更多推荐


所有评论(0)