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

一、前言:为什么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

# 接下来会提示你输入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)接下来你可以在主数据库上创建数据库、表、插入数据,然后看从数据库是否同步了这些操作

mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案相关推荐

  1. mysql读写分离的含义_mysql的读写分离问题剖析

    如何实现mysql的读写分离? ​ 就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去. MySQL主从复制原理的是啥? ​ 主库 ...

  2. mysql 5.7 主从切换_mysql5.7 主从复制的正常切换【转】

    目前环境如下: master server IP:172.17.61.131 slave server IP:172.17.61.132 mysql version: mysql-5.7.21-lin ...

  3. ShardingSphere(七) 读写分离配置,实现分库读写操作

    概述:本章通过介绍使用ShardingSphere实现数据库的读写分离操作.在实现读写分离之前,数据库的主从同步需要提前配置完成,主从同步实现不由Sharding提供.主从同步可参考上一章节<S ...

  4. 什么是mysql的读写分离_什么是数据库读写分离?

    原文:https://baijiahao.baidu.com/s?id=1614304400276051465&wfr=spider&for=pc 想用数据库"读写分离&qu ...

  5. mysql高可用方案_MySQL高可用集群方案

    一.Mysql高可用解决方案 方案一:共享存储 一般共享存储采用比较多的是 SAN/NAS 方案. 方案二:操作系统实时数据块复制 这个方案的典型场景是 DRBD,DRBD架构(MySQL+DRBD+ ...

  6. 方案 mysql 优点_mysql高可用方案分析

    低读低写并发.低数据量方案 方案一:双机高可用方案 1.数据库架构图 2.特点 一台机器A作为读写库,另一台B作为备份库:A库故障后B库作为读写库:A库恢复后A作为备库. 3.开发说明 此种情况下,数 ...

  7. java做的web系统 m1 读卡器 结合_IE浏览器接入IC卡读写器实现M1卡的读写功能

    基于ActiveX技术的ocx控件是实现网页上读写 IC卡的一个比较不错的方法,因为ocx是com组件,通过其发布的接口,IE可以实现所有的功能.ActiveX不仅能适应大部分编程语言,做到与编程语言 ...

  8. /* * 编程题第四题(20分): 用1元5角钱人名币兑换5分、2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案。 */

    题目: /* 编程题第四题(20分): 用1元5角钱人名币兑换5分.2分和1分的硬币(每一种都要有)共一百枚,问共有几种兑换方案?并输出每种方案. */ 我使用java做的 public class ...

  9. python不同数据的读入_python读写不同编码txt文件_python读写txt文件

    python读写不同编码txt文件_python读写txt文件 以后整理规范 [python] view plaincopy import os import codecs filenames=os. ...

最新文章

  1. c++ 调用python2类获取返回值
  2. python语言程序设计2019版第二章课后答案-python语言程序设计基础(嵩天)第二章课后习题...
  3. Win7系统下hosts文件修改后无法保存
  4. 用Go语言建立一个简单的区块链part2:Pow共识
  5. 十大经典排序算法(下)
  6. ES6学习--Javascript中的那三个点(...)
  7. 前端学习之路之CSS (三)
  8. 机器学习实战(十三)推荐系统(协同过滤 Collaborative Filtering)
  9. 从OA、ERP到大数据中心,一个完整的数据分析体系原来是这样
  10. linux内核调用串口,linux驱动之串口驱动框架
  11. Ubuntu修改/home下各目录为英文
  12. linux生成4g文件,linux中创建超过4g文件的方法-o_largefile?
  13. 设置Windows Server登录时禁止自动启动服务器管理器
  14. 易周金融 | 邮惠万家银行开业;微信公众号叫停四类金融营销宣传
  15. Python 组织机构代码证校验
  16. 2020-07-24
  17. Vs —— 转移Qt项目后环境问题
  18. 红帽Redhat—Linux软件管理
  19. [bzoj1502]月下柠檬树
  20. 使用Androidpn实现Android消息推送

热门文章

  1. 新手上路之django项目开发(一)-----创建项目并运行
  2. linux修改su的PAM配置文件,linux pam安全认证模块su命令的安全隐患
  3. mysql数据库日志截断,MySQL基础(十一):查询截取分析
  4. 600W个微信红包封面,人人都能领取到!!!
  5. 王凯1987计算机系,计算机科学与技术系王凯:付出总有回报
  6. 100*100的 canvas 占多少内存?
  7. 简单却实用的的例子:Jquery获取 radio 选中后的文字
  8. ReactNative开发环境
  9. SSH中一些典型的问题
  10. (转)rvm安装与常用命令