MySQL5.6主从复制(读写分离)方案

 

MySQL5.6主从复制(读写分离)方案

https://yq.aliyun.com/articles/24255

 

摘要: 一、前言:为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。 为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载。

一、前言:为什么MySQL要做主从复制(读写分离)?

通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。

为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载。

而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。

二、MySQL主从复制(读写分离)和集群的区别:

我对MySQL也是刚开始研究,不是很专业。我的理解是:

1、主从复制(读写分离):一般需要两台及以上数据库服务器即可(一台用于写入数据,一台用于同步主的数据并用于数据查询操作)。

局限性:

(1)配置好主从复制之后,同一张表,只能对一个服务器写操作。如果在从上执行了写操作,而之后主也操作了这张表,或导致主从不同步;据说可以配置成主主方式,但我还没有研究到。

(2)主数据库服务器宕机,需要手动将业务系统切换到从数据库服务器。无法做到高可用性(除非再通过部署keepalive做成高可用方案)。

2、集群是由N台数据库服务器组成,数据的写入和查询是随机到任意一台数据库服务器的,其他数据库服务器会自动同步数据库的操作。

任何一台数据库宕机,不会对整个集群造成大的影响。

局限性:我经过测试才知道目前mysql集群版本(MySQL Cluster)只能对NDB存储引擎的数据进行集群同步,如果是INNODB或其他的MySQL存储引擎是不行的。这个也导致了我放弃了在业务系统中应用这种方案。

三、回归正题,接下来开始MySQL5.6.12的主从复制教程:

1、MySQL5.6开始主从复制有两种方式:基于日志(binlog);基于GTID(全局事务标示符)。

需要注意的是:GTID方式不支持临时表!所以如果你的业务系统要用到临时表的话就不要考虑这种方式了,至少目前最新版本MySQL5.6.12的GTID复制还是不支持临时表的。

所以此篇教程主要是告诉大家如何通过日志(binlog)方式做主从复制!

2、MySQL官方提供的MySQL Replication教程:

http://dev.mysql.com/doc/refman/5.6/en/replication.html

这个官方教程强烈建议大家阅读(需要一定的英语阅读能力哦!不行就google翻译后再阅读吧~)。

3、准备工作:

(1)配置MySQL主从复制(读写分离)之前,需要在主从两台服务器先安装好MySQL5.6。

(2)目前最新的MySQL5.6 GA版本是MySQL5.6.12(点此下载MySQL5.6.12源码包)。

个人推荐Linux(RedHat/CentOS 6.4)源码编译安装,具体可以看本站这篇教程:RedHat/CentOS源码编译安装MySQL5.6.12

(3)注意:

(a)如果你需要用于生产环境,安教程安装MySQL时不要急着做mysql启动操作。建议把mysql初始化生成的/usr/local/mysql/mysql.cnf删除,然后把你优化好的mysql配置文件my.cnf放到/etc下。

(b)建议主备两台服务器在同一局域网,主备两台数据库网络需要互通。

(4)我的环境:

主数据库IP:192.168.100.2

从数据库IP:192.168.100.3

4、修改主数据库的的配置文件:

1     [mysqld] 
2     server-id=1 
3     log-bin=mysqlmaster-bin.log 
4     sync_binlog=1 
5     #注意:下面这个参数需要修改为服务器内存的70%左右 
6     innodb_buffer_pool_size = 512M 
7     innodb_flush_log_at_trx_commit=1 
8     sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO 
9     lower_case_table_names=1 
10     log_bin_trust_function_creators=1

修改之后要重启mysql:

# /etc/init.d/mysql restart

附一个我已优化过的主数据库配置文件:点此下载

5、修改从数据库的的配置文件(server-id配置为大于1的数字即可):

1     [mysqld] 
2     server-id=2 
3     log-bin=mysqlslave-bin.log 
4     sync_binlog=1 
5     #注意:下面这个参数需要修改为服务器内存的70%左右 
6     innodb_buffer_pool_size = 512M 
7     innodb_flush_log_at_trx_commit=1 
8     sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO 
9     lower_case_table_names=1 
10     log_bin_trust_function_creators=1

修改之后要重启mysql:

 # /etc/init.d/mysql restart

附一个我已优化过的从数据库配置文件:点此下载

6、SSH登录到主数据库:

(1)在主数据库上创建用于主从复制的账户(192.168.100.3换成你的从数据库IP):

1     # mysql -uroot -p 
2     mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.100.3' IDENTIFIED BY 'repl';

(2)主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标):

mysql> FLUSH TABLES WITH READ LOCK;

(3)然后克隆一个SSH会话窗口,在这个窗口打开MySQL命令行:

1     # mysql -uroot -p 
2     mysql> SHOW MASTER STATUS; 
3     +------------------------+----------+--------------+------------------+-------------------+ 
4     | File                   | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | 
5     +------------------------+----------+--------------+------------------+-------------------+ 
6     | mysqlmaster-bin.000001 |      332 |              |                  |                   | 
7     +------------------------+----------+--------------+------------------+-------------------+ 
8     1 row in set (0.00 sec) 
9     mysql> exit;

