一、主从复制是啥?
简单说:
让一台数据库(主)的数据,自动复制到另一台或多台数据库(从)上,实现数据备份、分担查询压力。
二、怎么复制的?------ 三个步骤
-
主库记录操作日志
主库把所有的写操作(增、删、改)记到一个叫"二进制日志"的文件里。
-
从库拉取日志
从库有一个叫 IO 线程 的"搬运工",它去主库把二进制日志搬回来,存到自己本地的"中继日志"里。
-
从库执行日志
从库还有一个叫 SQL 线程 的"执行工",它读取中继日志里的操作,在自己这边重新执行一遍。
最终结果: 从库和主库数据保持一致。
三、搭建主从复制需要做什么?
1. 基础环境准备(主库和从库都要做)
-
时间同步:用阿里云的 NTP 服务,保证两台机器时间一致。
-
关防火墙和 SELinux:避免网络不通。
2. 主库配置
-
开启二进制日志
-
设置 server-id(唯一标识)
-
创建一个专门给从库用的账号(比如
slave) -
查看当前日志文件和位置,记住它(从库要用)
3. 从库配置
-
设置 server-id(不能和主库一样)
-
启动 MySQL
-
告诉从库:"主库在哪、账号密码、从哪个日志文件的哪个位置开始复制"
-
启动 slave 角色
-
查看状态,确认 IO 线程和 SQL 线程都是
Yes
四、常见问题(尤其是 IO 线程连不上)
现象:
Slave_IO_Running: Connecting
Last_IO_Error: Can't connect to MySQL server
原因:
-
网络不通(防火墙、IP 写错)
-
主库账号密码不对
-
日志文件名或位置写错了
解决:
-
检查网络和防火墙
-
确认主库能正常访问
-
必要时用
reset replica;重置从库的复制状态
一句话总结
主从复制就是主库写日志,从库把日志搬回来再执行一遍,最终两边数据一样。搭建时注意时间同步、网络通、server-id 不同、日志位置要对。连不上多半是网络或配置问题。