第 1 章 MySQL 简介
MySQL 是一个开源的关系型数据库管理系统(RDBMS),以其高性能、可靠性和易用性成为 Web 应用(如 LAMP/LNMP 架构)的首选数据库。它使用 SQL(结构化查询语言)进行数据管理,支持多种存储引擎(如 InnoDB、MyISAM),并提供事务、外键、视图、存储过程等高级功能。
主要特点:
跨平台支持(Windows、Linux、macOS) 多线程、多用户 支持大型数据库 提供丰富的 API(C、Java、PHP、Python 等) 支持主从复制、分区、分片等高可用方案
第 2 章 安装与配置
2.1 在 Linux(CentOS/Ubuntu)上安装 MySQL
CentOS 7 / RHEL
# 下载并安装 MySQL 官方 Yum 源 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm rpm -ivh mysql80-community-release-el7-3.noarch.rpm # 安装 MySQL 服务器 yum install mysql-community-server -y # 启动服务并设置开机自启 systemctl start mysqld systemctl enable mysqld # 查看临时密码 grep 'temporary password' /var/log/mysqld.log 复制代码
Ubuntu 20.04
# 更新包列表 apt update # 安装 MySQL 服务器 apt install mysql-server -y # 启动服务 systemctl start mysql systemctl enable mysql # 安全配置(设置 root 密码等) mysql_secure_installation 复制代码
2.2 配置 MySQL
主配置文件通常位于 /etc/my.cnf(Linux)或 C:\ProgramData\MySQL\MySQL Server X.Y\my.ini(Windows)。常用配置项:
[mysqld] port = 3306 datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock character-set-server = utf8mb4 collation-server = utf8mb4_general_ci max_connections = 500 innodb_buffer_pool_size = 2G # 根据内存调整 复制代码
修改配置后需重启服务。
2.3 客户端连接 mysql -h localhost -P 3306 -u root -p 复制代码
2.4 Windows 平台安装 MySQL
Windows 下安装 MySQL 主要有两种方式:使用 MSI 安装向导(图形化,推荐新手)或使用 ZIP 压缩包手动配置(更灵活,适合需要精细控制的环境)。下面分别介绍。
2.4.1 使用 MSI 安装程序(图形化方式)
下载 MySQL Installer 访问 MySQL 官方下载页面,选择 Windows (x86, 32-bit), MSI Installer 或 Windows (x86, 64-bit), MSI Installer 。通常建议下载体积较大的 mysql-installer-community-.msi(包含所有产品和工具)。
运行安装程序 双击下载的 .msi 文件,若提示需要 .NET Framework,请按提示安装(MySQL Installer 需要 .NET 4.5.2+)。
选择安装类型
Developer Default :安装 MySQL 服务器以及开发所需工具(如 MySQL Workbench、Shell、Router 等),适合开发人员。Server only :仅安装 MySQL 服务器。Client only :仅安装客户端工具(无服务器)。Full :安装所有可用组件。Custom :自定义选择组件。 对于初学者,建议选择 Developer Default 或 Server only 。 检查依赖并执行安装 安装程序会检查系统缺少的依赖(如 Visual C++ 运行库),点击“Execute”自动安装缺失组件。之后点击“Next”开始安装所选产品。
产品配置 安装完成后,安装程序自动进入配置向导(也可稍后通过 MySQL Installer 单独配置)。主要配置项包括:
High Availability :选择独立服务器(Standalone MySQL Server)或 InnoDB Cluster(集群),通常选独立。Type and Networking :
配置类型:
Development Computer :占用较少内存,适合开发机。Server Computer :中等内存占用。Dedicated Computer :使用全部可用内存,适合专用服务器。 端口:默认 3306,可修改。 是否开启 X 协议端口(33060),用于 MySQL 8.0 的文档存储功能,可按需开启。 Authentication Method :
Use Strong Password Encryption (推荐):使用 MySQL 8.0 默认的 caching_sha2_password 插件,安全性高。Use Legacy Authentication :兼容旧版客户端(使用 mysql_native_password),如果连接工具较老可选用。 Accounts and Roles :设置 root 密码,并可添加其他管理员用户。Windows Service :将 MySQL 配置为 Windows 服务,可指定服务名称(默认 MySQL80),并选择启动类型(自动启动推荐)。还可勾选“Include Bin Directory in Windows PATH”以便在命令行直接使用 mysql 命令。Apply Configuration :点击“Execute”应用配置,完成后点击“Finish”。 验证安装 打开命令提示符(CMD),输入:
输入刚才设置的密码,若成功进入 MySQL 提示符 mysql>,则安装成功。也可通过开始菜单中的 MySQL Workbench 连接测试。
2.4.2 使用 ZIP 压缩包手动安装(免安装版)
适合需要定制化或绿色部署的场景。
下载 ZIP 包 访问 MySQL 社区版下载页,选择 Windows (x86, 64-bit), ZIP Archive 下载。
解压到目标目录 将 ZIP 包解压到指定路径,例如 C:\mysql-8.0.36-winx64。注意路径中不要包含中文或空格。
创建配置文件 my.ini 在解压目录下新建文本文件 my.ini,内容参考如下(根据需求调整路径):
[mysqld] # 设置 MySQL 安装目录 basedir=C:/mysql-8.0.36-winx64 # 数据存放目录 datadir=C:/mysql-8.0.36-winx64/data # 端口 port=3306 # 默认存储引擎 default-storage-engine=INNODB # 字符集 character-set-server=utf8mb4 [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 复制代码 注意:路径中使用正斜杠 / 或双反斜杠 \\。
初始化数据目录 以管理员身份 打开命令提示符,进入 MySQL 的 bin 目录:
cd C:\mysql-8.0.36-winx64\bin 复制代码 执行初始化命令(生成 root 临时密码):
mysqld --initialize --console 复制代码 记录控制台输出的临时密码(形如 root@localhost: >?
安装 Windows 服务 继续在 bin 目录下执行:
mysqld --install MySQL80 --defaults-file="C:\mysql-8.0.36-winx64\my.ini" 复制代码 其中 MySQL80 是服务名称,可自定义。成功后提示 Service successfully installed.
启动服务 在命令提示符中执行:
或在“服务”管理器中手动启动。
修改 root 密码 使用初始密码登录 MySQL:
输入初始化时生成的临时密码。登录成功后修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; FLUSH PRIVILEGES; 复制代码 可选:添加环境变量 将 C:\mysql-8.0.36-winx64\bin 添加到系统 PATH 变量,以便在任何路径下直接使用 mysql 命令。
验证 重新打开新命令提示符,执行 mysql -u root -p 输入新密码,若能正常进入则安装成功。
以上两种方法任选其一即可在 Windows 上成功安装 MySQL。推荐初学者使用 MSI 安装向导,步骤简单直观;ZIP 手动安装则适合需要批量部署或自定义配置的场景。
第 3 章 MySQL 基本操作
3.1 数据库管理 -- 查看所有数据库 SHOW DATABASES; -- 创建数据库 CREATE DATABASE IF NOT EXISTS school CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; -- 切换数据库 USE school; -- 删除数据库 DROP DATABASE school; 复制代码
3.2 表管理 -- 创建表 CREATE TABLE student ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age TINYINT UNSIGNED, gender ENUM('M','F'), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 查看表结构 DESC student; -- 修改表(添加列) ALTER TABLE student ADD email VARCHAR(100) AFTER name; -- 删除表 DROP TABLE student; 复制代码
第 4 章 数据类型
MySQL 支持多种数据类型,合理选择可优化存储与性能。
类型分类 常见类型 说明 数值 TINYINT, SMALLINT, INT, BIGINT, DECIMAL, FLOAT, DOUBLE DECIMAL 用于精确小数,FLOAT/DOUBLE 为近似值 字符串 CHAR, VARCHAR, TEXT, BLOB, ENUM, SET CHAR 定长,VARCHAR 变长,TEXT 长文本 日期时间 DATE, TIME, DATETIME, TIMESTAMP, YEAR TIMESTAMP 受时区影响,范围 1970-2038 二进制 BINARY, VARBINARY, BLOB 存储图像、文件等 JSON JSON MySQL 5.7+ 支持 JSON 数据类型
示例:
CREATE TABLE product ( id INT, price DECIMAL(10,2), -- 总位数10,小数位2 description TEXT, created DATE, attributes JSON ); 复制代码
第 5 章 SQL 基础查询(CRUD)
5.1 INSERT 插入数据 -- 插入单行 INSERT INTO student (name, age, gender) VALUES ('张三', 20, 'M'); -- 插入多行 INSERT INTO student (name, age, gender) VALUES ('李四', 22, 'F'), ('王五', 21, 'M'); -- 从另一表插入 INSERT INTO student_archive (id, name) SELECT id, name FROM student WHERE age > 30; 复制代码
5.2 SELECT 查询 -- 查询所有列 SELECT * FROM student; -- 查询指定列 SELECT name, age FROM student; -- 别名 SELECT name AS 姓名, age 年龄 FROM student; -- 去重 SELECT DISTINCT gender FROM student; 复制代码
5.3 UPDATE 更新数据 -- 更新所有行(慎用!) UPDATE student SET age = age + 1; -- 带条件的更新 UPDATE student SET email = 'test@example.com' WHERE id = 1; 复制代码
5.4 DELETE 删除数据 -- 删除满足条件的行 DELETE FROM student WHERE id = 2; -- 删除所有行(保留表结构) DELETE FROM student; -- 或使用 TRUNCATE(更快,但不可回滚) TRUNCATE TABLE student; 复制代码
第 6 章 条件查询与运算符
6.1 WHERE 子句 SELECT * FROM student WHERE age > 18; SELECT * FROM student WHERE name = '张三'; SELECT * FROM student WHERE age BETWEEN 18 AND 25; SELECT * FROM student WHERE name LIKE '张%'; -- % 任意多个字符,_ 单个字符 SELECT * FROM student WHERE gender IN ('M', 'F'); 复制代码
6.2 逻辑运算符 SELECT * FROM student WHERE age > 18 AND gender = 'M'; SELECT * FROM student WHERE age < 18 OR gender = 'F'; SELECT * FROM student WHERE NOT (age = 20); 复制代码
6.3 空值处理 SELECT * FROM student WHERE email IS NULL; SELECT * FROM student WHERE email IS NOT NULL; 复制代码
6.4 排序 SELECT * FROM student ORDER BY age DESC, name ASC; 复制代码
6.5 限制结果 SELECT * FROM student LIMIT 5; -- 前5行 SELECT * FROM student LIMIT 5 OFFSET 10; -- 跳过10行,取5行(分页) 复制代码
第 7 章 函数与分组
7.1 常用聚合函数 SELECT COUNT(*) FROM student; -- 行数 SELECT AVG(age) FROM student; -- 平均年龄 SELECT SUM(age) FROM student; -- 年龄总和 SELECT MAX(age), MIN(age) FROM student; -- 最大/最小年龄 复制代码
7.2 分组 GROUP BY -- 按性别分组,统计每组人数和平均年龄 SELECT gender, COUNT(*) AS count, AVG(age) AS avg_age FROM student GROUP BY gender; 复制代码
7.3 HAVING 过滤分组 -- 筛选平均年龄大于20的性别组 SELECT gender, AVG(age) AS avg_age FROM student GROUP BY gender HAVING avg_age > 20; 复制代码
7.4 字符串函数 SELECT CONCAT(name, '(', age, ')') FROM student; SELECT UPPER(name) FROM student; SELECT SUBSTRING(name, 1, 2) FROM student; SELECT LENGTH(name) FROM student; -- 字节数,utf8mb4 中汉字占3-4字节 复制代码
7.5 日期函数 SELECT NOW(); -- 当前日期时间 SELECT CURDATE(); -- 当前日期 SELECT DATE_ADD(CURDATE(), INTERVAL 1 DAY); -- 加一天 SELECT DATEDIFF('2025-12-31', CURDATE()); -- 相差天数 复制代码
第 8 章 多表连接
8.1 内连接(INNER JOIN) -- 假设有 course 表和 score 表 SELECT s.name, c.course_name, sc.score FROM student s INNER JOIN score sc ON s.id = sc.student_id INNER JOIN course c ON sc.course_id = c.id; 复制代码
8.2 左连接(LEFT JOIN) -- 显示所有学生及其成绩(包括无成绩的学生) SELECT s.name, sc.score FROM student s LEFT JOIN score sc ON s.id = sc.student_id; 复制代码
8.3 右连接(RIGHT JOIN) -- 显示所有课程及其成绩(包括无成绩的课程) SELECT c.course_name, sc.score FROM score sc RIGHT JOIN course c ON sc.course_id = c.id; 复制代码
8.4 自连接 -- 员工表,查找员工及其经理 SELECT e.name AS employee, m.name AS manager FROM employee e LEFT JOIN employee m ON e.manager_id = m.id; 复制代码
第 9 章 子查询
9.1 WHERE 中的子查询 -- 查询年龄大于平均年龄的学生 SELECT name, age FROM student WHERE age > (SELECT AVG(age) FROM student); 复制代码
9.2 FROM 中的子查询(派生表) -- 查询每个性别中年龄最大的学生 SELECT gender, name, age FROM student WHERE (gender, age) IN ( SELECT gender, MAX(age) FROM student GROUP BY gender ); 复制代码
9.3 SELECT 中的子查询(标量子查询) -- 查询学生姓名及其所在班级人数 SELECT name, (SELECT COUNT(*) FROM student s2 WHERE s2.class_id = s1.class_id) AS class_count FROM student s1; 复制代码
9.4 EXISTS / NOT EXISTS -- 查询有选课的学生 SELECT name FROM student s WHERE EXISTS (SELECT 1 FROM score sc WHERE sc.student_id = s.id); 复制代码
第 10 章 索引
索引用于加速数据检索,但会降低写入性能并占用磁盘空间。
10.1 索引类型
普通索引(INDEX) :最基本的索引,无唯一性限制。唯一索引(UNIQUE) :索引列的值必须唯一,允许 NULL。主键索引(PRIMARY KEY) :特殊的唯一索引,不允许 NULL,一个表只能有一个。全文索引(FULLTEXT) :用于全文搜索,MyISAM 和 InnoDB 支持。空间索引(SPATIAL) :用于地理空间数据。
10.2 创建索引 -- 创建表时定义索引 CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(50), INDEX idx_name (name) ); -- 后期添加索引 CREATE INDEX idx_age ON student(age); CREATE UNIQUE INDEX idx_email ON student(email); ALTER TABLE student ADD INDEX idx_name_age (name, age); -- 复合索引 复制代码
10.3 查看索引
10.4 删除索引 DROP INDEX idx_name ON student; 复制代码
10.5 索引使用原则
对频繁查询的列创建索引。 选择性高的列(如性别选择性低,不适合单独索引)。 避免在索引列上使用函数或计算。 复合索引注意最左前缀原则。
第 11 章 视图
视图是虚拟表,基于 SQL 查询结果,可简化复杂查询、提高安全性。
11.1 创建视图 CREATE VIEW v_student_score AS SELECT s.id, s.name, c.course_name, sc.score FROM student s JOIN score sc ON s.id = sc.student_id JOIN course c ON sc.course_id = c.id; 复制代码
11.2 使用视图 SELECT * FROM v_student_score WHERE name = '张三'; 复制代码
11.3 修改/删除视图 CREATE OR REPLACE VIEW v_student_score AS ...; DROP VIEW v_student_score; 复制代码
注意:对视图的更新(INSERT/UPDATE/DELETE)可能有限制,取决于视图定义。
第 12 章 存储过程与函数
存储过程和函数是预编译的 SQL 代码块,可提高复用性和性能。
12.1 存储过程 DELIMITER $$ CREATE PROCEDURE GetStudentsByAge(IN min_age INT) BEGIN SELECT * FROM student WHERE age >= min_age; END$$ DELIMITER ; -- 调用 CALL GetStudentsByAge(20); 复制代码
12.2 存储函数 DELIMITER $$ CREATE FUNCTION GetAgeGroup(age INT) RETURNS VARCHAR(10) DETERMINISTIC BEGIN IF age < 18 THEN RETURN '未成年'; ELSE RETURN '成年'; END IF; END$$ DELIMITER ; -- 使用 SELECT name, GetAgeGroup(age) FROM student; 复制代码
12.3 流程控制 DELIMITER $$ CREATE PROCEDURE example() BEGIN DECLARE i INT DEFAULT 1; WHILE i <= 10 DO INSERT INTO log (message) VALUES (CONCAT('Count: ', i)); SET i = i + 1; END WHILE; END$$ DELIMITER ; 复制代码
12.4 查看与删除 SHOW PROCEDURE STATUS WHERE Db = 'school'; DROP PROCEDURE GetStudentsByAge; 复制代码
第 13 章 触发器
触发器是自动执行的操作,在 INSERT、UPDATE、DELETE 事件前后触发。
13.1 创建触发器 DELIMITER $$ CREATE TRIGGER before_student_insert BEFORE INSERT ON student FOR EACH ROW BEGIN SET NEW.created_at = NOW(); -- 自动设置创建时间 END$$ DELIMITER ; 复制代码
13.2 触发时机与事件
BEFORE / AFTER INSERT / UPDATE / DELETE
示例:记录学生年龄变更日志
CREATE TABLE student_age_log ( student_id INT, old_age TINYINT, new_age TINYINT, changed_at TIMESTAMP ); DELIMITER $$ CREATE TRIGGER after_student_update_age AFTER UPDATE ON student FOR EACH ROW BEGIN IF OLD.age != NEW.age THEN INSERT INTO student_age_log (student_id, old_age, new_age, changed_at) VALUES (OLD.id, OLD.age, NEW.age, NOW()); END IF; END$$ DELIMITER ; 复制代码
13.3 管理触发器 SHOW TRIGGERS; DROP TRIGGER before_student_insert; 复制代码
第 14 章 事务与锁
事务确保一组操作要么全部成功,要么全部失败。InnoDB 支持事务。
14.1 ACID 特性
原子性 :事务不可分割。一致性 :事务前后数据完整性约束不被破坏。隔离性 :并发事务互不干扰。持久性 :提交后数据永久保存。
14.2 事务控制语句 START TRANSACTION; -- 或 BEGIN UPDATE account SET balance = balance - 100 WHERE user_id = 1; UPDATE account SET balance = balance + 100 WHERE user_id = 2; COMMIT; -- 提交 -- 或 ROLLBACK; -- 回滚 复制代码
14.3 保存点 SAVEPOINT sp1; ... ROLLBACK TO SAVEPOINT sp1; 复制代码
14.4 事务隔离级别
MySQL 支持四种隔离级别(由低到高):
READ UNCOMMITTED :脏读、不可重复读、幻读都可能。READ COMMITTED :避免脏读,但可能出现不可重复读、幻读。REPEATABLE READ (默认):避免脏读和不可重复读,但可能出现幻读(InnoDB 通过多版本并发控制 MVCC 基本避免幻读)。SERIALIZABLE :最高级别,事务串行化,性能低。
查看/设置隔离级别:
SELECT @@transaction_isolation; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; 复制代码
14.5 锁机制
共享锁(S) :允许其他事务读取,但阻止修改。SELECT ... LOCK IN SHARE MODE排他锁(X) :阻止其他事务读取和修改。SELECT ... FOR UPDATE行锁、表锁、意向锁等由 InnoDB 自动管理。
第 15 章 备份与恢复
15.1 逻辑备份(mysqldump) # 备份单个数据库 mysqldump -u root -p school > school_backup.sql # 备份多个数据库 mysqldump -u root -p --databases db1 db2 > dbs_backup.sql # 备份所有数据库 mysqldump -u root -p --all-databases > all.sql # 备份时包含存储过程、事件等 mysqldump -u root -p --routines --events school > school_full.sql 复制代码
恢复:
mysql -u root -p school < school_backup.sql 复制代码
15.2 物理备份
直接复制数据目录(需停服务或使用文件系统快照),或使用工具如 xtrabackup(Percona)进行热备。
# 使用 xtrabackup 全量备份 xtrabackup --backup --target-dir=/backup/base --user=root --password=xxx # 准备(应用日志) xtrabackup --prepare --target-dir=/backup/base # 恢复(需清空 datadir) xtrabackup --copy-back --target-dir=/backup/base 复制代码
15.3 二进制日志(binlog)用于时间点恢复
启用 binlog(my.cnf):
server-id = 1 log-bin = /var/lib/mysql/mysql-bin expire_logs_days = 7 复制代码
查看 binlog:
SHOW BINARY LOGS; SHOW MASTER STATUS; 复制代码
恢复至指定时间点:
mysqlbinlog --start-datetime="2025-02-01 00:00:00" --stop-datetime="2025-02-02 00:00:00" /var/lib/mysql/mysql-bin.000001 | mysql -u root -p 复制代码
第 16 章 性能优化
16.1 慢查询日志
开启慢查询日志,记录执行时间超过阈值的 SQL。
slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 复制代码
分析工具:mysqldumpslow、pt-query-digest。
16.2 EXPLAIN 分析查询 EXPLAIN SELECT * FROM student WHERE age > 20; 复制代码
关注列:
type :ALL(全表扫描)、index(索引扫描)、range(范围扫描)、ref(非唯一索引等值)、eq_ref(主键/唯一索引等值)、const(常量)key :实际使用的索引rows :估计扫描行数Extra :Using index(覆盖索引)、Using where、Using filesort(文件排序)等
16.3 索引优化
为 WHERE、JOIN、ORDER BY 列创建索引。 避免索引失效(如对列使用函数、隐式类型转换)。 使用覆盖索引(索引包含查询所需的所有列)减少回表。
16.4 表结构优化
选择合适的数据类型,避免过大。 尽量使用 NOT NULL。 垂直拆分(大字段分离到其他表)。 水平分区(如 RANGE 分区)。 CREATE TABLE logs ( id INT NOT NULL, log_date DATE, message TEXT ) PARTITION BY RANGE (YEAR(log_date)) ( PARTITION p2023 VALUES LESS THAN (2024), PARTITION p2024 VALUES LESS THAN (2025), PARTITION p_future VALUES LESS THAN MAXVALUE ); 复制代码
16.5 参数调优
innodb_buffer_pool_size :InnoDB 缓存数据和索引的内存大小,通常设为物理内存的 70%-80%。query_cache_type :查询缓存(MySQL 8.0 已废弃)。max_connections :最大连接数。sort_buffer_size 、join_buffer_size :会话级缓冲区,注意不要过大。
16.6 使用缓存
应用层缓存(Redis、Memcached)减轻数据库压力。
第 17 章 用户与权限管理
17.1 用户管理 -- 创建用户 CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'secure_password'; -- 修改密码 ALTER USER 'app_user'@'localhost' IDENTIFIED BY 'new_password'; -- 删除用户 DROP USER 'app_user'@'localhost'; 复制代码
17.2 权限管理 -- 授予权限 GRANT SELECT, INSERT, UPDATE ON school.* TO 'app_user'@'localhost'; -- 授予所有权限 GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; -- 查看权限 SHOW GRANTS FOR 'app_user'@'localhost'; -- 撤销权限 REVOKE INSERT ON school.* FROM 'app_user'@'localhost'; -- 刷新权限(使修改立即生效) FLUSH PRIVILEGES; 复制代码
17.3 权限级别
全局:*.* 数据库:db_name.* 表:db_name.table_name 列:需在 GRANT 中指定列。
第 18 章 高可用与复制简介
18.1 主从复制
主库将更改记录到二进制日志,从库读取日志并重放。
配置步骤(简要):
主库 my.cnf:
server-id = 1 log-bin = mysql-bin binlog-do-db = school # 可选,指定复制数据库 复制代码
从库 my.cnf:
server-id = 2 relay-log = relay-log log-bin = mysql-bin read_only = 1 复制代码
主库创建复制用户:
CREATE USER 'repl'@'slave_ip' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'slave_ip'; 复制代码
从库设置主库信息并启动:
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; START SLAVE; 复制代码
查看状态:
18.2 其他高可用方案
MHA :Master High Availability,故障自动切换。MySQL Group Replication :组复制,多主或单主。Orchestrator :复制拓扑管理。ProxySQL :数据库中间件,实现读写分离、负载均衡。
结语
本教程从 MySQL 的安装、基础 SQL 到高级特性(索引、事务、备份、优化)进行了较为全面的介绍。在实际工作中不断实践,深入理解原理,并关注官方文档和社区动态。
注意:示例基于 MySQL 8.0,部分语法可能与旧版本略有差异,请根据实际版本调整。