配置Mysql实现主从复制与读写分离
环境说明
主从复制使用mysql自带的master与slave机制;读写分离使用mysql-proxy实现!
有服务器三台:s1,s2,s3。
s1为web服务器,装有httpd,php,mysql,mysql-proxy。
s2为主数据库服务器(Master),仅装mysql。
s3为从数据库服务器(Salve),仅装mysql。
实现目标
s1上的网站的数据库读写操作分摊到s2和s3上,即s2专门进行写操作(也可以读),s3专门进行读操作;
s2上的数据库中有数据更新时,自动将变化同步到s3上的数据库中。
配置主从复制(涉及的服务器:s2,s3)
1.首先在主数据库服务器(master)s2上进行配置
#编辑mysql配置文件 vim /etc/my.cnf#整体内容如下: [client] default_character_set=utf8[mysqld] default_character_set=utf8 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0server-id=1 #重要,需和副数据库的id区分开,主为1,副为2 log-bin=mysql-bin #定义二进制log文件,从数据库将通过读取二进制log文件来更新 binlog-ignore-db=mysql #定义忽略的数据库,即不需要同步的数据库 binlog-do-db=testdb #定义需要同步的数据库,如果没有此,将同步所有数据库(除了上面ignore的数据库)[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
2.在主数据库服务器(master)s2上的mysql中创建一个供副数据库(slave)s3连接的账号
#在主数据库服务器上进入mysql命令行 mysql -u root -p (输入密码)#成功进入mysql命令行,新建一个用户 mysql>grant replication slave on *.* to '用户名'@'副数据库的IP地址' identified by '密码';#查看创建用户是否成功 mysql>select user,host from mysql.user;
3.重启主数据库服务器上的mysql服务
service mysqld restart
4.记录主数据库服务器的master状态,在配置从服务器时需要使用到
#同样进入mysql命令行 mysql>show master status;
类似于此内容:
记下Flie和Position。需要注意的是这两个值在mysql重启后变化。所以在第一次配置从服务器时,需要注意了!
主数据库的配置完成,现在开始从数据库服务器。
5.配置从数据库服务器上的my.cnf文件
vim /etc/my.cnf#整体内容如: [client] default_character_set=utf8[mysqld] default_character_set=utf8 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0server-id=2 #重要,与主数据上id不一样[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
6.重启从数据库服务器的mysqld
service mysqld restart
7.进入mysql命令行,执行change master to命令
#进入mysql mysql -u root -p (输入密码)#进入mysql后,先停止slave mysql>slave stop; mysql>change master to>master_host='主数据库的ip地址或者hostname',>master_user='主数据库中允许从数据库连接它的用户名',>master_password='这里是密码',>master_log_file='mysql-bin.000004',>master_log_pos=261;#master_log_file,master_log_pos即上面使用show master status看到的信息 mysql>slave start;#查看slave状态 mysql>show slave status\G;
在看到的slave状态中,关键信息为:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果这两项都为Yes,说明主从之间复制ok了。
贴上我的slave status:
mysql> show slave status\G; *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: s2Master_User: userssMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000004Read_Master_Log_Pos: 2308873Relay_Log_File: mysqld-relay-bin.000288Relay_Log_Pos: 251Relay_Master_Log_File: mysql-bin.000004Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 2308873Relay_Log_Space: 5650Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: 1 row in set (0.00 sec)
最后,可以测试下,在主数据库中创建一个数据库,创建一张表,插入点数据,然后在从数据库中看时候有数据!
配置读写分离(涉及的服务器s1,s2,s3)
1.首先我们想要在web服务器上安装mysql-proxy,并配置好它,mysql-proxy官网下载
#进入mysqlproxy的目录 cd /opt/mysql-proxy
#创建mysqlproxy.cnf文件 vim mysqlproxy.cnf
#整体内容如下 [mysql-proxy] user=mysql daemon=true keepalive=true log-level=message log-file=/opt/mysql-proxy/mysqlproxy.log pid-file=/opt/mysql-proxy/mysqlproxy.pid proxy-backend-addresses=主数据库服务器IP:端口(默认3306) proxy-read-only-backend-addresses=从数据库服务器IP:端口(默认3306)
#编辑环境变量文件 vim /etc/profile
#在最后加入下列两行内容(路径自行修改) PATH=/opt/mysql-proxy/bin:/opt/mysql-proxy/share/doc/mysql-proxy:$PATH export PATH
#可以创建一个简单的脚本,以便于开机启动 vim mysqlproxy
#内容如下: #!/bin/bash mysql-proxy --defaults-file=/opt/mysql-proxy/mysqlproxy.cnf
#创建好后,把mysqlproxy文件复制到/opt/mysql-proxy/bin目录下#在开机启动项中,可以加入mysqlproxy vim etc/rc.d/rc.local
#加入: mysqlproxy#确认mysqlproxy文件是否具有可执行权限
#最后修改rw-splitting.lua文件 vim /opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
#修改这两个值 min_idle_connections = 1, //默认为4 max_idle_connections = 1, //默认为8
2.在主数据库服务器上进入mysql命令行,创建一个用户
mysql -u root -p#进入mysql后 mysql>grant all on *.* to '用户名'@'web服务器地址' identified by '密码';
此时由于主数据库和从数据库是主从复制,从数据库上应该已经有了上面新建的用户了。
如果还没配置主从复制,在从服务器上执行下grant就好。
重要配置已经完成了,最后就要确定下防火墙(iptables)了。
web服务器的mysql-proxy默认端口为4040,主从两个数据库3306端口。
测试读写分离
在web服务器上通过mysql连接4040端口:
#用户名为上面第二步中新建的用户,hostname为其对应的hostname(即web服务器地址) mysql -u 用户名 -p -P 4040 -h hostname
输入密码后,通过web服务器就能连接到s2,所做的变更将直接在s2上生效,而s3将通过主从复制,实现同步!
注:web服务器的mysql的3306端口,不参与读写分离主从复制!web服务器上的网站程序数据库只需要连接4040端口即可!
转载于:https://www.cnblogs.com/keheng/articles/3721107.html
配置Mysql实现主从复制与读写分离相关推荐
- MySQL的主从复制与读写分离技术实例(一)主从复制
系统版本:CentOS 6.5 MySQL版本:mysql-5.5.38 生产环境下,如果对同一个数据库服务器即做写服务又做读服务,无论是从安全性.高可用性还是高并发等各个角度都不能满足实际需求, ...
- 【MySql】mysql之主从复制和读写分离搭建
[MySql]mysql之主从复制和读写分离搭建 文章目录 [MySql]mysql之主从复制和读写分离搭建 1主从复制 1.1MySql支持从复制类型 1.2主从复制的原理 1.3主从复制的工作过程 ...
- MySQL数据库主从复制与读写分离(图文详解!)
目录 前言 一:MySQL数据库主从复制与读写分离 1.什么是读写分离? 2.为什么要读写分离呢? 3.什么时候要读写分离? 4.主从复制与读写分离 5.mysql支持的复制类型 (1)STATEME ...
- MySQL的主从复制、读写分离(amoeba)
目录 一.MySQL主从复制 1.1 MySQL复制的类型 1.2 工作原理 1.3 mysql的四种同步的方式 二.MySQL的读写分离 2.1 什么是读写分离 2.2 读写分离的好处 2.3 常见 ...
- MySQL(9)主从复制与读写分离
文章目录 一.MySQL主从复制与读写分离 1.1 主从分离和读写分离的相关概述 1)主从复制与读写分离. 2)为什么要读写分离 3)什么时候要读写分离 4)读写分离的原理 5)mysql支持的复制类 ...
- centos mysql无法启动 sock_【零基础学云计算】MYSQL的主从复制、读写分离
MySQL主从复制的类型 基于语句的复制(默认) 在主服务器上执行的语句,从服务器执行同样的语句 基于行的复制 把改变的内容复制到从服务器 混合类型的复制 一旦发现基于语句无法精确复制时,就会采用基于 ...
- Django项目配置mysql主从数据库实现读写分离
1.在配置文件中添加slave数据库的配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', ...
- atlas mysql 数据库同步_atlas+mysql实现主从复制和读写分离(二)
1. 安装必要的依赖包yum install pkg-config libevent* glib lua 2. 升级安装autoconf,编译安装automake需要wget ftp://ftp.gn ...
- MySQL主从复制与读写分离配置及实操
MySQL主从复制与读写分离 一.MySQL主从复制 1.复制类型 2.工作过程 二.MySQL读写分离 1.定义 2.存在意义 3.作用时间 4.原理 5.类型 基于程序代码内部实现 基于中间代理层 ...
最新文章
- android 返回字符串,android – 如何从异步回调使用Retrofit返回String或JSONObject?
- python时间序列指数平滑预测_时间序列分析预测实战之指数平滑法
- 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录
- STL_vector
- oracle数据库字符编码utf-8改为ZHS16GBK
- 5 html 根据手机转动而转动_最全的全景照片拍摄方法合集,手机也能拍哦
- 小米员工爆料:Redmi K30 Pro自动亮度调节做得很好
- 数据库 : 事物以及隔离性导致的问题
- 『TensorFlow』读书笔记_TFRecord学习
- Linux 2.4.x 网络协议栈QoS模块(TC)的设计与实现
- 物联网应用技术和计算机应用技术,物联网应用技术专业介绍
- 数据结构--创建并输出二叉树的c语言实现(超详细注释/实验报告)
- 三十四、Zabbix-触发器、动作及邮件报警
- 现有的人脸数据库介绍及下载链接
- 统计学习模型——决策树
- OneNav简约PHP导航书签源码
- 汇编语言贪吃蛇、俄罗斯方块双任务设计实现详解(三)——俄罗斯方块详细设计
- SQL Server 2012 离线安装包
- 大牛公司机构近期研究报告大合集
- Ubuntu16.04配置pytorch环境(CPU版)
热门文章
- 《Python编程:从入门到实践》速查表
- Apollo进阶课程⑲丨Apollo感知之旅——感知算法
- pandownload用户未登录_Pandownload再度复活,下载速度飙升到10MB/s以上
- morse java_华威MORSE,华威数统那个比较好?
- Maven之自定义pom类型的基础项目
- JavaMelody开源系统性能监控软件:
- jsp,div 限制字数,超出部分用省略号代替
- C++(STL):35---multimap容器
- php生成有复杂结构的excel文档
- Error when loading the SDK:解决方案