引言

主从复制是MySQL高可用架构的基础。本文讲解主从复制的配置和应用。

一、主从复制原理

1
主库 → binlog → I/O Thread → Relay Log → SQL Thread → 从库

二、配置主库

1
2
3
4
5
# my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=mydb
1
2
3
4
5
6
-- 创建复制用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

-- 查看主库状态
SHOW MASTER STATUS;

三、配置从库

1
2
3
4
# my.cnf
[mysqld]
server-id=2
relay-log=mysql-relay-bin
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 配置主库信息
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;

-- 启动从库
START SLAVE;

-- 查看从库状态
SHOW SLAVE STATUS\G

四、读写分离

1
2
3
4
5
6
7
8
9
10
// 使用数据源路由
@Transactional(readOnly = true)
public User getUser(Long id) {
return userDao.selectById(id); // 路由到从库
}

@Transactional
public void updateUser(User user) {
userDao.updateById(user); // 路由到主库
}

总结

MySQL主从复制核心:

  1. 原理:binlog复制
  2. 配置:主库开启binlog,从库配置主库信息
  3. 应用:读写分离、备份、高可用

参考资料