MySQL运维实战:从入门到精通

第一阶段:Linux 基础(MySQL 运维的底层依赖)

MySQL 运行在 Linux 系统上,熟练掌握 CentOS7 的基础操作是前提。

1.1 CentOS7 系统基础

核心知识

常用命令:
cd/ls/pwd/mkdir/rm/cp/mv
(文件操作)、
useradd/userdel/chown/chmod
(用户权限)、
systemctl
(服务管理)、
firewalld
(防火墙)、
yum
(包管理)、
df/du/top/free
(系统监控)。目录结构:
/etc
(配置文件)、
/var
(日志 / 数据)、
/usr/local
(源码安装目录)、
/tmp
(临时文件)。

实验 1:CentOS7 基础操作练习

登录 CentOS7(虚拟机或云服务器),切换到 root 用户(
su - root
)。创建用户
mysqladmin
并设置密码:
useradd mysqladmin

passwd mysqladmin
。创建目录
/data/mysql
(用于存放 MySQL 数据),并授权给
mysqladmin

mkdir -p /data/mysql

chown -R mysqladmin:mysqladmin /data/mysql
。查看磁盘占用:
df -h
;查看内存使用:
free -h
。关闭防火墙(实验环境,生产环境需按需开放端口):
systemctl stop firewalld

systemctl disable firewalld

1.2 Linux 服务管理与网络

核心知识

服务管理:
systemctl start/stop/restart/enable/disable 服务名
(如
mysqld
)。网络:
ip addr
(查看 IP)、
ping
(网络连通性)、
netstat -tunlp
(查看端口占用)、
ss -tunlp
(替代 netstat 的新命令)。

实验 2:服务与网络操作

安装
net-tools
(包含 netstat):
yum install -y net-tools
。查看当前监听端口:
netstat -tunlp
(确认无程序占用 3306 端口,避免冲突)。手动创建一个临时服务(模拟 MySQL 服务):
新建文件
/etc/systemd/system/test.service
,内容:

ini



[Unit]
Description=Test Service
[Service]
ExecStart=/bin/bash -c "while true; do echo hello; sleep 1; done"
[Install]
WantedBy=multi-user.target

重载服务配置:
systemctl daemon-reload
,启动服务:
systemctl start test
,查看状态:
systemctl status test
,停止服务:
systemctl stop test

第二阶段:MySQL8.0 源码安装与基础配置

源码安装能更灵活地控制 MySQL 的编译参数(如自定义目录、启用特定功能),是运维工程师的必备技能。

2.1 源码安装前的准备

核心知识

依赖包:MySQL 编译需要
gcc
(编译器)、
cmake
(跨平台构建工具)、
ncurses-devel
(终端处理库)等。目录规划:建议源码包存放
/usr/local/src
,安装目录
/usr/local/mysql
,数据目录
/data/mysql
,日志目录
/var/log/mysql

实验 3:安装依赖与创建目录

安装依赖包:

bash


yum install -y gcc gcc-c++ cmake make ncurses-devel openssl-devel libaio-devel perl-Data-Dumper boost boost-devel

(解释:
openssl-devel
用于 SSL 支持,
boost
是 MySQL8.0 依赖的 C++ 库,
libaio
用于异步 IO)。

创建专用用户(避免用 root 运行 MySQL,提高安全性):

bash


useradd -s /sbin/nologin -M mysql  # -s禁止登录,-M不创建家目录

创建目录并授权:

bash



mkdir -p /usr/local/src  # 存放源码
mkdir -p /usr/local/mysql  # 安装目录
mkdir -p /data/mysql  # 数据目录
mkdir -p /var/log/mysql  # 日志目录
chown -R mysql:mysql /usr/local/mysql /data/mysql /var/log/mysql
2.2 源码编译与安装 MySQL8.0

核心知识

源码获取:从 MySQL 官网下载源码包(
mysql-8.0.x.tar.gz
)。编译步骤:解压→cmake 配置→make 编译→make install。关键编译参数:
-DCMAKE_INSTALL_PREFIX
(安装目录)、
-DMYSQL_DATADIR
(数据目录)、
-DDEFAULT_CHARSET=utf8mb4
(默认字符集,支持 emoji)等。

实验 4:源码安装 MySQL8.0

