MySql 5.7 主从库配置方案(Master/Slave)
来源:互联网 发布:js 设置css 编辑:程序博客网 时间:2024/05/01 13:15
MySql 主从库配置方案及原理
本配置是本人在实际项目中根据需求进行的配置操作记录,编写该文过程中可也参考了许多文章,配置过程中可能会有一些不妥之处,还请大家多多指正。
一、原理解析:
1.Replication 线程
Mysql的 Replication 是一个异步的复制过程(mysql5.1.7 以上版本分为异 步复制和半同步两种模式),从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的实现整个复制 过程主要由三个线程来完成,其中两个线程(Sql线程和 IO 线程)在 Slave 端,另 外一个线程(IO 线程)在 Master 端。要实现 MySQL 的 Replication ,首先必须 打开 Master 端的 Binary Log(mysql-bin.xxxxxx功能,否则无法实现。因为整个 复制过程实际上就是 Slave 从 Master 端获取该日志然后再在自己身上完全 顺序 的执行日志中所记录的各种操作。打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用 “—log-bin” 参数选项,或者在 my.cnf 配置文件 中的 mysqld 参数组([mysqld]标识后的参数部分)增加 “log-bin” 参数项。
2.复制过程:
2.1 Slave 上面的 IO 线程连接上 Master,并请求从指定日志文件的指定位置 (或者从最开始的日志)之后的日志内容;
2.2 Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线 程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置;
2.3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的 Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的 Master 端 的 bin-log的文件名和位置记录到 master- info 文件中,以便在下一次读取的时候 能够清楚的高速 Master“我需要从某个 bin-log的哪个位置开始往后的日志内容, 请发给我” ;
2.4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句, 并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave 端执行了同 样的 Query,所以两端的数据是完全一样的。
二、配置准备:
- 操作系统:windows
- 数据库 :5.7及以上版本版本
- 主库(Master):172.21.44.144:3306
- 从库(Slave):172.21.44.143:3306
1.设置主库信息
备注:本文只对配置主从分离进行讲解,不对数据库本身安装与配置的讲解,如有需要,请在csdn博客中搜索mysql免安装版本的相关配置
1.1、主从库配置方法及信息:
1.1.1 在主库中创建用于从库访问的用户:
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.12.44.143' IDENTIFIED BY '123456';#账户名:slave#地址:172.12.44.143#password:123456
1.1.2 (Master主库)修改mysql 中 my.ini文件中的信息:
[mysqld]server-id = 144;#[必须]服务器唯一ID,默认是1,一般取IP最后一段login_bin = mysql-bin;#[必须]启用二进制日志#如有其他需求还可以添加,例如忽略哪些数据库不进行同步等。
1.1.3 (Slave从库)修改mysql 中 my.ini文件中的信息:
[mysqld]server-id = 143;#[必须]服务器唯一ID,默认是1,一般取IP最后一段login_bin = mysql-bin;#[必须]启用二进制日志#如有其他需求还可以添加,例如忽略哪些数据库不进行同步等。
1.1.4 重启主库,并检查主库中的运行状态:
mysql> show master status;#记录结果中的两个重要信息:#file:mysql-bin.000024#position:102791
1.1.5 启动slave后运行如下命令:
mysql> CHANGE MASTER TO MASTER_HOST = '172.21.44.144', mysql> MASTER_USER = 'slave', MASTER_PASSWORD = '123456',mysql> MASTER_LOG_FILE = 'mysql-bin.000024', mysql> MASTER_LOG_POS = 102791; # MASTER_LOG_FILE 和 MASTER_LOG_POS 的值是从show master status;中获取到的;
1.1.6 查看(从库Slave)是否成功连接并运行:
mysql> show slave status; #或者如下命令:mysql> show slave status \G;##注意:当你看到#Slave_IO_Running: Yes#Slave_SQL_Running: Yes#则表示你当前的配置成功,并且数据库备份正常。此时你可以尝试在主库中进行增删改的操作,在从库验证操作是否同步进行。
1.2、异常信息解决方案:
当然我们说,配置总是有许许多多的大坑在等着你,所以这里笔者总结了一些配置过程中查找异常和解决异常的方法。
首先我们要明白并且会使用系统给我们做的一些异常记录。那就是windows的“事件查看器”,控制面板->系统和安全->管理工具->查看事件日志。利用这个工具我们就可方便的查看配置过程中的错误与异常,当然也可以通过mysql自带的错误日志。
1.2.1 主从不能同步,Slave_SQL_Running: NO
mysql> show slave status; #或者如下命令:mysql> show slave status \G;##注意:当你看到#Slave_IO_Running: Yes#Slave_SQL_Running: NO#可能存在的问题有在从库(Slave)上进行了写入操作,导致mysql停止了线程,此时需要查看事件查看器中的报错信息,我遇到的问题是表不存在,此时你可以通过具体的报错信息添加相应的数据库或者表(空表即可)。
1.2.2 日志查看报错信息为1062,本人未遇到,但是之前有师兄遇到了,我在这里也总结一下解决方案:
在同步时候,有时候会发现经常 1062 的错误,可以在配置的时候,添加配 置项 skip-error 项。如果修改了连接主库相关信息,重启之前一定要删除 master.info 文件,否则重启之后由于连接信息改变从库而不会自动连接主库,造 成同步失败。此文件是保存连接主库信息的。
2、优化建议
本次只是记录了一些配置的简单过程,在项目过程中为了避免熊孩子程序猿在数据操作的过程中误操作,例如在从库进行了插入操作,那么整个项目此时就会有比较大的威胁,为了避免这样的事情发生,通常都会给主从库配置不同的读写权限,主库能读能写,从库只能读取,这样就避免了熊孩子程序猿的误操作。具体的配置方式请搜索相关的配置博客,笔者在后续有空的时候也会添加自己的配置方案。
写在最后:
配置过程中还是需要学会查阅异常信息,学会主动解决问题,一次不行就多次尝试,直到把问题解决。关于mysql的配置有很多的种类方式,也希望大家能找到适合自己项目的配置方案,对于本文中的不妥之处还请大家多多指正,共同进步。
- MySql 5.7 主从库配置方案(Master/Slave)
- mysql 主从配置(master/slave)
- MySQL数据库主从(Master/Slave)同步安装与配置
- linux配置mysql主从--master and slave
- MySql 5.7.18 数据库主从(Master/Slave)同步安装与配置详解
- MySQL 5.7 master slave 主从 复制
- MySQL主从(Master-Slave)复制
- mysql主从复制(master/slave)
- MySQL主从复制(Master-Slave)
- mysql主从复制(master-slave)实录
- redis 配置主从(master-slave)服务器
- MySQL-(Master-Slave)配置
- 主从配置master宕机slave库切换为master配置
- [MYSQL] LINUX下配置mysql双机备份 master/slave主从
- mysql master slave 主从安装
- mysql 主从复制(master-slave)
- MYSQL:master/slave主从复制
- mysql主从复制(Master-Slave)
- plsql中文乱码,显示问号
- notepad matlab 语法高亮
- 针对Elasticsearch的开源分析及可视化平台——Kibana
- 《大数据原理与实践》第2次公开课:Concept
- 优质验证码短信接口平台推荐
- MySql 5.7 主从库配置方案(Master/Slave)
- std::string VS string 和 error:'string' does not name a type
- MyEclipse注解模板
- 一键免费部署看板管理应用——Wekan
- NBU for Linux完全卸载
- 从0开始学习 GITHUB 系列之「初识 GITHUB」
- UVA-3516 Exploring Pyramids (DP)
- Sublime Text 2 文档内容每行首尾添加字符串
- USACO 2.1 Hamming Codes