mysql 主从添加slave_mysql主从复制-添加slave

# mysql主从复制-添加slave

> 背景: 数据库master是线上运行的核心数据库, 现在因为各种原因(数据备份、读写分离等)需要对master添加一个slave节点

## 完整步骤

``` linux

1. 主库开启binlog

2. 从库开启binlog

3. 完成主从同步账号的绑定

4. 主库导出数据

5. 从库导入数据

6. 从库start slave

```

## 1. 主库开启binlog

在主库`conf`目录下新建`my.cnf`

``` linux

[mysqld]

log-bin=mysql-bin

server-id=1

# 2.开启gtid

gtid_mode=on

enforce_gtid_consistency=on

skip_slave_start=1

expire_logs_days=7

```

## 3. 从库开启binlog

在从库`conf`目录下新建`my.cnf`

``` linux

[mysqld]

log-bin=mysql-bin

server-id=2

gtid_mode=on

enforce_gtid_consistency=on

skip_slave_start=1

expire_logs_days=7

# 跳过常见错误(这一句可以不加): 1032 -> 从库无法查找到数据, 1062 -> 主键冲突

slave-skip-errors = 1032,1062

```

## 4. 完成主从账号授权

``` linux

# 主库执行(%可以替换成从库所在服务器ip)

grant replication slave on *.* to 'slave1'@'%' identified by '123456';

# 从库执行(192.168.0.107为主库所在服务器ip)

change master to master_host='192.168.0.107', master_user='slave1',master_port=3306,master_password='123456';

# 此时从库执行show slave status应该可以看到一条数据

```

## 5. 主库导出数据

``` linux

# --master-data会在导出的sql文件里面记录binlog位置信息, 在重新导入的时候,非常有用

mysqldump -h192.168.0.107 -uroot -p \

--single-transaction \

--set-gtid-purged=off \

--column-statistics=0 \

--databases binlog-recovery-demo \

--master-data > binlog-recovery-demo.sql

```

## 6. 从库导入数据

``` linux

# 登录到从库后执行

source binlog-recovery-demo.sql

# 启动同步

start slave

# 设置主动延迟(可选)

CHANGE MASTER TO MASTER_DELAY = N;

```

你可能感兴趣的:(mysql,主从添加slave)