下载源码包(以 8.0.36 为例,可替换为最新版本):

bash



cd /usr/local/src
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.36.tar.gz
tar -zxvf mysql-8.0.36.tar.gz
cd mysql-8.0.36

cmake 配置(关键参数,根据需求调整):

bash



cmake . 
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
-DMYSQL_DATADIR=/data/mysql 
-DSYSCONFDIR=/etc   # 配置文件目录
-DMYSQL_TCP_PORT=3306   # 端口
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock   # socket文件
-DDEFAULT_CHARSET=utf8mb4   # 默认字符集
-DDEFAULT_COLLATION=utf8mb4_general_ci   # 字符排序规则
-DWITH_INNOBASE_STORAGE_ENGINE=1   # 启用InnoDB引擎
-DWITH_SSL=system   # 使用系统SSL库
-DENABLED_LOCAL_INFILE=1   # 允许本地导入文件
-DWITH_BOOST=/usr/local/boost  # boost库路径(若未默认安装,需指定)

(若配置报错,删除
CMakeCache.txt
后重新配置:
rm -f CMakeCache.txt
)。

编译(耗时较长,取决于服务器性能,可加
-j 4
用 4 核编译加速):

bash


make -j 4

安装:

bash


make install
2.3 MySQL 初始化与服务配置

核心知识

初始化数据库:
mysqld --initialize
(生成初始密码)。配置文件:
my.cnf
(MySQL 启动时读取的配置,路径
/etc/my.cnf
)。注册系统服务:将 MySQL 添加到
systemctl
管理,方便启停。

实验 5:初始化并启动 MySQL

初始化数据库(用 mysql 用户执行,生成数据文件和初始密码):

bash


/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

(执行后会输出初始密码,类似:
A temporary password is generated for root@localhost: xxxxx
,记录下来!)。

配置
my.cnf
(关键参数,按需添加):

bash



cat > /etc/my.cnf << EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
port=3306
socket=/tmp/mysql.sock
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
log-error=/var/log/mysql/error.log  # 错误日志路径
pid-file=/data/mysql/mysql.pid  # 进程ID文件
default_authentication_plugin=caching_sha2_password  # MySQL8.0默认认证插件
EOF

注册系统服务(让
systemctl
管理 MySQL):

复制服务脚本:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
赋予执行权限:
chmod +x /etc/init.d/mysqld
添加到 systemctl:
systemctl enable mysqld

启动 MySQL 并检查状态:

bash



systemctl start mysqld
systemctl status mysqld  # 显示active (running)则成功
netstat -tunlp | grep 3306  # 确认3306端口监听
2.4 首次登录与密码修改

核心知识

登录命令:
mysql -u用户名 -p密码 -h主机 -P端口
。密码修改:MySQL8.0 默认使用
caching_sha2_password
,需用
ALTER USER
命令修改。

实验 6:登录 MySQL 并修改密码

用初始密码登录(密码是实验 5 中记录的临时密码):

bash



/usr/local/mysql/bin/mysql -uroot -p
# 输入临时密码后回车,成功进入MySQL命令行(显示mysql>)

修改 root 密码(必须先改密码才能执行其他操作):

sql



ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword123!';  # 密码需包含大小写、数字、特殊字符
flush privileges;  # 刷新权限

配置环境变量(避免每次输入完整路径):

bash



echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile  # 生效
# 测试:直接输入mysql -uroot -p,能登录则成功

第三阶段:MySQL 基础操作(数据管理核心)

掌握数据库、表、数据的增删改查(CRUD),以及用户与权限管理。

3.1 数据库与表的管理

核心知识

数据库操作:
CREATE DATABASE
(创建)、
DROP DATABASE
(删除)、
USE
(切换)。表操作:
CREATE TABLE
(创建,需指定字段名、类型、约束)、
ALTER TABLE
(修改)、
DROP TABLE
(删除)。数据类型:
int
(整数)、
varchar(n)
(字符串,长度 n)、
datetime
(日期时间)、
text
(长文本)等。约束:
PRIMARY KEY
(主键,唯一标识)、
NOT NULL
(非空)、
UNIQUE
(唯一)、
FOREIGN KEY
(外键,关联其他表)。

