MySQL主从复制+mysql-proxy读写分离

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL主从复制+mysql-proxy读写分离http://www.bieryun.com/3202.html 主从复制的方式有两种:基于日志、基于GTID(全局事务标识符),我们使用基于日志的复制 MySQL主从复制原理(A/B) 1)master讲数据改变记录到二进制日志(binary .

MySQL主从复制+mysql-proxy读写分离http://www.bieryun.com/3202.html

主从复制的方式有两种:基于日志、基于GTID(全局事务标识符),我们使用基于日志的复制

MySQL主从复制原理(A/B)

1)master讲数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制日志时间(binary log events);

2)slave通过I/O线程读取master中的binary log events并写入到他的中继日志(relay log);

3)slave重新操作中继日志中的事件,把中继日志中的事件信息在本地执行一次,完成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)

 

开始试验

环境说明

CentOS 6.5

MySQL5.1.73

mysql-proxy

192.168.0.138(master)

192.168.0.161(slave)

192.168.0.198(mysql-proxy)

注意:

1、操作系统一样;

2、数据库版本一样;

3、数据库数据一样;

4、selinux全部为disabled

5、master必须开启二进制日志,master和slave的server_id在局域网中必须唯一,一般使用当前及其的IP最后的值

 

单向主从环境(MySQL A/B复制)搭建

1、主服务器配置

##在[mysqld]中增加以下配置

#设置server_id,一般为IP

server_id=138

## 复制过滤:需要备份的数据库,输出binlog

#binlog-do-db=mydb

## 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)

binlog-ignore-db=mysql

## 开启二进制日志功能,可以随便取,最好有含义

log-bin=master-bin

## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

## 主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

## 如果需要同步函数或者存储过程

log_bin_trust_function_creators=true

重启master数据库,并赋予权限

#service mysql restart

#mysql -u root -p

mysql>create user backup@'%' IDENTIFIED BY 'backup';

mysql>GRANT ALL  on *.* to backup@'%';//这里可根据自己的数据库和权限进行设置

mysql>grant replication slave, replication client on *.* to 'backup'@'192.168.1.161' identified by 'mysql';

mysql>flush privileges;

mysql>select host,user from mysql.user;

mysql>show master status;

记住下面的master-bin.000006和 120,在配置slave时人用到,File_Set和Position每次重新配置都会改变

 

配置从服务器slave

在[mysqld]下面加上

server_id=158

binlog-do=db=mydb

binlog-ignore-db=mysql

log-bin=slave1-bin //这个可以先不加

binlog_cache_size=1M

binlog_format=mixed

expire_logs_days=7

slave_skip_errors=1062

relay_log=mysql-relay-bin  //配置中继日志

log_slave_updates=1  //表示把事件写入自己的二进制文件(和log_bin一起应用)

read_only=1

如果Slave为其它Slave的Master时,必须设置bin_log。在这里,我们开启了二进制日志,而且显式的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。
relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志。
当设置log_slave_updates时,你可以让slave扮演其它slave的master。此时,slave把SQL线程执行的事件写进行自己的二进制日志(binary log),然后,它的slave可以获取这些事件并执行它

保存后重启MYSQL

#service mysql restart

#mysql -u root -p

mysql>change master to master_host='192.168.1.177',

>master_user='backup',

>master_password='backup',

>master_port=3306,

>master_log_file='master-bin.000002',

>master_log_pos=391,

>master_connect_retry=30;

//这里的master_log_file和master_log_pos要和show master status中显示的master相关信息对应

开启主从同步

mysql>start slave;

mysql>show slave status \G

两项都是yes表示没有问题

可以进行测试进行进一步验证

 

 

下面进行mysql-proxy的配置实现主从数据库的读写分离

1、安装mysql-proxy

实现读写分离是有lua脚本实现的,现在mysql-proxy里面已经集成,不需要在安装,选择官网下载mysql-proxy

地址:http://dev.mysql.com/downloads/mysql-proxy/下载对应版本或高级版本

对tar包进行解压缩

把mysql-proxy对应文件目录进行移动并改名为/usr/local/mysql-proxy

2、配置mysql-proxy,创建主配置文件

cd/usr/local/mysql-proxy

mkdir lua #创建脚本存放目录

mkdir logs #创建日志目录

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

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

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

[mysql-proxy]

user=root #运行mysql-proxy用户

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

admin-password=123456#用户的密码

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

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

proxy-backend-addresses=192.168.179.146#指定后端主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崩溃时,尝试重启

#保存退出!

chmod 660/etc/mysql-porxy.cnf

 

3、修改读写分离配置文件

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

if notproxy.global.config.rwsplit then

proxy.global.config.rwsplit = {

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

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

is_debug = false

}

end

 

4、主数据库授权

(1).在主服务器创建proxy用户用于mysql-proxy使用,从服务器也会同步这个操作

mysql>grant all on *.* to 'proxy'@'192.168.0.198' identified by 'proxy';

 

 

5、启动mysql-proxy

#/usr/local/mysql-prox/bin/mysql-proxy –defaults-file=/etc/mysql-proxy.cnf

#netstat –tulpn| grep 4040

 

远程连接测试

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
SQL 关系型数据库 MySQL
如何实现 MySQL 的读写分离?
本文介绍了 MySQL 读写分离的实现方式及其主从复制原理,解释了如何通过主从架构提升读并发能力。重点分析了主从同步延时问题及解决方案,如半同步复制、并行复制等技术手段,并结合实际案例探讨了高并发场景下的优化策略。文章还提醒开发者在编写代码时需谨慎处理插入后立即查询的情况,避免因主从延时导致的数据不一致问题。
144 44
如何实现 MySQL 的读写分离?
|
10天前
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
39 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
|
15天前
|
SQL 网络协议 关系型数据库
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
85 40
|
4月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
256 1
|
21天前
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
|
4月前
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
306 0
|
2月前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
137 14
|
2月前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
131 24
|
4月前
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
305 1
MySQL主从复制原理和使用
|
4月前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
227 0
Mysql中搭建主从复制原理和配置