配置MySql主从和读写分离

主从复制: 主服务发生的改变都会同步到从服务器上。

同步原理,主服务器执行的任何语句,都会记录在 binlog 中,从服务器会去读取 binlog,因为binlog包含主服务器的相关信息,从服务器无法直接使用,所以从服务器会去分析binlog,然后转换为可以识别的relaylog(中继日志), 最后执行,从而完成主从复制。

  1. 主服务器需要配置binlog

  2. 从服务器需要配置relaylog

  3. 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;

主从配置完成

读写分离

解决并发问题,不同于分表,分表用于解决数据量过大的问题。

方式一:业务层使用不同的数据库

方式二:使用负载均衡,判断是什么语句,分配到不同的数据库

基于应用层和数据库层中间的代理层,主要解决方案有:

  1. mycat

  2. TDDL

  3. Sharding-JDBC

  4. cobar(mycat前身,阿里开发)

这些中间件,统一为多个数据库进行代理,应用只需连接中间件(分布式数据库系统),执行sql,中间件就会根据规则,将sql分配到不同的数据库中。

最后更新于