第一阶段: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(用于存放 MySQL 数据),并授权给
/data/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)、
ip addr(网络连通性)、
ping(查看端口占用)、
netstat -tunlp(替代 netstat 的新命令)。
ss -tunlp
实验 2:服务与网络操作
安装(包含 netstat):
net-tools。查看当前监听端口:
yum install -y net-tools(确认无程序占用 3306 端口,避免冲突)。手动创建一个临时服务(模拟 MySQL 服务):
netstat -tunlp
新建文件,内容:
/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
(解释:用于 SSL 支持,
openssl-devel是 MySQL8.0 依赖的 C++ 库,
boost用于异步 IO)。
libaio
创建专用用户(避免用 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 官网下载源码包()。编译步骤:解压→cmake 配置→make 编译→make install。关键编译参数:
mysql-8.0.x.tar.gz(安装目录)、
-DCMAKE_INSTALL_PREFIX(数据目录)、
-DMYSQL_DATADIR(默认字符集,支持 emoji)等。
-DDEFAULT_CHARSET=utf8mb4
实验 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
编译(耗时较长,取决于服务器性能,可加用 4 核编译加速):
-j 4
bash
make -j 4
安装:
bash
make install
2.3 MySQL 初始化与服务配置
核心知识:
初始化数据库:(生成初始密码)。配置文件:
mysqld --initialize(MySQL 启动时读取的配置,路径
my.cnf)。注册系统服务:将 MySQL 添加到
/etc/my.cnf管理,方便启停。
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
注册系统服务(让管理 MySQL):
systemctl
复制服务脚本:赋予执行权限:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld添加到 systemctl:
chmod +x /etc/init.d/mysqld
systemctl enable mysqld
启动 MySQL 并检查状态:
bash
systemctl start mysqld
systemctl status mysqld # 显示active (running)则成功
netstat -tunlp | grep 3306 # 确认3306端口监听
2.4 首次登录与密码修改
核心知识:
登录命令:。密码修改:MySQL8.0 默认使用
mysql -u用户名 -p密码 -h主机 -P端口,需用
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(字符串,长度 n)、
varchar(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(必须加 WHERE,否则全表更新)。删除:
UPDATE 表名 SET 字段=值 WHERE 条件(必须加 WHERE,否则全表删除)。
DELETE FROM 表名 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:创建用户并授权
创建用户,允许从所有 IP 登录(生产环境应限制具体 IP):
appuser
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,用登录(需在服务器本地或远程客户端,确保 3306 端口开放):
appuser
bash
mysql -uappuser -pAppPass123! -h127.0.0.1 # 本地测试
第四阶段:MySQL 进阶特性(性能与安全核心)
掌握索引、事务、存储引擎等,是优化 MySQL 性能和保证数据安全的关键。
4.1 索引(加速查询)
核心知识:
作用:类似书的目录,减少查询时扫描的数据量,加速、
WHERE、
JOIN操作。类型:
ORDER BY(主键索引,唯一且非空)、
PRIMARY KEY(唯一索引,允许空值)、
UNIQUE(普通索引)、
INDEX(全文索引,用于文本搜索)。设计原则:索引不是越多越好(会降低插入 / 更新速度),优先给查询频繁的字段加索引,避免在大文本字段加索引。
FULLTEXT
实验 10:索引创建与效果测试
给表的
user字段创建普通索引(已创建 UNIQUE 索引可跳过,UNIQUE 是特殊的 INDEX):
username
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(可重复读,解决不可重复读,MySQL 默认)。
REPEATABLE READ(串行化,解决幻读,性能低)。
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 回滚:,终端 2 再查:恢复为 800。
ROLLBACK;
4.3 存储引擎(数据存储方式)
核心知识:
作用:决定表的存储结构、支持的特性(事务、索引等)。常用引擎:
(MySQL8.0 默认):支持事务、行级锁、外键,适合写频繁的业务(如订单、账户)。
InnoDB:不支持事务和行锁,读性能好,适合读多写少(如日志、静态数据)。
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:更新任意行(会阻塞,直到终端 1 提交或超时)。
myisam_test
第五阶段:MySQL 运维核心技能(工作必备)
包含备份恢复、性能优化、高可用、监控等,是运维工程师的核心竞争力。
5.1 备份与恢复(数据安全底线)
核心知识:
逻辑备份():生成 SQL 文件,跨版本兼容,适合小数据量。物理备份(
mysqldump):复制数据文件,速度快,适合大数据量(需 Percona 工具)。全量备份:备份所有数据;增量备份:只备份上次备份后变化的数据。
xtrabackup
实验 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 效率)
核心知识:
配置优化:通过调整参数(如连接数、缓存大小)。SQL 优化:避免
my.cnf、冗余索引,用
SELECT *分析慢查询。慢查询日志:记录执行时间超过阈值的 SQL,用于定位问题。
EXPLAIN
实验 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:主库配置
修改,开启 binlog:
my.cnf
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(如 154)。
Position
步骤 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(MySQL 状态变量)。常见故障:MySQL 启动失败(检查配置文件、权限)、主从延迟(网络、SQL 冲突)、连接数满(调整
SHOW STATUS)。
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):主库处理写请求,从库处理读请求。配置定时备份:用每天凌晨 3 点执行
crontab全量备份,保留 7 天。监控告警:Grafana 配置 QPS>1000、连接数 > 400 时邮件告警。故障演练:模拟主库宕机,手动将从库提升为主库,验证业务连续性。
xtrabackup


