配置MySql主从和读写分离
主从复制: 主服务发生的改变都会同步到从服务器上。
同步原理,主服务器执行的任何语句,都会记录在 binlog 中,从服务器会去读取 binlog,因为binlog包含主服务器的相关信息,从服务器无法直接使用,所以从服务器会去分析binlog,然后转换为可以识别的relaylog(中继日志), 最后执行,从而完成主从复制。
主服务器需要配置binlog
从服务器需要配置relaylog
binlog是敏感信息,master需要授予slave权限(授予账号,salve使用分配的账户登陆获取binlog)
主服务器配置binlog:
修改主服务器配置文件:
# 配置主服务器id,通常主从位于同一个局域网内,在局域网内,IP地址通常第四段不同,将server-id设置为第四段的ip即可
# 比如局域网的ip为 192.168.0.200 ,server-id设置为 200
server-id=200
# 启用binlog,并设置binlog的文件名称前缀,这里是mysql-bin前缀,将会生成 mysql-bin.xxx 这样的日志文件
# 日志文件默认会存放在 /var/lib/mysql目录下
log-bin=mysql-bin
# 二进制日志的格式 row/statement/mixed
# 当主服务器发生数据变化时,从服务器同步可以通过两种方式做出改变:
# 1. 主服务器执行什么语句,从服务器就执行什么语句
# 2. 从服务器监听磁盘变化,有变化做出相应的改变
# 使用哪一种方式?
# 1. 如果执行语句少,但是磁盘变化大,适合statement
# 2. 如果执行语句多,但是磁盘变化小,则适合row
# 3. 如果半斤八两,使用mixed混合方式,mysql会自动判断
binlog-format=mixed
从服务器配置:
注意,从服务通常也打开binlog,为了以防数据丢失恢复。并且需要配置 relaylog。
# 开启relaylog
relay-log=mysql-relay
主服务器分配账号:
#注意,只能授予*.*,不能具体到库和表
#授予局域网内的所有机器连接
grant replication client, replication salve on *.* to repl@'192.168.1.%'
flush privileges;
从父亲配置master:
# 改变从服务器的主服务器:
change master to
# 主服务器地址
master_host='主服务器地址',
# 连接主服务器的用户
master_user='repl',
# 指定读取主服务器的那个binlog
master_log_file='mysql-bin.00001',
# 从哪个文件指针开始读
master_log_pos=348;
查看主从是否打通:
show salve status;
主从配置完成
读写分离
解决并发问题,不同于分表,分表用于解决数据量过大的问题。
方式一:业务层使用不同的数据库
方式二:使用负载均衡,判断是什么语句,分配到不同的数据库
基于应用层和数据库层中间的代理层,主要解决方案有:
mycat
TDDL
Sharding-JDBC
cobar(mycat前身,阿里开发)
这些中间件,统一为多个数据库进行代理,应用只需连接中间件(分布式数据库系统),执行sql,中间件就会根据规则,将sql分配到不同的数据库中。
最后更新于
这有帮助吗?