mysql 实现主从复制——主库已有数据的解决方案
集群多主多从方案

操作环境:Windows 10 专业版  64位
MySQL版本:安装企业中主流版本MySQL 5.7,并且采用5.7.24目前最新版本(截止2018/12/7官方更新)

一、设计内容

数据库高可用架构的实现(通过多台服务器协同合作来解决单点故障)

 

二、需求分析

1、问题描述

随着数据库的数据量日益增大,人们对数据的安全性越来越重视,单机的处理能力已经无法满足需求,此项目就是为了满足数据库的高可用和高并发。

2、基本要求

  • 掌握数据库基本SQL语句
  • 熟悉常用对象的创建和使用:索引、约束、视图、用户、权限
  • 熟练搭建数据库集群架构

三、设计拓扑图

jiegoutu-1

四、详细设计

1、软件包解压

解压数据库软件安装包

2、配置环境变量

右键单击我的电脑->属性->高级系统设置(高级)->环境变量

选择“系统变量”中的Path

在变量值中添加变量值:D:\mysql\bin(红色部分改为自己的解压路径)
注意是在原有变量值后面加上这个变量,用;隔开,不能删除原来的变量值,win10请忽视,直接新建就好。

如下图显示的:

20190111202732-1

3、准备配置文件

因为我们是2主2从共4套库,所以要准备4个配置文件。

如下是4个配置文件名称以及文件中的内容

111-1

2222-1

4、初始化所有数据库

以管理员身份运行cmd,这一点很重要,进入到mysql的解压目录bin下。

我的数据库在集群搭建的项目中是安装在D:\mysql中

D:\mysql\bin>mysqld –defaults-file=D:\mysql\my3306.ini –initialize-insecure

D:\mysql\bin>mysqld –defaults-file=D:\mysql\my3307.ini –initialize-insecure

D:\mysql\bin>mysqld –defaults-file=D:\mysql\my3308.ini –initialize-insecure

D:\mysql\bin>mysqld –defaults-file=D:\mysql\my3309.ini –initialize-insecure

20190111204647-1

5、启动所有数据库

先把它们都添加到服务中,分别运行

D:\mysql\bin>mysqld install mysql3306 –defaults-file=D:\mysql\my3306.ini

D:\mysql\bin>mysqld install mysql3307 –defaults-file=D:\mysql\my3307.ini

D:\mysql\bin>mysqld install mysql3308 –defaults-file=D:\mysql\my3308.ini

D:\mysql\bin>mysqld install mysql3309 –defaults-file=D:\mysql\my3309.ini

 

运行后分别出现Service successfully installed.即将安装成功。

启动数据库

D:\mysql \bin>net start my3306

D:\mysql \bin>net start my3307

D:\mysql \bin>net start my3308

D:\mysql \bin>net start my3309

222-1

 

 

 

 

 

 

 

 

6、主库1查看binlog位置

选3306为主库1数据库

mysql> show master status;

515-1

 

 

 

7、主库1创建用户

D:\mysql \bin>mysql -uroot  -P3306

mysql> create user slave@localhost identified by ‘mysql‘;

mysql> grant replication slave on *.* to slave@localhost;

8、主库2操作

选3307端口的为主库2数据库

D:\mysql \bin>mysql -uroot  -P3307

mysql> change master to master_host=’localhost‘,master_user=’slave‘,master_password=’mysql‘,master_

port=3306,master_log_file=’mysql-bin.000002‘,master_log_pos=780;

mysql> start slave;

9、从库1操作

我们选3308端口的为从库1,操作和主库2一样

D:\mysql \bin>mysql -uroot  -P3308

mysql> change master to master_host=’localhost‘,master_user=’slave‘,master_password=’mysql‘,master_

port=3306,master_log_file=’mysql-bin.000002‘,master_log_pos=780;

mysql> start slave;

10、从库2操作

我们选3309端口的为从库2,操作也和主库2一样

D:\mysql \bin>mysql -uroot  -P3309

mysql> change master to master_host=’localhost‘,master_user=’slave‘,master_password=’mysql‘,master_

port=3306,master_log_file=’mysql-bin.000002‘,master_log_pos=780;

mysql> start slave;

11、主库2操作双主

现在我们让主库2(port=3307)也做为主,查看它自己的binlog位置

D:\mysql \bin>mysql -uroot  -P3307

mysql> show master status;

12、主库1操作

D:\mysql \bin>mysql -uroot  -P3306

mysql> change master to master_host=’localhost‘,master_user=’slave‘,master_password=’mysql‘,master_

port=3307,master_log_file=’mysql-bin.000002‘,master_log_pos=617;

Query OK, 0 rows affected, 2 warnings (0.72 sec)

mysql> start slave;

五、功能测试

1、预测结果

在主库1上执行交易,会同步到主库2,从库1和从库2上

在主库2上执行交易,也会同步到主库1,从库1和从库2上

2、验证测试结果

测试前四个数据库中数据的情况

15616-1

现在在主库1上执行 create database db123,然后查看其它3个是否在同步

6846-1

6511556-1

现在在主库2上执行 create database db222,然后也查看其它3个是否在同步

mysql> create database db222;

Query OK, 1 row affected (0.14 sec)

948-1

 

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容