实验 7:创建数据库和表

登录 MySQL 后,创建测试数据库:

sql



CREATE DATABASE IF NOT EXISTS testdb CHARACTER SET utf8mb4;  # 若不存在则创建,指定字符集
USE testdb;  # 切换到testdb

创建用户表(
user
):

sql



CREATE TABLE IF NOT EXISTS user (
  id INT PRIMARY KEY AUTO_INCREMENT,  # 主键,自增
  username VARCHAR(50) NOT NULL UNIQUE,  # 用户名,非空且唯一
  age INT,
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP  # 创建时间,默认当前时间
);

查看表结构:

sql


DESC user;  # 显示字段名、类型、约束等

修改表(添加字段
email
):

sql


ALTER TABLE user ADD COLUMN email VARCHAR(100) UNIQUE;
3.2 数据 CRUD 操作

核心知识

插入:
INSERT INTO 表名(字段1,字段2) VALUES(值1,值2)
。查询:
SELECT 字段 FROM 表名 WHERE 条件
(支持
AND/OR/LIKE/IN
等条件)。更新:
UPDATE 表名 SET 字段=值 WHERE 条件
(必须加 WHERE,否则全表更新)。删除:
DELETE FROM 表名 WHERE 条件
(必须加 WHERE,否则全表删除)。

实验 8:数据增删改查

插入数据:

sql



INSERT INTO user(username, age, email) VALUES
('zhangsan', 25, 'zhangsan@test.com'),
('lisi', 30, 'lisi@test.com');

查询数据:

sql



SELECT * FROM user;  # 查询所有字段
SELECT username, age FROM user WHERE age > 28;  # 查询年龄>28的用户名和年龄
SELECT * FROM user WHERE username LIKE 'zhang%';  # 模糊查询用户名以zhang开头的

更新数据(修改 lisi 的年龄为 31):

sql


UPDATE user SET age=31 WHERE username='lisi';

删除数据(删除年龄 = 25 的用户):

sql


DELETE FROM user WHERE age=25;
3.3 用户与权限管理

核心知识

用户创建:
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码'
(主机用
%
表示所有 IP,
localhost
仅本地)。授权:
GRANT 权限 ON 库.表 TO '用户'@'主机'
(权限如
SELECT/INSERT/ALL PRIVILEGES

*.*
表示所有库表)。权限回收:
REVOKE 权限 ON 库.表 FROM '用户'@'主机'
。查看权限:
SHOW GRANTS FOR '用户'@'主机'

实验 9:创建用户并授权

创建用户
appuser
,允许从所有 IP 登录(生产环境应限制具体 IP):

sql


CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPass123!';

授权
appuser
只能操作
testdb
库的所有表(有查询和插入权限):

sql



GRANT SELECT, INSERT ON testdb.* TO 'appuser'@'%';
flush privileges;  # 刷新权限

查看
appuser
的权限:

sql


SHOW GRANTS FOR 'appuser'@'%';

测试登录:退出 root,用
appuser
登录(需在服务器本地或远程客户端,确保 3306 端口开放):

bash


mysql -uappuser -pAppPass123! -h127.0.0.1  # 本地测试

第四阶段:MySQL 进阶特性(性能与安全核心)

掌握索引、事务、存储引擎等,是优化 MySQL 性能和保证数据安全的关键。

4.1 索引(加速查询)

核心知识

作用:类似书的目录,减少查询时扫描的数据量,加速
WHERE

JOIN

ORDER BY
操作。类型:
PRIMARY KEY
(主键索引,唯一且非空)、
UNIQUE
(唯一索引,允许空值)、
INDEX
(普通索引)、
FULLTEXT
(全文索引,用于文本搜索)。设计原则:索引不是越多越好(会降低插入 / 更新速度),优先给查询频繁的字段加索引,避免在大文本字段加索引。

实验 10:索引创建与效果测试


user
表的
username
字段创建普通索引(已创建 UNIQUE 索引可跳过,UNIQUE 是特殊的 INDEX):

sql



USE testdb;
CREATE INDEX idx_username ON user(username);


EXPLAIN
分析查询(查看是否使用索引):

sql


EXPLAIN SELECT * FROM user WHERE username='lisi';

