环境要求:1.主从服务器操作系统版本和位数一致。

2.Mysql版本一致。TIPS:为了保证稳定性,最好是服务器操作系统和Mysql数据库环境一致。

服务器配置角色IPMaster192.168.1.45

Slave192.168.1.46

Proxy192.168.1.47

配置1

2

3

4

5

6

7

8

9

10

11

12vim /etc/my.cnf

#主从复制配置

innodb_flush_log_at_trx_commit=2

sync_binlog=500

#需要备份的数据库

binlog-do-db=my_test

#不需要备份的数据库

binlog-ignore-db=mysql

#启动二进制文件

log-bin=mysql-bin

#服务器ID

server-id=1

TIPS:若没有配置binlog-do-db和binlog_ignore_db,表示备份全部数据库。

重启 Mysql 服务1systemctl restart mariadb.service

为从 Mysql 创建用户1

2mysql -u root -p

mysql> create user 'mastj'@'192.168.1.46' identified by '123456';

分配主从复制权限1mysql> grant replication slave on *.* to 'mastj'@'192.168.1.46' identified by '123456';

查看 Master 状态1mysql> show master status;

Slave(192.168.1.46)服务器

配置1

2

3vim /etc/my.cnf

#服务器ID

server-id=2

重启 Mysql 服务1systemctl restart mariadb.service

Master 配置1

2

3

4

5

6

7

8$ mysql -u root -p

mysql> change master to master_host='192.168.1.45',

master_user='mastj',

master_password='123456',

master_port=3306,

master_log_file='mysql-bin.000021',

master_log_pos=1692,

master_connect_retry=10;

1

2

3

4

5

6

7

8参数详解:

master_host:主服务器的IP。

master_user:配置主服务器时建立的用户名

master_password:用户密码

master_port:主服务器mysql端口,如果未曾修改,默认即可。

master_log_file:日志文件名称,填写查看master状态时显示的File

master_log_pos:日志位置,填写查看master状态时显示的Position

master_connect_retry:重连次数

启动进程1mysql> start slave;

检查主从复制状态1mysql> show slave statusG

TIPS:Slave_IO_Running和Slave_SQL_Running均为Yes,则表示连接正常。若重启,则需检查参数是否一致(主从)

Proxy(192.168.1.47)服务器

安装 mysql-proxy1

2$ tar -xvf mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz

$ mv mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy

配置mysql-proxy,创建主配置文件1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19$ cd /usr/local/mysql-proxy

$ mkdir lua #创建脚本存放目录

$ mkdir logs #创建日志目录

$ cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件

$ cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本

$ vim /etc/mysql-proxy.cnf #创建配置文件

[mysql-proxy]

user=root

admin-username=mastj

admin-password=123456

proxy-address=192.168.1.47:4000

proxy-read-only-backend-addresses=192.168.1.46

proxy-backend-addresses=192.168.1.45

proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua

admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua

log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log

log-level=info

daemon=true

keepalive=true

1

2

3

4

5

6

7

8

9

10

11

12

13各参数解释:

user=root #运行mysql-proxy用户

admin-username=proxy #主从mysql共有的用户

admin-password=123.com #用户的密码

proxy-address=192.168.0.204:4000 #mysql-proxy运行ip和端口,不加端口,默认4040

proxy-read-only-backend-addresses=192.168.0.203 #指定后端从slave读取数据

proxy-backend-addresses=192.168.0.202 #指定后端主master写入数据

proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置

admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #指定管理脚本

log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log #日志位置

log-level=info #定义log日志级别,由高到低分别有(error|warning|info|message|debug)

daemon=true #以守护进程方式运行

keepalive=true #mysql-proxy崩溃时,尝试重启

修改配置文件权限1$ chmod 660 /etc/mysql-proxy.cnf

修改读写分离配置文件1

2

3

4

5

6

7

8$ vim /usr/local/mysql-proxy/lua/rw-splitting.lua

if not proxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1

max_idle_connections = 1, #默认8,改为1

is_debug = false

}

end

启动 mysql-proxy1

2$ /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

$ netstat -tupln | grep 4000 #已经启动

TIPS:关闭 mysql-proxy 可使用命令:$ killall -9 mysql-proxy

读写分离测试

在主服务器创建 proxy 用户用于 mysql-proxy 使用,从服务器也会同步这个操作1mysql> grant all on *.* to 'mastj'@'192.168.1.47' identified by '123456';

使用客户端连接 mysql-proxy1

2

3$ mysql -u mastj -h 192.168.1.47 -P 4000 -p

mysql> use my_test;

mysql> create table user (number INT(10),name VARCHAR(255));

关闭同步,分别在 master 和 slave 上插入数据