在这个例子中,二进制日志文件是mysqlmaster-bin.000001,位置是332,记录下这两个值,稍后要用到。

(4)在主数据库上使用mysqldump命令创建一个数据快照:

#mysqldump -uroot -p -h127.0.0.1 -P3306 --all-databases  --triggers --routines --events >all.sql 
# 接下来会提示你输入mysql数据库的root密码,输入完成后,如果当前数据库不大,很快就能导出完成。

(5)解锁第(2)步主数据的锁表操作:

mysql> UNLOCK TABLES;

7、SSH登录到从数据库:

(1)通过FTP、SFTP或其他方式,将上一步备份的主数据库快照all.sql上传到从数据库某个路径,例如我放在了/home/yimiju/目录下;

(2)从导入主的快照:

# cd /home/yimiju 
# mysql -uroot -p -h127.0.0.1 -P3306 < all.sql 
# 接下来会提示你输入mysql数据库的root密码,输入完成后,如果当前数据库不大,很快就能导入完成。

(3)给从数据库设置复制的主数据库信息(注意修改MASTER_LOG_FILE和MASTER_LOG_POS的值):

# mysql -uroot -p 
mysql> CHANGE MASTER TO MASTER_HOST='192.168.100.2',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysqlmaster-bin.000001',MASTER_LOG_POS=332; 
# 然后启动从数据库的复制线程: 
mysql> START slave; 
# 接着查询数据库的slave状态: 
mysql>  SHOW slave STATUS \G 
# 如果下面两个参数都是Yes,则说明主从配置成功! 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes

(4)接下来你可以在主数据库上创建数据库、表、插入数据,然后看从数据库是否同步了这些操作

版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

转载于:https://www.cnblogs.com/handsome1013/p/7570061.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 内置模块之 os

os.walk os.walk() 方法是一个简单易用的文件、目录遍历器&#xff0c;可以帮助我们高效的处理文件、目录方面的事情。简单来说&#xff0c;就是挨个遍历指定路径下的目录&#xff08;文件夹&#xff09;和文件。用于通过在目录树中游走输出在目录中的目录名&#xff0c;文件名…

[arm驱动]linux内核时钟

《[arm驱动]linux内核时钟》涉及内核驱动函数四个&#xff0c;内核结构体一个&#xff0c;分析了内核驱动函数一个&#xff1b;可参考的相关应用程序模板或内核驱动模板一个&#xff0c;可参考的相关应用程序模板或内核驱动一个 一、内核定时器 意义:内核定时器是软件意义上…

企业网站 源码 服务邮箱:_公司企业邮箱购买,外贸企业邮箱用哪家服务好?

企业日常办公&#xff0c;经常会用到各种办公软件&#xff0c;而企业邮箱便是最常用的产品。公司在购买企业邮箱时需要考虑哪些方面&#xff0c;尤其是对于外贸行业的企业邮箱&#xff0c;应该如何选择呢&#xff1f;1. 安全保障公司企业邮箱购买时&#xff0c;首先要关注的就是…

微软公司等数据结构+算法面试100题2010版全部出炉

微软等公司数据结构算法面试100题2010版首次完整亮相 作者:July、2010年12月6日。 更新&#xff1a;现今&#xff0c;这100题的答案已经全部整理出来了&#xff0c;微软面试100题2010年版全部答案集锦&#xff1a;http://blog.csdn.net/v_july_v/arti…

android横竖屏切换布局闪退,Android-Activity横竖屏切换不杀死Activity 并监听横竖屏切换...

在上一篇博客&#xff0c;Android-Activity临时数据的保存&#xff0c;中讲解到&#xff0c;当发生横竖屏切换的时候&#xff0c;系统会杀死Activity并重新启动Activity系统会杀死Activity12-12 08:11:50.441 3347-3347/liudeli.activity D/TempDataActivity: onPause12-12 08:…

基于web的新闻发布系统_终极Linux系统ExTiX 19.8发布,基于深度操作系统deepin15.11...

近日&#xff0c;GNU/Linux开发人员Arne Exton发布了他的ExTiX 终极Linux系统的新版本&#xff0c;带有全新的底层和更新的组件。ExTiX Deepin 19.8基于Deepin Linux操作系统&#xff0c;更具体地说&#xff0c;ExTiX Deepin 19.8基于最新的Deepin 15.11版本&#xff0c;它增加…

Python 之内置函数和匿名函数

内置函数 截止到python3.6.2&#xff0c;python一共为我们提供了68个内置函数。它们就是python提供可以直接拿来使用的所有函数 Built-in Functions abs()dict()help()min()setattr()all()dir()hex()next()slice()any()divmod()id()object()sorted()ascii()enumerate()input(…

个人作业1