(结果中
type

ref

range

key
显示
idx_username
,表示使用了索引)。

对比无索引的查询速度(可创建大表测试):

创建一张 10 万行的测试表:

sql



CREATE TABLE big_table (id INT, name VARCHAR(100));
DELIMITER //
CREATE PROCEDURE insert_data()
BEGIN
  DECLARE i INT DEFAULT 1;
  WHILE i <= 100000 DO
    INSERT INTO big_table VALUES(i, CONCAT('name_', i));
    SET i = i + 1;
  END WHILE;
END //
DELIMITER ;
CALL insert_data();  # 执行存储过程插入数据

无索引查询:
SELECT * FROM big_table WHERE name='name_99999';
(耗时较长)。创建索引后查询:
CREATE INDEX idx_name ON big_table(name);
,再执行相同查询(速度明显提升)。

4.2 事务(保证数据一致性)

核心知识

定义:一组 SQL 操作,要么全部成功,要么全部失败(如转账:扣钱和加钱必须同时成功)。ACID 特性:
原子性(Atomicity):操作不可分割。一致性(Consistency):事务前后数据状态合法。隔离性(Isolation):多个事务互不干扰。持久性(Durability):事务完成后数据永久保存。
隔离级别(MySQL 默认
REPEATABLE READ
):

READ UNCOMMITTED
(读未提交,可能脏读)。
READ COMMITTED
(读已提交,解决脏读,可能不可重复读)。
REPEATABLE READ
(可重复读,解决不可重复读,MySQL 默认)。
SERIALIZABLE
(串行化,解决幻读,性能低)。

实验 11:事务操作与隔离级别测试

创建账户表并插入数据:

sql



CREATE TABLE account (id INT PRIMARY KEY, name VARCHAR(50), balance INT);
INSERT INTO account VALUES(1, '张三', 1000), (2, '李四', 1000);

模拟转账事务(张三给李四转 200):

sql



BEGIN;  # 开始事务
UPDATE account SET balance=balance-200 WHERE id=1;  # 张三扣200
UPDATE account SET balance=balance+200 WHERE id=2;  # 李四加200
COMMIT;  # 提交事务(若中间出错,用ROLLBACK;回滚)
SELECT * FROM account;  # 确认余额:张三800,李四1200

测试隔离级别(需两个终端登录 MySQL):

终端 1:设置隔离级别为
READ UNCOMMITTED
,开启事务不提交:

sql



SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN;
UPDATE account SET balance=1000 WHERE id=1;  # 重置张三余额

终端 2:查询张三余额(能看到未提交的 1000,即脏读):

sql



SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT balance FROM account WHERE id=1;  # 显示1000(脏读)

终端 1 回滚:
ROLLBACK;
,终端 2 再查:恢复为 800。

4.3 存储引擎(数据存储方式)

核心知识

作用:决定表的存储结构、支持的特性(事务、索引等)。常用引擎:

InnoDB
(MySQL8.0 默认):支持事务、行级锁、外键,适合写频繁的业务(如订单、账户)。
MyISAM
:不支持事务和行锁,读性能好,适合读多写少(如日志、静态数据)。
MEMORY
:数据存内存,速度快但重启丢失,适合临时数据。

实验 12:存储引擎操作

查看表的存储引擎:

sql


SHOW CREATE TABLE user;  # 结果中ENGINE=InnoDB

创建 MyISAM 引擎的表:

sql


CREATE TABLE myisam_test (id INT) ENGINE=MyISAM;

对比 InnoDB 和 MyISAM 的锁机制(InnoDB 行锁,MyISAM 表锁):

终端 1:对 InnoDB 表
account
的某行加锁(不提交):

sql



BEGIN;
UPDATE account SET balance=balance WHERE id=1;  # 只锁id=1的行

终端 2:更新 id=2 的行(可执行,因为行锁):

sql


UPDATE account SET balance=balance WHERE id=2;  # 成功

终端 1:对 MyISAM 表
myisam_test
更新(不提交):

sql


UPDATE myisam_test SET id=1 WHERE id=1;  # 表锁,锁住整个表

终端 2:更新
myisam_test
任意行(会阻塞,直到终端 1 提交或超时)。

第五阶段:MySQL 运维核心技能(工作必备)

