环境说明

主从复制使用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实现主从复制与读写分离相关推荐

  1. MySQL的主从复制与读写分离技术实例(一)主从复制

    系统版本:CentOS 6.5   MySQL版本:mysql-5.5.38 生产环境下,如果对同一个数据库服务器即做写服务又做读服务,无论是从安全性.高可用性还是高并发等各个角度都不能满足实际需求, ...

  2. 【MySql】mysql之主从复制和读写分离搭建

    [MySql]mysql之主从复制和读写分离搭建 文章目录 [MySql]mysql之主从复制和读写分离搭建 1主从复制 1.1MySql支持从复制类型 1.2主从复制的原理 1.3主从复制的工作过程 ...

  3. MySQL数据库主从复制与读写分离(图文详解!)

    目录 前言 一:MySQL数据库主从复制与读写分离 1.什么是读写分离? 2.为什么要读写分离呢? 3.什么时候要读写分离? 4.主从复制与读写分离 5.mysql支持的复制类型 (1)STATEME ...

  4. MySQL的主从复制、读写分离(amoeba)

    目录 一.MySQL主从复制 1.1 MySQL复制的类型 1.2 工作原理 1.3 mysql的四种同步的方式 二.MySQL的读写分离 2.1 什么是读写分离 2.2 读写分离的好处 2.3 常见 ...

  5. MySQL(9)主从复制与读写分离

    文章目录 一.MySQL主从复制与读写分离 1.1 主从分离和读写分离的相关概述 1)主从复制与读写分离. 2)为什么要读写分离 3)什么时候要读写分离 4)读写分离的原理 5)mysql支持的复制类 ...

  6. centos mysql无法启动 sock_【零基础学云计算】MYSQL的主从复制、读写分离

    MySQL主从复制的类型 基于语句的复制(默认) 在主服务器上执行的语句,从服务器执行同样的语句 基于行的复制 把改变的内容复制到从服务器 混合类型的复制 一旦发现基于语句无法精确复制时,就会采用基于 ...

  7. Django项目配置mysql主从数据库实现读写分离

    1.在配置文件中添加slave数据库的配置 DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',   ...

  8. atlas mysql 数据库同步_atlas+mysql实现主从复制和读写分离(二)

    1. 安装必要的依赖包yum install pkg-config libevent* glib lua 2. 升级安装autoconf,编译安装automake需要wget ftp://ftp.gn ...

  9. MySQL主从复制与读写分离配置及实操

    MySQL主从复制与读写分离 一.MySQL主从复制 1.复制类型 2.工作过程 二.MySQL读写分离 1.定义 2.存在意义 3.作用时间 4.原理 5.类型 基于程序代码内部实现 基于中间代理层 ...

最新文章

  1. android 返回字符串,android – 如何从异步回调使用Retrofit返回String或JSONObject?
  2. python时间序列指数平滑预测_时间序列分析预测实战之指数平滑法
  3. 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录
  4. STL_vector
  5. oracle数据库字符编码utf-8改为ZHS16GBK
  6. 5 html 根据手机转动而转动_最全的全景照片拍摄方法合集,手机也能拍哦
  7. 小米员工爆料:Redmi K30 Pro自动亮度调节做得很好
  8. 数据库 : 事物以及隔离性导致的问题
  9. 『TensorFlow』读书笔记_TFRecord学习
  10. Linux 2.4.x 网络协议栈QoS模块(TC)的设计与实现
  11. 物联网应用技术和计算机应用技术,物联网应用技术专业介绍
  12. 数据结构--创建并输出二叉树的c语言实现(超详细注释/实验报告)
  13. 三十四、Zabbix-触发器、动作及邮件报警
  14. 现有的人脸数据库介绍及下载链接
  15. 统计学习模型——决策树
  16. OneNav简约PHP导航书签源码
  17. 汇编语言贪吃蛇、俄罗斯方块双任务设计实现详解(三)——俄罗斯方块详细设计
  18. SQL Server 2012 离线安装包
  19. 大牛公司机构近期研究报告大合集
  20. Ubuntu16.04配置pytorch环境(CPU版)

热门文章

  1. 《Python编程:从入门到实践》速查表
  2. Apollo进阶课程⑲丨Apollo感知之旅——感知算法
  3. pandownload用户未登录_Pandownload再度复活,下载速度飙升到10MB/s以上
  4. morse java_华威MORSE,华威数统那个比较好?
  5. Maven之自定义pom类型的基础项目
  6. JavaMelody开源系统性能监控软件:
  7. jsp,div 限制字数,超出部分用省略号代替
  8. C++(STL):35---multimap容器
  9. php生成有复杂结构的excel文档
  10. Error when loading the SDK:解决方案