slave 服务器1

2mysql> stop slave;

mysql> insert into user values(01,'zhangsan');

master 服务器1mysql> insert into user values(02,'lisi');

proxy 服务器1mysql> select * from user; # 从结果可以看到数据是从slave上读取的,并没考虑master节点上的数据。

直接从 proxy 上插入数据1mysql> insert into user values(03,'hehe');

再次查询1mysql> select * from t; # 结果显示查询数据没有变化,因为proxy上执行insert相当于写入到了master上,而查询的数据是从slave上读取的。

TIPS:各种场景可以自行测试。

centos mysql proxy_CentOS7搭建MysqlProxy实现读写分离相关推荐

  1. 高性能高可用MySQL(主从同步,读写分离,分库分表,去中心化,虚拟IP,心跳机制)

    高性能高可用MySQL(主从同步,读写分离,分库分表,去中心化,虚拟IP,心跳机制) 视频地址:https://www.bilibili.com/video/BV1ry4y1v7Tr?p=8& ...

  2. java spring mysql配置_java相关:mysql+spring+mybatis实现数据库读写分离的代码配置

    java相关:mysql+spring+mybatis实现数据库读写分离的代码配置 发布于 2020-4-4| 复制链接 分享一篇关于关于mysql+spring+mybatis实现数据库读写分离的代 ...

  3. Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  4. sqlserver date类型和字符串比较_基于SQL Server数据库搭建主从复制实现读写分离实战演练...

    一.课程介绍 读写分离(主从同步)从字面意思就可以理解,就是把对数据库的读操作和写操作分离开.读写分离在网站发展初期可以一定程度上缓解读写并发时产生锁的问题,将读写压力分担到多台服务器上.读写分离的基 ...

  5. 视频教程-ElasticSearch7.x集群搭建(es7)主从读写分离搭建教程-ELK

    ElasticSearch7.x集群搭建(es7)主从读写分离搭建教程 10多年互联网一线实战经验,现就职于大型知名互联网企业,架构师, 有丰富实战经验和企业面试经验:曾就职于某上市培训机构数年,独特 ...

  6. MySQL主从配置与Mycat读写分离

    MySQL主从配置与Mycat读写分离 一.主数据库配置 编辑配置文件 添加如下内容 server-id=1 binlog-do-db=master_db1 #备份的数据库 log-bin=mysql ...

  7. 黄聪mysql_黄聪:Mysql主从配置,实现读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  8. linux mysql安装 读写分离_linux下安装mysql-proxy 配置读写分离

    一.软件列表 ncurses-5.7.tar.gz wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.7.tar.gz mysql-proxy-0.8 ...

  9. 基于Docker搭建MySQL(MariaDB)+ mycat读写分离测试环境

    1. 手动创建mariadb镜像     创建一个CentOS容器         [yeqiang@localhost ~]$ docker run -it centos /bin/bash    ...

最新文章

  1. 每日一则 LeetCode: Add Two Numbers
  2. 用 gson 替换 fastjson 引发的线上问题分析
  3. 在SQLServer中区分大小写的几种方法
  4. os-enviroment
  5. Windows中查找文件被何进程使用
  6. Vue前端和Java后端 联调使用AES 前后端加密解密
  7. 前端改变窗口大小内容不变形_10个前端灵魂拷问丨吃透这些就能摆脱初级前端工程师...
  8. 软件体系架构课下作业07
  9. 表达式转换成后缀表达式进行计算
  10. python爬取天气预报并发送短信_Python3爬虫教程之利用Python实现发送天气预报邮件...
  11. JavaSE(二):Java语法(5)——Java数据类型转换
  12. NMEA-0183 协议简介
  13. DDOS误判怎么预防
  14. linux学习课程从入门到精通:Linux基本操作和服务器硬件选购指南
  15. [ATPG]解读report_nonscan_cells -summary得到的report
  16. 图灵 数理逻辑 人工智能 图灵机与计算问题 论文
  17. java 实现繁简字体转换(笨方法)
  18. 【开源】这可能是封装微信 API 最全的 .NET SDK 了
  19. ubuntu下网页快捷方式,chrome网页添加到桌面
  20. 阮一峰 react 系列教程

热门文章

  1. iptables(3)
  2. FTP服务器搭建及操作(一)
  3. struct和class的区别
  4. linux-32bit-内存管理
  5. python 求点到线段距离
  6. delphi pid判断进程结束_有两个这样的进程:僵尸进程amp;孤儿进程,蓝瘦香菇
  7. 部分iPhone13 系统有bug
  8. 用户态文件系统fuse学习
  9. V4L2视频应用程序编程架构
  10. LOCAL_MODULE_TAGS 选项说明