包含备份恢复、性能优化、高可用、监控等,是运维工程师的核心竞争力。

5.1 备份与恢复(数据安全底线)

核心知识

逻辑备份(
mysqldump
):生成 SQL 文件,跨版本兼容,适合小数据量。物理备份(
xtrabackup
):复制数据文件,速度快,适合大数据量(需 Percona 工具)。全量备份:备份所有数据;增量备份:只备份上次备份后变化的数据。

实验 13:逻辑备份与恢复(mysqldump)

全量备份
testdb
库:

bash


mysqldump -uroot -p --databases testdb > /tmp/testdb_backup.sql  # --databases指定库

恢复备份(先删除库模拟故障):

sql


DROP DATABASE testdb;  # 危险操作,仅实验!

bash


mysql -uroot -p < /tmp/testdb_backup.sql  # 恢复

备份所有库(包含系统库):

bash


mysqldump -uroot -p --all-databases > /tmp/full_backup.sql

实验 14:物理备份与恢复(xtrabackup)

安装 xtrabackup(Percona 的工具,支持 MySQL8.0):

bash



yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release enable-only tools release
yum install -y percona-xtrabackup-80

全量物理备份:

bash


xtrabackup --user=root --password=YourNewPassword123! --backup --target-dir=/tmp/mysql_full_backup

准备备份(使数据文件一致):

bash


xtrabackup --user=root --password=YourNewPassword123! --prepare --target-dir=/tmp/mysql_full_backup

恢复(先停 MySQL,清空数据目录):

bash



