mysql 数据库集群架构_Mysql集群架构

  • Post author:
  • Post category:mysql


1、Mysql读写分离架构

0417e796c9f1640a7fc1554fc1720fd5.png

主库,负责写入数据,我们称之为“写库”;

其他都是从库,负责读取数据,我们称之为“读库”

要求:

1)读库和写库的数据要一致

2)写数据必须写到写库中

3)读数据必须到读库

存在问题思路解决:

一、在程序controller到service层加一个aop切层,切换数据源,但是对service层方法命名有要求

二、中间件解决

主从之间的同步,是异步完成,也就意味着是弱一致性。由于网络传输问题,可能从库没有同步到主库的数据 —— 这个问题可以通过PXC集群解决

2、中间件架构

ff36fa79ecaf1c024f171005d54c603c.png

单个中间件压力过大,采取多个中间件

05542c52025ce1bc9bbfcb1f7286a25a.png

3、PXC架构

5b452ade2e8fa00dbebbfa917f4ddb35.png

4、混合架构

39eafbe2e188a3fd026f57b9cf1c3971.png

5、主从复制原理

a0ecd4e7f20d8950dedf131a4dcb0bd9.png

主库配置文件my.conf

#开启主从复制,主库的配置

log-bin = mysql-bin

#指定主库serverid

server-id=1#指定同步的数据库,如果不指定则同步全部数据库

binlog-do-db=my_test

#执行SQL语句查询状态

SHOW MASTER STATUS

在主库创建同步用户

#授权用户slave01使用123456密码登录mysql

grant replication slave on*.* to ‘slave01’@’127.0.0.1’ identified by ‘123456’;

#刷新配置

flush privileges;

从库配置文件my.conf

#指定serverid,只要不重复即可,从库也只有这一个配置,其他都在SQL语句中操作

server-id=2#以下执行SQL:

CHANGE MASTER TO

master_host=’127.0.0.1′,

master_user=’slave01′,

master_password=’123456′,

master_port=3306,

master_log_file=’mysql-bin.000006′,

master_log_pos=1120;

#启动slave同步

START SLAVE;

#查看同步状态

SHOW SLAVE STATUS;

搭建主库

#创建目录

mkdir/data/mysql/master01

cd/data/mysql/master01

mkdir conf data

chmod777 * -R

#创建配置文件

cd/data/mysql/master01/conf

vim my.cnf

#输入如下内容

[mysqld]

log-bin=mysql-bin #开启二进制日志

server-id=1#服务id,不可重复

#创建容器

docker create–name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v/data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root

percona:5.7.23#启动

docker start percona-master01 && docker logs -f percona-master01

#创建同步账户以及授权

create user’itcast’@’%’ identified by ‘itcast’;

grant replication slave on*.* to ‘itcast’@’%’;

flush privileges;

#出现 [Err]1055 – Expression #1of ORDER BY clause is not in GROUP BY clause and错误解

决方案,在my.cnf配置文件中设置

sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO

,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’#查看master状态

show master status;

#查看二进制日志相关的配置项

show global variables like’binlog%’;

#查看server相关的配置项

show global variables like’server%’;

搭建从库

#创建目录

mkdir/data/mysql/slave01

cd/data/mysql/slave01

mkdir conf data

chmod777 * -R

#创建配置文件

cd/data/mysql/slave01/conf

vim my.cnf

#输入如下内容

[mysqld]

server-id=2 #服务id,不可重复

sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO

,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’#创建容器

docker create–name percona-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v/data/mysql/slave01/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root

percona:5.7.23#启动

docker start percona-slave01 && docker logs -f percona-slave01

#设置master相关信息

CHANGE MASTER TO

master_host=’192.168.1.18′,

master_user=’itcast’,

master_password=’itcast’,

master_port=3306,

master_log_file=’mysql-bin.000002′,

master_log_pos=648;

#启动同步

start slave;

#查看master状态

show slave status;



版权声明:本文为weixin_29130255原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。