Centos7 mysql 主从复制(读写分离)设置

最近准备研究一些实战型的可以承担中型流量的系统架构知识,记录于此。
Centos7 mysql 主从复制

1 Mysql 读写分离主从复制模式概述

  • 主(master)从(slave)复制,就是一台机器的mysql充当主服务器,其他充当从服务器。
  • 更新操作(insert、update、delete)在主(master)服务器
  • 读取在从服务器(select)

1.1 mysql 支持的复制类型

  1. 基于语句复制,MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时, 会自动选着基于行的复制。   
    • 在主服务器上执行的SQL语句,
    • 在从服务器上执行同样的语句。
  2. 基于行复制,把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
  3. 混合类型复制,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

1.2 复制解决的问题

MySQL复制技术有以下一些特点:

  • 数据分布 (Data distribution )
  • 负载平衡(load balancing)
  • 备份(Backups)
  • 高可用性和容错行 High availability and failover

1.3 复制如何工作

分3个步骤

  1. master 将改变记录到二进制(binary log)中。
  2. slave 将 master 的binary log events 拷贝到他的中继日志(relay log)
  3. slave 重做中继日志中的事件,将改变反映他自己的数据。

2 复制配置

两天 centos

  • 主(master)192.168.0.112
  • 从(slave)192.168.0.113

2.1 master 建立账号赋权

在 Master 中创建账号 backup,并允许每个 slave 节点有 PEPLICATION SLAVE 权限。用户名的密码都会存储在文本文件 master.info 中

‘backup’@’%’ 表示用还可以从远程登录

CREATE USER ‘backup’@’%’ IDENTIFIED BY ‘password’;

授权

mysql > GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*  TO backup@’%’  IDENTIFIED BY ‘1234’;

2.2 拷贝数据

新安装服务器不需要

2.3 配置 master 节点

查找 my.cnf 文件

find / -name 'my.cnf'

现在在 /etc/my.cnf

编辑

vi /etc/my.cnf

在文本后增加

server-id=1 
log-bin=master-bin
log-bin-index=master-bin.index

保存文件后

systemctl restart mysqld

进入mysql

show master status

2.4 配置 slave 节点

配置 my.cnf 文件如下:

og_bin= mysql-bin
server_id = 2
relay_log= mysql-relay-bin
log_slave_updates = 1
read_only= 1

2.5 启动 slave

接下来就是让slave连接master,并开始重做master二进制日志中的事件。你不应该用配置文件进行该操作,而应该使用CHANGE MASTER TO语句,该语句可以完全取代对配置文件的修改,而且它可以为slave指定不同的master,而不需要停止服务器。如下:

mysql> CHANGE MASTER TO MASTER_HOST='server1',

    -> MASTER_USER='repl',

    -> MASTER_PASSWORD='p4ssword',

    -> MASTER_LOG_FILE='mysql-bin.000001',

    -> MASTER_LOG_POS=0;

测试

mysql> start slave;

显示,注意命令是大写的G,查看输出结果 在这里主要是看: Slave_IO_Running=Yes Slave_SQL_Running=Yes

msyql> show slave status G

在 master 端输入 show processlistG

msyql> show processlist G

2.6 停止 slave

stop slave

只有再停止了 slave 后才能修改配置文件。

2.7 问题

:The slave I/O thread stops because master and slave have equal MySQL server UUIDs

最后检查发现他们的auto.cnf中的server-uuid是一样的。。。

[root@localhost ~]# vim /var/lib/mysql/auto.cnf

[auto]
server-uuid=4f37a731-9b79-11e8-8013-000c29f0700f

问题解决
停止从库的mysqld服务,删除他的auto.cnf文件,再启动数据库服务即可:

[root@localhost mysql]# systemctl stop mysqld.service

[root@localhost mysql]# mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak

[root@localhost mysql]# systemctl start mysqld.service

2.8 测试

在主库创建一个demo库

create database demo;

在从库也能快速看到。

原文地址:https://www.cnblogs.com/fishpro/p/12792479.html