# 16.8 AB复制

## MySQL AB简介

AB复制又称主从复制，实现的是数据同步。

如果要做MySQL AB复制，数据库版本尽量保持一致。如果版本不一致，从服务器版本高于主服务器，但是版本不一致不能做双向复制。

MySQL AB复制有什么好处呢？

* 解决宕机带来的数据不一致，因为MySQL AB复制可以实时备份数据；
* 减轻数据库服务器压力，多台服务器的性能一般比单台要好。但是MySQL AB复制不适用于大数据量，如果是大数据环境，推荐使用集群。

​ MySQL复制（replication）是一个异步的复制，从一个MySQL实例（Master）复制到另一个MySQL（Slave）。实现整个主从复制，需要由Master服务器上的IO进程，和Slave服务器上的Sql进程和IO进程共同完成。

## 主从复制的过程

​ 要实现主从复制，首先必须打开Master端的binary log(bin-log)功能，因为整个MySQL复制过程实际上就是Slave从Master端获取相应的二进制日志，然后再在自己slave端完全顺序的执行日志中所有记录的各种操作。 主从复制的基本过程： ​ 1）MySQL Slave端的IO进程连接上Master，向Master请求指定日志文件的指定位置（或者从最开始的日志）之后的日志内容；

​ 2）Master接收到来自Slave的IO进程的请求后，负责复制的IO进程根据Slave的请求信息，读取相应日志内容，返回给Slave的IO的进程。并将本次请求读到的bin-log文件名及位置一起返回给Slave端。

​ 3）Slave的IO进程接收到信息后，将接收到的日志内容依次添加Slave端的realy-log文件的最末端，并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中，以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容，请发给我；”

​ 4）Slave的Sql进程监测到relay-log中新增了内容后，会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容，并在自身执行。

### 主服务器操作

#### 全备，并在从机恢复数据

#### 开启binlog日志

```
vim /etc/my.cnf
[mysqld]
log-bin = master
log-bin-index = master
server-id = 1
```

```
service mysqld restart
```

#### 授权从服务器

授权从服务器，可以传输binlog日志

```
grant replication slave on *.* to slave@'从服务器' identified by '123';
```

### 从服务器操作

#### 导入主服务器的数据

```
mysql -u root < all.sql
```

#### 改配置文件

```
vim /etc/my.cnf
[mysqld]
server-id = 2
```

#### 配置主服务器的信息

```
>stop slave;
>change master to
-> master_host = '主服务器'，
->master_user = 'slave',
->master_password = '123',
->master_port = 3306,
->master_log_file = 'mysql-bin.000001',
-> master_log_pos=120;
>start slave;
```

### 校验

```
> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
```

表示成功

​


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.clay-wangzhi.com/16-mysql/16.8-mysqlab-fu-zhi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