Deadline&#xff1a; 2017-9-30 10:00PM&#xff0c;以博客发表日期为准。 评分基准: 按时交 - 有分&#xff08;满分10分&#xff09;&#xff0c;检查的项目包括后文的三个方面 按题目要求完成个人博客注册、码云账号注册&#xff08;1分&#xff09;完成阅读作业和提问&…

“西邮漫记”--自由照耀中国

"西邮漫记"&#xff0d;&#xff0d;自由照耀中国九月初在北京linuxWorld大会上我遇见了久违的陈莉君教授&#xff0c;陈教授是西安邮电学院计算机系教授Linux内核的老师&#xff0c;上次相识是在广州参加广东Linux推进中心举办的“Linux文化节”&#xff0c;当时陈教…

numpy 是否为零_如果不懂 numpy,请别说自己是 python 程序员

(给Python开发者加星标&#xff0c;提升Python技能)作者&#xff1a;牧马人 (本文来自作者投稿)0. 前言大约七八年前&#xff0c;我曾经用 pyOpenGL 画过地球磁层顶的三维模型&#xff0c;这段代码至今仍然还运行在某科研机构里。在那之前&#xff0c;我一直觉得自己是一个合(y…

Python 第三方模块之 ElementTree(ET)- 解析XML文件

ElementTree是Python常用的处理XML文件的类。下面将介绍使用ElementTree解析、查找、修改XML的方法。 1、引用方法 import xml.etree.ElementTree as ET 2、一个XML例子 下面所有的操作都将下面这段XML为例&#xff0c;我们将它保存为sample.xml。 <?xml version"…

android 编译luajit,Android 嵌入 LuaJIT 的曲折道路

相关链接&#xff1a;Windows 下编译 LuaJIT懒人与伸手党可以直接看最底部。为什么使用 LuaJITLua 官方版的编译嵌入相对简单&#xff0c;但是为什么要用 LuaJIT 呢&#xff1f;我所了解到的优势有&#xff1a;更高的运行效率。支持运行 Lua 编译后的机器码。虽然 Lua 也支持编…

运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(一)

前言 记得刚来这家公司的时候&#xff0c;我部门就我一个运维工程师&#xff0c;然后就是经理&#xff0c;刚开始公司平台什么监控都没有&#xff0c;在我与经理的努力下&#xff0c;先搭建nagioscacti监控平台&#xff0c;后来随着公司业务的增加&#xff0c;平台的功能与服务…

面试风云录(01) - 怎样回答这两个问题?

由于工作经历的缘故&#xff0c;使我有一些面试别人的机会&#xff0c;所以应该还有一些经验可以跟大家聊聊。 当我们提到“面试” 这个词&#xff0c;总是让人有种阶级感&#xff0c;好像面试官就是高高在上&#xff0c;而面试者则是屈居于下&#xff0c;其实并非如此&#xf…

Redis Python

Python操作Redis 安装Python使用Redis的库 sudo pip install redis or sudo easy_install redis or 源码安装 详见&#xff1a;https://github.com/WoLpH/redis-py 1.1 操作模式 redis-py提供两个类Redis和StrictRedis用于实现Redis的命令&#xff0c;StrictRedis用于实现大…

android 代码写命令,monkey基本命令及脚本编写(示例代码)

Monkey 是Android自带的黑盒测试工具&#xff0c;一般通过随机触发界面事件&#xff0c;来确定应用是否会发生异常&#xff0c;多用于android应用的稳定性、压力测试基本命令&#xff1a;adb shell monkey [options] usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] .…

js更新数组对象_7 种Vue 数据已更新而页面没有更新的情况及深化总结(收藏)

作者&#xff1a;前端1943链接&#xff1a;https://segmentfault.com/a/1190000022772025如果你发现你自己需要在 Vue 中做一次强制更新&#xff0c;99.9% 的情况&#xff0c;是你在某个地方做错了事。1. Vue 无法检测实例被创建时不存在于 data 中的 property原因&#xff1a;…

从P560小型机B181201B故障代码识别手把手详解

背景&#xff1a;生产小型机发生宕机事件&#xff0c;现场发现液晶面板存在B181201B代码&#xff0c;可是查看网络&#xff0c;未见有权威的参考文章&#xff0c;通过管理口登录HMC管理界面&#xff0c;发现错误代码B181201B&#xff0c;同时提示可能是电源故障&#xff0c;后登…

Java反射中method.isBridge() 桥接方法

桥接方法是 JDK 1.5 引入泛型后&#xff0c;为了使Java的泛型方法生成的字节码和 1.5 版本前的字节码相兼容&#xff0c;由编译器自动生成的方法。我们可以通过Method.isBridge()方法来判断一个方法是否是桥接方法。 假定接口 public interface SuperClass<T> {void met…

python 利用pexpect进行多机远程命令执行

在安装之前&#xff0c;确认你的机器安装了python,和easy_install.通常python是自动安装的&#xff0c;如果没有安装easy_install&#xff0c;那么wget -q http://peak.telecommunity.com/dist/ez_setup.py 获取一下python ez_setup.pypexpect是python一个模块&#xff0c;可以…