一、原理

mysql主从配置的流程大体如图:

1)master会将变动记录到二进制日志里面;

2)master有一个I/O线程将二进制日志发送到slave;

3) slave有一个I/O线程把master发送的二进制写入到relay日志里面;

4)slave有一个SQL线程,按照relay日志处理slave的数据;

二、操作步骤

按照原理,我们开启mysql主从复制,我们大体需要做以下操作:

1)开启master的二进制日志

2)开启slave的二进制日志

3)将slave指向master

4)开始复制

三、开启master二进制日志

1)编辑mysql的配置文件,使用命令:

vim /etc/my.cnf

2)添加二进制日志配置,开启二进制(master-bin只是日志文件名称,可以自己指定)

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

注意:server-id是要指定的,不然会报错,每一台指定一个唯一标识符

四、授权

我们需要给slave配置一个用户/密码的权限

mysql>GRANT REPLICATION SLAVE ON *.* TO '用户名'@'slave数据库的IP地址' IDENTIFIED BY '密码';

这行命令的意思是:允许在某个IP地址的某个用户以某个密码对当前数据库的所有库和所有表进行复制操作

注意:以上配置了权限,我们需要刷新以下权限使用命令:

mysql>flush privileges;

或者直接重启mysql服务:

service mysql restart;

五、查看以下master的状态

其实主要是查看以下master的日志文件名字,以及文件所在的位置,使用命令:

show master status;

可以看到类似如下信息:

+-------------------+----------+--------------+------------------+-------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| master-bin.000001 |     1516 |              |                  |                   |

+-------------------+----------+--------------+------------------+-------------------+

File: 日志文件名称

Position: 日志所在位置

六、开启slave的二进制日志

进入slave的服务器

1)编辑mysql的配置文件,使用命令:

vim /etc/my.cnf

2)添加二进制日志配置,开启二进制(relay-bin只是日志文件名称,可以自己指定)

log-bin=relay-bin
server-id=2

注意:server-id是要指定的,不然会报错,每一台指定一个唯一标识符

七、将slave指向master

mysql>CHANGE MASTER TO
>MASTER_HOST='master所在服务器的IP',
>MASTER_USER='master授权的账号',
>MASTER_PASSWORD='master授权的密码',
>MASTER_LOG_FILE='master的日志文件名',
>MASTER_LOG_POS=master的日志所在位置;

八、开始主从复制

在slave上执行

mysql>start slave;

我们可以查看slave的运行状态:

show slave status\G;

可以看到类似如下内容:

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master的IP地址
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 1516
Relay_Log_File: slave-bin.000004
Relay_Log_Pos: 1117
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......

注意:

Slave_IO_Running: YES 表示slave的日志读取线程开启

Slave_SQL_Running: YES 表示SQL执行线程开启

如果有主从复制有错误信息其实也可以看到

九、测试

以上我们就将主从复制功能设置完毕了,我们可以通过在master里面创建数据库,或者表,插入数据等来测试一下

十、注意点

1)开启了主从复制,slave库如果写入数据的话,可能导致数据回滚从而主从复制线程中断,可以通过以下方式解决:

mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;

2)如果要停止slave的复制可以使用命令:

mysql>stop slave;

3)由于主从复制是基于I/O的日志,所以会存在一定延时,如果对数据一致性要求非常高的话,简单的主从复制在实际环境中会存在问题

参考文章:

1)https://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label0

2)https://www.linuxidc.com/Linux/2014-02/96945.htm

linux系统mysql主从配置的更多相关文章

  1. linux中MySQL主从配置(Django实现主从读写分离)

    一 linux中MySQL主从配置原理(主从分离,主从同步) mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到sl ...

  2. Linux下mysql主从配置

    mysql服务器的主从配置,这样可以实现读写分离,也可以在主库挂掉后从备用库中恢复需要两台机器,安装mysql,两台机器要在相通的局域网内主机A: 192.168.1.100从机B:192.168.1 ...

  3. windows下mysql和linux下mysql主从配置

    1. linux下mysql安装版本5.6   windows下mysql版本5.7  不要问我为什么版本不一致  就是想这么搞 2. linux为主服务器   windows为从服务器 3.找到li ...

  4. linux 下 mysql 主从配置

    话不多说,直接干. 准备条件:安装两个mysql数据库,随便哪个作主库,另一个从库. 1.在主库创建 复制用的账号 grant replication slave ,replication clien ...

  5. Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  6. Mysql主从配置+读写分离

    Mysql主从配置+读写分离     MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. ...

  7. 黄聪:Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  8. 解读mysql主从配置及其原理分析(Master-Slave)

    在windows下配置的,后面会在Linux下配置进行测试,需要配置mysql数据库同步的朋友可以参考下. 1.在主数据库服务器为从服务器添加一个拥有权限访问主库的用户:GRANT REPLICATI ...

  9. mysql主从配置

    引言: 双11,阿里云服务器打折,于是我忍不住又买了一台服务器,于是咱也是有两台服务器的爷们了,既然有了两台服务器,那么肯定要好好利用一下吧,那么就来玩玩mysql的主从配置吧. 准备 两台数据库服务 ...

随机推荐

  1. Python之旅Day8 socket网络编程

    socket网络编程 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可.soc ...

  2. linux 性能优化

    linux的性能优化: 1.CPU,MEM 2.DISK--RAID 3.网络相关的外设,网卡 linux系统性能分析: top:linux系统的负载,CPU,MEM,SWAP,占用CPU和内存比较的 ...

  3. [转] AppArmor

    AppArmor https://help.ubuntu.com/14.04/serverguide/apparmor.html AppArmor 是一个实施了基于名称强制存取控制的Linux安全模组 ...

  4. Virtio: An I/O virtualization framework for Linux

    The Linux kernel supports a variety of virtualization schemes, and that's likely to grow as virtuali ...

  5. Vue实现懒加载的基本思路

    懒加载是前端开发者的基本功之一.实现懒加载肯定是要直接操作DOM的,这个没得跑,但我们可以想办法让流程尽可能优雅些. 基本结构 父组件是列表容器,子组件是列表中的项,如卡片.帖子等,承载图片的DOM对 ...

  6. 如何推翻JAVA的统治地位?

    “java越来越过份了.”php狠狠的说,他转头看着C:“C哥,您可是前辈,java最近砸了我不少场子,您老再不出来管管,我怕他眼里就没有您了啊.” C哥吸烟,慢慢的说:“年轻人不要着急,java的根 ...

  7. PHP中的自动加载

      自动加载? 或许你已经对自动加载有所了解.简单描述一下:自动加载就是我们在new一个class的时候,不需要手动去写require来导入这个class.php文件,程序自动帮我们加载导入进来.这是 ...

  8. 阿里___MQTT中协议QoS的实现

    项目中用到了MQTT,由于MQTT中支持QoS,服务质量保证,在阿里面试的时候,问到如何设计QoS,一时糊涂,没有完全回答出来. 特点 MQTT - MQ Telemetry Transport   ...

  9. 剑指offer【03】- 从尾到头打印链表(4种实现方法)

    题目:从尾到头打印链表 考点:链表 题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 法一:ArrayList头插法 /** * public class ListNode ...

  10. React Native IOS搭建开发环境

    安装 必须的软件 Homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mast ...