systemctl stop mysqld
rm -rf /data/mysql/*  # 清空数据目录(危险!)
xtrabackup --user=root --password=YourNewPassword123! --copy-back --target-dir=/tmp/mysql_full_backup
chown -R mysql:mysql /data/mysql  # 恢复权限
systemctl start mysqld
5.2 性能优化(提升 MySQL 效率)

核心知识

配置优化:通过
my.cnf
调整参数(如连接数、缓存大小)。SQL 优化:避免
SELECT *
、冗余索引,用
EXPLAIN
分析慢查询。慢查询日志:记录执行时间超过阈值的 SQL,用于定位问题。

实验 15:慢查询日志配置与分析

开启慢查询日志(修改
my.cnf
):

ini



[mysqld]
slow_query_log=1  # 开启
slow_query_log_file=/var/log/mysql/slow.log  # 日志路径
long_query_time=1  # 执行时间超过1秒的SQL记录
log_queries_not_using_indexes=1  # 记录未使用索引的SQL

重启 MySQL:
systemctl restart mysqld

生成慢查询(执行一个耗时 SQL):

sql


SELECT * FROM big_table WHERE name LIKE '%99999%';  # 无索引,全表扫描,耗时>1秒

查看慢查询日志:

bash


cat /var/log/mysql/slow.log  # 能看到上述SQL的执行时间、扫描行数等

实验 16:配置参数优化

调整连接数(默认 151,可根据服务器内存增大):

ini



[mysqld]
max_connections=500  # 最大连接数
wait_timeout=600  # 连接空闲超时时间(10分钟)

调整缓存(InnoDB 缓冲池,建议设为服务器内存的 50%-70%):

ini



[mysqld]
innodb_buffer_pool_size=2G  # 若服务器内存4G,设为2G

重启 MySQL 后生效,查看参数:

sql



SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
5.3 主从复制(高可用基础)

核心知识

作用:主库(Master)写入数据,从库(Slave)同步主库数据,实现读写分离(主写从读)、数据备份。原理:主库记录二进制日志(binlog),从库读取 binlog 并执行相同操作。

实验 17:配置一主一从复制环境:2 台 CentOS7 服务器(主库 IP:192.168.1.10,从库 IP:192.168.1.11,均已安装 MySQL8.0)。

步骤 1:主库配置

修改
my.cnf
,开启 binlog:

ini



[mysqld]
server-id=10  # 唯一ID(主从不能重复)
log_bin=/var/log/mysql/mysql-bin  # binlog路径
binlog_format=ROW  # 复制格式(ROW模式更安全)

重启主库:
systemctl restart mysqld

创建复制专用用户:

sql



CREATE USER 'repl'@'192.168.1.11' IDENTIFIED BY 'ReplPass123!';  # 只允许从库IP登录
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.11';
flush privileges;

查看主库 binlog 状态:

sql


SHOW MASTER STATUS;

记录
File
(如
mysql-bin.000001
)和
Position
(如 154)。

步骤 2:从库配置

修改
my.cnf

ini



[mysqld]
server-id=11  # 唯一ID,与主库不同
relay_log=/var/log/mysql/mysql-relay-bin  # 中继日志(从库读取binlog后暂存)

重启从库:
systemctl restart mysqld

配置从库连接主库:

sql



CHANGE REPLICATION SOURCE TO  # MySQL8.0用CHANGE REPLICATION SOURCE,旧版本用CHANGE MASTER
SOURCE_HOST='192.168.1.10',
SOURCE_USER='repl',
SOURCE_PASSWORD='ReplPass123!',
SOURCE_LOG_FILE='mysql-bin.000001',  # 主库的File
SOURCE_LOG_POS=154;  # 主库的Position

启动从库复制进程:

sql



START REPLICA;  # 旧版本用START SLAVE
SHOW REPLICA STATUSG;  # 查看状态(G竖排显示)


Slave_IO_Running

Slave_SQL_Running
均为
Yes
,则复制成功。

步骤 3:测试复制

主库创建表并插入数据:

sql



CREATE DATABASE repl_test;
USE repl_test;
CREATE TABLE t(id INT);
INSERT INTO t VALUES(1);

从库查询,确认数据已同步:

sql



USE repl_test;
SELECT * FROM t;  # 应显示id=1
5.4 监控与故障处理

核心知识

监控工具:
Prometheus+Grafana
(可视化监控)、
mysqladmin
(命令行工具)、
SHOW STATUS
(MySQL 状态变量)。常见故障:MySQL 启动失败(检查配置文件、权限)、主从延迟(网络、SQL 冲突)、连接数满(调整
max_connections
)。

实验 18:用 Grafana 监控 MySQL

安装 Prometheus 和 Grafana(参考官方文档,略)。

安装 MySQL exporter(用于收集 MySQL 指标):

bash



wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar -zxvf mysqld_exporter-0.14.0.linux-amd64.tar.gz
cd mysqld_exporter-0.14.0.linux-amd64

创建 MySQL 监控用户:

sql



CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'ExporterPass123!';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

配置 exporter 连接 MySQL:

bash



cat > .my.cnf << EOF
[client]
user=exporter
password=ExporterPass123!
EOF
./mysqld_exporter --config.my-cnf=.my.cnf &  # 启动exporter(默认端口9104)

Grafana 添加 Prometheus 数据源,导入 MySQL 监控模板(ID:7362),即可看到连接数、QPS、慢查询等指标。

实验 19:故障处理模拟

模拟 MySQL 启动失败(修改
my.cnf
为错误配置):

ini



[mysqld]
invalid_param=123  # 无效参数

重启 MySQL:
systemctl restart mysqld
(失败),查看错误日志:
cat /var/log/mysql/error.log
(会提示
unknown variable 'invalid_param=123'
),修复配置后重启。

模拟主从复制冲突(主从表结构不一致):

主库删除表
repl_test.t

DROP TABLE repl_test.t;
从库手动创建
repl_test.t

CREATE TABLE repl_test.t(id INT);
主库再次创建
repl_test.t

CREATE TABLE repl_test.t(id INT);
(从库会因表已存在报错)。解决:从库删除冲突表,执行
STOP REPLICA; START REPLICA;

第六阶段:综合实战(模拟生产环境)

目标:搭建一个「主从复制 + 读写分离 + 定时备份 + 监控告警」的完整 MySQL 架构。

实战项目:高可用 MySQL 架构搭建

环境:3 台服务器(主库、从库 1、从库 2)。步骤
配置主从复制(主库→从库 1,主库→从库 2)。部署读写分离中间件(如 ProxySQL):主库处理写请求,从库处理读请求。配置定时备份:用
crontab
每天凌晨 3 点执行
xtrabackup
全量备份,保留 7 天。监控告警:Grafana 配置 QPS>1000、连接数 > 400 时邮件告警。故障演练:模拟主库宕机,手动将从库提升为主库,验证业务连续性。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...