mysql主从复制和读写分离

mysql主从复制:

1,主节点在my.conf中开启binlog监听

2,一定要在主从复制搭建好了再创建数据库:

3,从节点:开启relaylog: relay-log=mysql-relay

4,

1)在主节点上创建一个slave用户,允许该用户读取binlog

create user 'slave1'@'%' IDENTIFIED BY '123456';  #创建用户

GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%'; #授权 复制权限

flush privileges; #使授权生效

2)在从机上配置需要复制的主机

CHANGE MASTER TO MASTER_HOST=‘主节点IP地址’,

MASTER_USER=‘slave名称(在主节点设置的)’,

MASTER_PASSWORD=‘主节点密码’,

MASTER_LOG_FILE=‘需要从主节点复制的binglog文件:mysql-bin.具体数字’,

MASTER_LOG_POS=‘具体值(可以在主节点通过命令 show master status 查看)’;

如:

CHANGE MASTER TO MASTER_HOST=‘172.16.105.132’,

MASTER_USER=‘slave1’,

MASTER_PASSWORD=‘123456’,

MASTER_LOG_FILE=‘mysql-bin.000005’,MASTER_LOG_POS=1023;

3)在从节点开启主从复制:start slave

查看从节点状态:show slave status \G;

 

如何停止从服务复制功能?

stop slave

如何重新配置主从?

在从节点运行:stop slave; reset master;  然后根据上面的步骤重新配置

 

 

mysql读写分离:

1,可以在java代码中实现,例如JDBC,放一个读的connection,一个写的connection,每次获取链接前,分析sql是写请求还是读请求,路由到不同的节点;

也可以通过注解+AOP方式实现

2,通过中间件实现,例如mycat

 

 

分库分表:(mycat直接在建表语句中就可以做到分库分表)

垂直拆分:按照业务将表进行拆分,分布到不同数据库中,比如:支付,账户,权限等

垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中

1,基本原则:不同主机的库里的表不能关联查询,所以有关联关系的表可以放在一个库中,没有关联关系的表放在不同库中

2,全句表/广播表:类似数据字典表,在每个节点都有的

3,分片表:根据某个字段分片,可以用hash分片

在mycat中,有很重要的概念,就是逻辑表/库,跟物理表/库; 这两者有映射关系;mycat中的就是逻辑的,mysql中的就是物理的

4,ER表:ER表是指与分片表关联的表(例如通过外键关联); ER表同样要进行分片,分片的字段跟分片表的字段可以不一样

5,常用分片算法:1)hash算法 mod_hash  有很多很多,例如 按照年月日hash等等

posted on 2022-07-12 16:03  哈皮的玩偶  阅读(33)  评论(0编辑  收藏  举报