【Ubuntu安装MySQL教程】二进制部署8.0.45全流程(附MySQL安装包,避坑指南)
前言
在Linux运维和Web开发中,Ubuntu安装MySQL教程是每一位后端工程师、DBA和运维人员绕不开的必修课。MySQL作为全球最流行的开源关系型数据库,凭借其高性能、高可靠性和丰富的生态,支撑着无数互联网企业的核心业务。然而,很多初学者在Ubuntu系统上安装MySQL时,往往只懂得使用apt install一键安装,这种方式虽然简单,却存在版本滞后、目录结构不清晰、难以定制化配置等问题。
本文带来的Ubuntu安装MySQL教程,将采用通用二进制包(Generic Binary) 的方式进行部署。相比于APT仓库安装,二进制包安装具有三大优势:版本自主可控(可选择最新稳定版如8.0.45)、目录结构自定义(便于多实例管理和迁移)、生产环境更规范(符合企业级部署标准)。教程基于MySQL 8.0.45版本,涵盖从下载、解压、配置、初始化到启动验证的完整流程,并附上经过生产环境验证的my.cnf配置文件详解。无论你是刚入门的开发者,还是寻求规范化部署的运维工程师,这篇Ubuntu安装MySQL教程都能为你提供一站式的解决方案。
安装前必读:在开始之前,你需要先部署好一台Ubuntu Server系统(参考文章: https://www.cnblogs.com/dbbull/p/21557531 )
一、MySQL是什么?
MySQL是一个多线程、多用户、结构化的SQL数据库服务器。它采用客户端/服务器架构,由服务器守护进程(mysqld)和多种客户端程序及库组成。自1995年问世以来,MySQL凭借其开源性、高性能、跨平台等特性,成为LAMP(Linux+Apache+MySQL+PHP)和LNMP(Linux+Nginx+MySQL+PHP)架构中的核心数据存储组件。
MySQL 8.0的核心特性包括:
- 数据字典(Data Dictionary) :将原本分散的元数据统一管理,提升系统表查询效率。
- 通用表表达式(CTE) :支持WITH语句,简化复杂查询的编写。
- 窗口函数(Window Functions) :提供更强大的分析查询能力。
- 角色管理(Roles) :简化权限管理,支持将权限集合赋予角色再分配给用户。
- 默认utf8mb4字符集:原生支持emoji和更多Unicode字符。
MySQL 8.0.45(2026年1月20日发布)是8.0系列的最新通用可用性(GA)版本。该版本在安全方面进行了重要加固——修复了多个高危漏洞,并将捆绑的OpenSSL库更新至3.0.18版本;同时修复了CTE、特定SQL查询执行、SHOW CREATE TABLE等多个优化器相关问题,以及InnoDB批量插入、二进制日志清理等关键Bug。选择8.0.45版本部署,意味着你使用的是经过充分测试、安全加固的最新稳定版。
二、MySQL安装包下载
在进行Ubuntu安装MySQL教程的实操之前,首先需要获取MySQL 8.0.45的二进制安装包。
MySQL安装包下载地址:
链接:https://pan.baidu.com/s/1DBY3D1h2Up4z-jMemxNSuA?pwd=5xib 提取码:5xib
复制这段内容后打开百度网盘手机App,操作更方便哦
三、MySQL安装环境要求
在执行Ubuntu安装MySQL教程之前,请确保你的Ubuntu Server满足以下要求:
硬件要求(Ubuntu 22.04 LTS Server) :
| 项目 | 最低配置 | 推荐配置 |
|---|---|---|
| 处理器 | 1.5 GHz单核 | 2 GHz双核及以上 |
| 内存 | 2 GB RAM | 4 GB RAM及以上 |
| 硬盘空间 | 15 GB | 25 GB及以上 |
如果是虚拟机环境,建议分配至少2核CPU、4GB内存、30GB硬盘。
软件依赖:
- libaio库:MySQL的异步I/O依赖库
- numactl:NUMA架构下的CPU和内存管理工具
- lrzsz:用于上传文件的rz/sz工具(可选)
前置检查:
# 检查Ubuntu版本
lsb_release -a
# 检查glibc版本
ldd --version
# 检查系统架构
uname -m
四、Ubuntu安装MySQL步骤
以下是Ubuntu安装MySQL教程的核心实操部分,采用二进制包方式部署MySQL 8.0.45。
1. 创建MySQL虚拟用户
出于安全考虑,MySQL服务应使用专门的系统用户运行,而非root用户。
useradd -s /sbin/nologin -M mysql
参数说明:
-s /sbin/nologin禁止该用户登录shell;-M不创建用户家目录。

2. 创建相关目录
# 创建工具存放目录
mkdir -p /server/tools
# 创建MySQL安装目录
mkdir -p /opt/mysql
# 创建MySQL数据目录(多实例规划,3306为端口号)
mkdir -p /data/mysql/mysql3306/{data,logs}
# 进入工具目录
cd /server/tools
目录规划说明:
/opt/mysql存放MySQL软件;/data/mysql/mysql3306/存放数据和日志,便于多实例管理和数据迁移。

3. 上传二进制包
将下载好的mysql-8.0.45-linux-glibc2.17-x86_64.tar.xz上传到服务器:
# 安装上传工具
apt install -y lrzsz # Ubuntu/Debian系列
# 执行rz命令,选择本地文件上传
rz

4. 解压二进制包
tar xf mysql-8.0.45-linux-glibc2.17-x86_64.tar.xz

5. 移动软件到指定目录
mv mysql-8.0.45-linux-glibc2.17-x86_64 /opt/mysql/mysql-8.0.45

6. 创建软连接
ln -s /opt/mysql/mysql-8.0.45/ /usr/local/mysql
软连接的作用:便于版本升级——未来升级时只需修改软连接指向新版本目录,无需改动配置文件中的路径。

7. 删除mariadb-libs(如有冲突)
Ubuntu系统可能预装了mariadb的相关库,与MySQL安装会产生冲突:
# Ubuntu/Debian系列(检查并移除)
dpkg -l | grep mariadb
apt remove --purge mariadb-*

8. 配置文件整理
创建MySQL配置文件/data/mysql/mysql3306/my3306.cnf:
vim /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
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
# GTID复制配置
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配置
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配置
binlog_cache_size=2M
max_binlog_cache_size=8M
max_binlog_size=512M
expire_logs_days=7

9. 安装MySQL依赖包
# Ubuntu使用apt安装
apt update
apt install libaio-dev numactl -y
libaio是MySQL的必需依赖,缺少会导致数据库初始化失败。

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

11. 初始化数据库
/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
参数说明:
--initialize-insecure表示初始化时不生成root临时密码(便于首次登录后自行设置安全密码)。如需生成临时密码,可改用--initialize。

12. 加入环境变量
vim /etc/profile
# 在文件末尾添加
PATH="/usr/local/mysql/bin:$PATH"
# 使配置生效
source /etc/profile
配置完成后,可直接在任意目录执行mysql、mysqld等命令。


13. 启动MySQL
mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf &

14. 查看是否启动成功
netstat -lntup | grep mysql
预期输出应包含0.0.0.0:3306或127.0.0.1:3306的监听信息。

设置开机自启(可选) :
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
update-rc.d mysql defaults # Ubuntu/Debian
五、验证MySQL安装
完成上述Ubuntu安装MySQL教程的步骤后,需要验证MySQL是否正常工作。
1. 检查进程状态
ps -ef | grep mysqld
2. 检查端口监听
ss -lntup | grep 3306
3. 登录MySQL报错
root@yuhaiqing:/server/tools# mysql -S /data/mysql/mysql3306/mysql.sock
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
# 安装 libncurses5 兼容库即可解决报错
sudo apt install -y libncurses5


由于初始化时使用了
--initialize-insecure,首次登录无需密码。强烈建议立即设置root密码。
4. 设置root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码';
FLUSH PRIVILEGES;
5. 查看MySQL版本
SELECT VERSION();
预期输出:8.0.45
六、MySQL基础操作
完成 Ubuntu安装MySQL教程 的部署后,您需要掌握MySQL的日常基础操作。本节涵盖连接方式、库表管理、数据增删改查、用户权限、字符集配置以及常用管理命令,共9个实用小节。
1. 连接MySQL的多种方式
方式一:通过socket文件连接(本地连接,无需网络)
mysql -S /data/mysql/mysql3306/mysql.sock -u root -p
方式二:通过TCP/IP连接(本地或远程)
mysql -h 127.0.0.1 -P 3306 -u root -p
# 远程连接示例
mysql -h 192.168.1.100 -P 3306 -u appuser -p
方式三:在命令行中直接执行SQL(脚本常用)
mysql -u root -p -e "SHOW DATABASES;"
提示:生产环境中建议使用socket方式,减少网络开销且更安全。
2. 数据库的日常管理
-
查看所有数据库
SHOW DATABASES; -
创建数据库(指定字符集和排序规则)
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;强烈建议使用
utf8mb4字符集,支持完整的Unicode(包括emoji)。 -
查看数据库创建语句
SHOW CREATE DATABASE myapp; -
修改数据库字符集
ALTER DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -
删除数据库(谨慎操作)
DROP DATABASE myapp; -
切换当前数据库
USE myapp;
3. 表的基本管理
-
查看当前库的所有表
SHOW TABLES; -
创建表(示例:用户表)
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID', username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名', email VARCHAR(100) NOT NULL COMMENT '邮箱', age TINYINT UNSIGNED COMMENT '年龄', status TINYINT DEFAULT 1 COMMENT '状态:1启用,0禁用', created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; -
查看表结构
DESCRIBE users; -- 或 DESC users; -- 更详细的查看 SHOW FULL COLUMNS FROM users; -
查看建表语句
SHOW CREATE TABLE users\G -
修改表结构(增加、修改、删除列)
-- 增加列 ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER email; -- 修改列类型 ALTER TABLE users MODIFY phone VARCHAR(30); -- 重命名列 ALTER TABLE users CHANGE phone mobile VARCHAR(30); -- 删除列 ALTER TABLE users DROP COLUMN mobile; -
重命名表
RENAME TABLE users TO user_info; -
删除表
DROP TABLE user_info; -
清空表数据(保留结构)
TRUNCATE TABLE users; -- 比 DELETE 更快,且重置自增ID
4. 数据操作(CRUD)
-
插入数据(INSERT)
-- 插入单条 INSERT INTO users (username, email, age) VALUES ('alice', 'alice@example.com', 25); -- 插入多条 INSERT INTO users (username, email, age) VALUES ('bob', 'bob@example.com', 30), ('carol', 'carol@example.com', 28); -- 插入时指定所有字段(包括自增ID,通常不推荐) INSERT INTO users VALUES (100, 'dave', 'dave@example.com', 35, 1, NOW(), NOW()); -
查询数据(SELECT)
-- 基本查询 SELECT * FROM users; -- 查询指定列 SELECT id, username, email FROM users; -- 条件筛选 SELECT * FROM users WHERE age > 25 AND status = 1; -- 排序 SELECT * FROM users ORDER BY age DESC; -- 分页(LIMIT) SELECT * FROM users LIMIT 10 OFFSET 20; -- 第21~30条 -- 聚合函数 SELECT COUNT(*) AS total, AVG(age) AS avg_age FROM users; -- 分组 SELECT status, COUNT(*) FROM users GROUP BY status; -- 模糊查询(注意性能) SELECT * FROM users WHERE username LIKE 'a%'; -
更新数据(UPDATE)
-- 更新单条 UPDATE users SET age = 26 WHERE username = 'alice'; -- 批量更新 UPDATE users SET status = 0 WHERE age < 18; -- 务必注意:不加WHERE会更新全表,谨慎操作! -
删除数据(DELETE)
-- 删除指定记录 DELETE FROM users WHERE id = 100; -- 删除所有记录(建议用TRUNCATE) DELETE FROM users; -- 逐行删除,较慢
5. 用户和权限管理
-
查看所有用户
SELECT user, host, authentication_string FROM mysql.user; -
创建用户(指定允许登录的主机)
-- 允许从任何主机连接 CREATE USER 'appuser'@'%' IDENTIFIED BY 'SecurePass123!'; -- 只允许本地连接 CREATE USER 'admin'@'localhost' IDENTIFIED BY 'AdminPass456!'; -- 允许从指定网段(例如192.168.1.%) CREATE USER 'backup'@'192.168.1.%' IDENTIFIED BY 'BackupPass789!'; -
修改用户密码
-- MySQL 8.0 推荐方式 ALTER USER 'appuser'@'%' IDENTIFIED BY 'NewPass456!'; -- 旧版方式(仍可用) SET PASSWORD FOR 'appuser'@'%' = 'NewPass456!'; -
授予权限(细粒度控制)
-- 授予对 myapp 库所有表的全部权限 GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'%'; -- 授予只读权限(SELECT) GRANT SELECT ON myapp.* TO 'readonly'@'%'; -- 授予特定表的 INSERT 和 UPDATE 权限 GRANT INSERT, UPDATE ON myapp.users TO 'editor'@'%'; -- 授予全局管理权限(谨慎) GRANT RELOAD, PROCESS, SUPER ON *.* TO 'dba'@'localhost'; -- 刷新权限使生效 FLUSH PRIVILEGES; -
查看用户权限
SHOW GRANTS FOR 'appuser'@'%'; -
撤销权限
REVOKE DELETE ON myapp.* FROM 'appuser'@'%'; -
删除用户
DROP USER 'appuser'@'%';
6. 字符集和排序规则设置
-
查看当前数据库字符集
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%'; -
修改数据库默认字符集
ALTER DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -
修改表的字符集
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -
修改字段字符集(单独修改某列)
ALTER TABLE users MODIFY username VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
7. 查看数据库状态和连接信息
-
查看当前连接数及状态
SHOW STATUS LIKE 'Threads_connected'; -- 当前活跃连接数 SHOW STATUS LIKE 'Max_used_connections'; -- 历史最大连接数 SHOW PROCESSLIST; -- 查看所有连接及正在执行的SQL SHOW FULL PROCESSLIST; -- 显示完整的SQL语句 -
查看数据库全局状态和变量
SHOW GLOBAL STATUS; -- 大量统计信息 SHOW GLOBAL VARIABLES; -- 系统配置变量 -- 查看特定变量,如最大连接数 SHOW VARIABLES LIKE 'max_connections'; -
查看存储引擎信息
SHOW ENGINES; -- 查看支持的引擎及默认引擎 -
查看表大小和数据量
-- 查看某张表的大小 SELECT table_name AS '表名', round(((data_length + index_length) / 1024 / 1024), 2) AS '大小(MB)' FROM information_schema.tables WHERE table_schema = 'myapp' AND table_name = 'users';
8. 导入导出数据
-
使用 mysqldump 逻辑导出(在Shell中执行)
# 导出整个数据库(含结构和数据) mysqldump -u root -p myapp > /tmp/myapp_backup.sql # 仅导出结构(无数据) mysqldump -u root -p --no-data myapp > /tmp/myapp_schema.sql # 仅导出数据(无结构) mysqldump -u root -p --no-create-info myapp > /tmp/myapp_data.sql # 导出指定表 mysqldump -u root -p myapp users orders > /tmp/myapp_tables.sql # 添加 --single-transaction 保证一致性备份(InnoDB) mysqldump -u root -p --single-transaction myapp > /tmp/myapp_consistent.sql -
使用 source 命令导入(在MySQL客户端内)
USE myapp; SOURCE /tmp/myapp_backup.sql; -
使用 mysql 命令导入(在Shell中)
mysql -u root -p myapp < /tmp/myapp_backup.sql -
导出CSV格式(便于数据分析)
SELECT * INTO OUTFILE '/tmp/users.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM users;注意:OUTFILE 需要 FILE 权限,且路径需MySQL可写。
9. 常用管理命令速查
| 命令 | 作用 |
|---|---|
SHOW DATABASES; |
列出所有数据库 |
SHOW TABLES; |
列出当前库所有表 |
DESC table_name; |
查看表结构 |
SHOW CREATE TABLE table_name\G |
查看建表详细语句 |
SHOW INDEX FROM table_name; |
查看表索引 |
SHOW STATUS LIKE 'uptime'; |
查看MySQL运行时长 |
SHOW VARIABLES LIKE 'datadir'; |
查看数据目录位置 |
KILL connection_id; |
终止某个连接(从SHOW PROCESSLIST获得ID) |
USE database_name; |
切换当前数据库 |
SELECT DATABASE(); |
查看当前所在数据库 |
七、MySQL进阶操作
当您熟练了基础操作后,本节将深入讲解 Ubuntu安装MySQL教程 后续的生产级进阶技能,涵盖主从复制、备份恢复、慢查询优化、二进制日志管理、性能监控以及常用运维工具,共7大模块。
1. 主从复制(GTID模式)
我们在配置文件中已启用了GTID(gtid_mode=on),复制配置更加简单可靠。
1.1 主库准备(Master)
- 确保
server_id唯一,且log_bin开启,log_slave_updates=1。 - 创建复制专用用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'ReplPass2026!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
1.2 从库配置(Slave)
- 修改从库配置文件,设置
server_id为不同值(如2),其余参数保持一致。 - 重启从库MySQL。
1.3 启动复制(从库执行)
CHANGE MASTER TO
MASTER_HOST='主库IP地址',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='ReplPass2026!',
MASTER_AUTO_POSITION=1; -- 使用GTID自动定位
START SLAVE;
1.4 监控复制状态
SHOW SLAVE STATUS\G
重点关注:
Slave_IO_Running:应为YesSlave_SQL_Running:应为YesLast_IO_Error、Last_SQL_Error:不应有错误Seconds_Behind_Master:延迟秒数,越小越好
1.5 常见复制故障处理
- IO线程中断:检查网络、用户权限、防火墙。
- SQL线程中断:跳过错误(临时):
或使用STOP SLAVE; SET GTID_NEXT='具体跳过的事务GTID'; BEGIN; COMMIT; SET GTID_NEXT='AUTOMATIC'; START SLAVE;--slave-skip-errors但需谨慎。
1.6 切换主从(故障转移)
- 将从库提升为主库:
STOP SLAVE; RESET SLAVE ALL; -- 然后清除从库原有复制信息,并开放写操作
2. 备份与恢复策略
2.1 逻辑备份(mysqldump)
适用于小数据量,可跨版本,缺点是慢且恢复时间长。
- 全量备份:
mysqldump -u root -p --all-databases --single-transaction --master-data=2 > /backup/full_$(date +%Y%m%d).sql - 定期备份建议结合cron。
2.2 物理备份(Percona XtraBackup)
适用于大数据量,支持热备份,不影响业务。
- 安装:
apt install percona-xtrabackup-80 -y - 全量备份:
xtrabackup --backup --target-dir=/backup/base --datadir=/data/mysql/mysql3306/data - 准备(应用日志):
xtrabackup --prepare --target-dir=/backup/base - 恢复(停止MySQL,覆盖datadir):
systemctl stop mysql # 或 kill mysqld进程 rm -rf /data/mysql/mysql3306/data/* xtrabackup --copy-back --target-dir=/backup/base chown -R mysql:mysql /data/mysql/mysql3306/data # 启动MySQL
2.3 binlog增量恢复
当全量备份之后发生误操作,可通过binlog前滚或回滚。
- 查看binlog列表:
SHOW BINARY LOGS; - 使用
mysqlbinlog解析:mysqlbinlog /data/mysql/mysql3306/logs/mysql-bin.000012 --start-datetime="2026-07-20 10:00:00" --stop-datetime="2026-07-20 11:00:00" | mysql -u root -p
2.4 备份策略建议
- 每天凌晨全量备份(xtrabackup)
- 每小时增量备份(xtrabackup --incremental)
- binlog实时归档到远程服务器
3. 慢查询分析与优化
配置中已开启慢查询日志(long_query_time=0.5),记录超过0.5秒的SQL。
3.1 查看慢查询日志
tail -f /data/mysql/mysql3306/logs/slow.log
3.2 使用 mysqldumpslow 汇总
# 按平均查询时间排序,取前10
mysqldumpslow -s at -t 10 /data/mysql/mysql3306/logs/slow.log
# 按总耗时排序
mysqldumpslow -s t -t 5 /data/mysql/mysql3306/logs/slow.log
3.3 使用 pt-query-digest(Percona Toolkit)进行深度分析
# 安装
apt install percona-toolkit -y
# 分析
pt-query-digest /data/mysql/mysql3306/logs/slow.log > /tmp/slow_report.txt
3.4 使用 EXPLAIN 分析执行计划
EXPLAIN SELECT * FROM users WHERE age > 20 AND status = 1;
关键列解释:
type:访问类型,从好到差依次为system>const>eq_ref>ref>range>index>ALL(ALL需优化)possible_keys:可能使用的索引key:实际使用的索引rows:预估扫描行数Extra:额外信息,如Using index(覆盖索引)、Using filesort(需优化)、Using temporary(需优化)
3.5 索引优化建议
- 为频繁作为WHERE条件的列创建索引
- 联合索引注意顺序(左前缀原则)
- 避免在索引列上使用函数或计算
- 使用
SHOW INDEX FROM table_name;查看现有索引
4. 二进制日志(binlog)管理
4.1 查看当前binlog状态
SHOW MASTER STATUS; -- 当前正在写入的日志文件及位置
SHOW BINARY LOGS; -- 列出所有binlog文件
4.2 刷新binlog(生成新文件)
FLUSH LOGS;
4.3 清除过期binlog(配置中已设 expire_logs_days=7)
- 手动清除指定文件:
PURGE BINARY LOGS TO 'mysql-bin.000010'; - 按时间清除:
PURGE BINARY LOGS BEFORE '2026-07-13 00:00:00';
4.4 使用 mysqlbinlog 恢复数据
- 查看binlog内容:
mysqlbinlog /data/mysql/mysql3306/logs/mysql-bin.000012 - 基于位置恢复:
mysqlbinlog --start-position=123 --stop-position=456 mysql-bin.000012 | mysql -u root -p - 基于时间恢复:
mysqlbinlog --start-datetime="2026-07-20 08:00:00" --stop-datetime="2026-07-20 09:00:00" mysql-bin.000012 | mysql -u root -p
5. 性能监控
5.1 使用 Performance Schema
MySQL 8.0 默认启用 performance_schema。
- 查看当前活跃事务:
SELECT * FROM performance_schema.threads WHERE PROCESSLIST_STATE IS NOT NULL; - 查看锁等待信息:
SELECT * FROM performance_schema.data_locks; SELECT * FROM performance_schema.data_lock_waits;
5.2 使用 sys 库(更方便)
-- 查看消耗CPU/IO的TOP SQL
SELECT * FROM sys.statement_analysis ORDER BY total_latency DESC LIMIT 10;
-- 查看当前锁等待
SELECT * FROM sys.innodb_lock_waits;
-- 查看内存使用情况
SELECT * FROM sys.memory_global_total;
5.3 实时监控工具
mysqladmin命令:mysqladmin -u root -p status # 显示简略状态 mysqladmin -u root -p extended-status | grep -i connections- 第三方监控:Prometheus + mysqld_exporter,或Zabbix。
6. 常用运维命令(mysqlbinlog、mysqladmin等)
-
mysqladmin(用于管理MySQL服务器)
mysqladmin -u root -p shutdown # 关闭MySQL mysqladmin -u root -p reload # 重新加载权限表 mysqladmin -u root -p flush-logs # 刷新日志(生成新binlog) mysqladmin -u root -p variables # 显示系统变量 mysqladmin -u root -p processlist # 显示进程列表 -
mysqlbinlog(处理二进制日志)
mysqlbinlog --verbose mysql-bin.000012 # 显示SQL注释 mysqlbinlog --base64-output=DECODE-ROWS # 解析行事件为SQL -
mysqlcheck(表维护)
mysqlcheck -u root -p --all-databases --auto-repair # 检查并修复所有表 -
mysqlslap(压力测试工具)
mysqlslap -u root -p --concurrency=100 --iterations=5 --auto-generate-sql
7. 高可用架构简介
在生产环境中,单点故障不可接受,通常需要构建高可用集群。
- MySQL Group Replication (MGR):原生支持的多主或单主模式,具备自动选主、故障转移功能。
- InnoDB Cluster:基于MGR和MySQL Router的官方高可用解决方案,易于部署和管理。
- 第三方方案:如ProxySQL + MGR、Orchestrator、Galera Cluster等。
本教程未展开这些,但作为进阶知识,建议您后续深入研究,构建真正企业级的数据库架构。
八、MySQL参数详解
以下是my3306.cnf中核心参数的详细说明:
| 参数 | 说明 | 推荐值 |
|---|---|---|
basedir |
MySQL安装根目录 | /usr/local/mysql |
datadir |
数据文件存放目录 | 独立数据盘 |
socket |
Unix套接字文件路径 | 与datadir同盘 |
server_id |
实例唯一ID(主从复制必需) | 1-65535唯一 |
port |
服务端口 | 3306(默认) |
innodb_buffer_pool_size |
InnoDB缓存池大小 | 物理内存的50%-70% |
max_connections |
最大并发连接数 | 根据业务调整 |
wait_timeout |
非交互连接超时(秒) | 60-300 |
binlog_format |
二进制日志格式 | ROW(推荐) |
gtid_mode |
启用GTID复制 | ON |
expire_logs_days |
binlog保留天数 | 7-30 |
slow_query_log |
开启慢查询日志 | ON |
long_query_time |
慢查询阈值(秒) | 0.5-2 |
调优建议:
innodb_buffer_pool_size是MySQL性能最关键的参数,建议设置为物理内存的70%左右。生产环境中应根据实际业务负载逐步调整。
文章结尾
至此,这篇Ubuntu安装MySQL教程已带你完整走完了从环境准备、二进制包下载、目录规划、配置文件编写、数据库初始化到启动验证的全流程。通过通用二进制包方式部署MySQL 8.0.45,你不仅获得了版本自主可控的灵活性,还建立了一套符合生产环境规范的目录结构和配置体系。
回顾这篇Ubuntu安装MySQL教程的核心要点:
- ✅ 使用专用mysql用户运行服务,提升安全性
- ✅ 采用独立的目录规划(
/opt/mysql存放软件,/data/mysql存放数据),便于管理和迁移 - ✅ 配置了GTID复制、慢查询日志、binlog等生产级参数
- ✅ 使用软连接管理版本,方便未来升级
MySQL 8.0.45作为2026年1月发布的最新稳定版,不仅修复了多个安全漏洞,还将OpenSSL库更新至3.0.18版本,安全性和稳定性都得到了充分保障。无论你是用于开发测试还是生产环境,这套Ubuntu安装MySQL教程的方案都值得信赖。
如果在安装过程中遇到任何问题,欢迎在评论区留言交流。后续还可以继续深入探讨MySQL的性能调优、高可用架构(MGR/InnoDB Cluster)等进阶话题。别忘了收藏这篇Ubuntu安装MySQL教程,下次部署时直接照着做,省时又省心!

浙公网安备 33010602011771号