Mysql主从复制配置和主主配置

一、主从复制原理

image

复制涉及的概念

- 两个日志

BinLog:二进制文件,存储MasterDB中修改数据的内容。存储内容的格式有Statement,Row,Mixed。

Relay Log : 功能作用与Binlog一样,不同点在于当日志内的内容被读取完后,会被删除。

- 三个线程

Binlog dump 
    将读取Binlog后发送数据给IO线程

IO 线程
    将接收到数据传给RelayLog日志

SQL线程
    读取RelayLog数据

复制步骤如下

  1. 从库需要配置主库信息,建立连接
  2. Master数据库数据发生更改时,会记录在Binlog日志中
  3. Binlog dump线程读取Binlog中的内容,将数据发送给IO线程
  4. IO线程再将数据存入RelayLog中
  5. SQL线程读取RelayLog中的数据并写入从库

二、工具

  • VMware:12.0
  • Centos:7.0
  • Mysql:5.7.16
  • Master服务器:192.168.3.45
  • Slave服务器:192.168.171.129

三、步骤

1.安装Mysql。详情请看 安裝mysql5.7教程
2.修改主从服务器的配置./etc/my.cnf
## 192.168.3.45(master)
bind-address=192.168.3.45        #master 服务器地址
log_bin=mysql-bin  
#确保主从server_id要不同
server_id=128                        


## 192.168.171.129(slave)
bind-address=192.168.171.129         #slave 服务器地址
log_bin=mysql-bin  
#确保主从server_id要不同
server_id=130

注意:
要在[mysqld]下添加上面的内容并保证server_id唯一

3.重启主从服务器中的mysql
service mysqld restart
4.主数据库中创建从连接的用户
## 创建 test 用户,指定该用户只能在主库 192.168.3.45 上使用 123456 密码登录
mysql> create user 'test'@'192.168.3.45' identified by '123456';

## 为 test 用户赋予 REPLICATION SLAVE 权限。
mysql> grant replication slave on *.* to 'test'@'192.168.171.129';

## 查看用户
mysql> select user,host from mysql.user;

## 查看 master 状态
mysql> show master status;
## 记录一下的File名称和Pos位置

image

5.salve配置连接信息
mysql> change master to
    -> master_host='192.168.3.45',
    -> master_user='test',
    -> master_password='123456',
    -> master_log_file='mysql-bin.000012',
    -> master_log_pos=1204;

mysql> start slave;

mysql> show slave status \G

image
- 如果IO_Running和SQL_Running都为Yes,表示成功连接
- 若有一个为不为Yes,代表未连接上。这时候需要在IO_Error中看查看具体的错误信息
image

6.测试是否能够复制成功

master 插入一条数据,slave查看是否成功
192.168.3.45(master):
image
192.168.171.129(slave):
image

四、常见问题

  • master与slave的server_id相同时,会发生如下错误
    image

五、扩展

接下来会介绍常见的三个架构中的主主复制配置,其实主主配置,也就是互相依赖。原先主从配置中的主master依赖着从slave。就相当于两个主从配置。

1.按照上面的主从配置后,需要配置重要的信息,主键重复,server-id不能重复

--192.168.3.45

server-id=11   #任意自然数n,只要保证两台MySQL主机不重复就可以了。

log-bin=mysql-bin   #开启二进制日志

auto_increment_increment=2   #步进值auto_imcrement。一般有n台主MySQL就填n

auto_increment_offset=1   #起始值。一般填第n台主MySQL。此时为第一台主MySQL

binlog-ignore=mysql   #忽略mysql库【我一般都不写】

 binlog-ignore=information_schema   #忽略information_schema库【我一般都不写】

replicate-do-db=aa   #要同步的数据库,默认所有库

 --192.168.171.129

server-id=12

log-bin=mysql-bin

auto_increment_increment=2

auto_increment_offset=2

replicate-do-db=aa

配置好后重启MySQL

2.主master创建slave可访问的mysql用户

192.168.3.45中
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql11’@’192.168.171.129’ IDENTIFIED BY ‘mysql11’;

mysql>FLUSH PRIVILEGES;

查看二进制日志名和位置
mysq>show master status;

image

3.slave中连接master

在192.168.171.129中执行:

mysql>CHANGE MASTER TO

MASTER_HOST=’192.168.3.45’,

MASTER_USER=’mysql11’,

MASTER_PASSWORD=’mysql11’,

MASTER_LOG_FILE=’mysql-bin.000084’,

MASTER_LOG_POS=107;

image

4.测试是否成功配置

show slave status
image
当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常

5.主从复制和主主复制的区别

主从配置:
  • 适用场景:在读取压力非常大的时候,可以通过配置主从复制实现读写分离,降低主库的读取压力
  • 缺点:当从库数量多时,会增加主库io压力,降低复制效率
主主配置:
  • 作用:减少主从切换带来的性能消耗
  • 注意:多个主库要保证主键不能重复,即自增auto_increment

猜你喜欢

转载自blog.csdn.net/Yoga0301/article/details/80545914