mysql分布式实践 - 搭建主从复制集群

8 篇文章 0 订阅
4 篇文章 0 订阅

开发人员不要总是认为搭建mysql 集群这种工作都是架构师或者是运维的事,反过来想想架构师之所以是架构师,也不是一毕业就成为了架构师,所以鄙人认为只要是工作3年以上的后段研发同学都有必要搞一搞这种事。俗称,搞事情。在成为大牛的道路上,大家还有许许多多小怪兽要打呀😏😏

下面是正经的搭建过程了


# 前期准备 #

1、环境准备

我的环境是 mac os, 所需虚拟机版本是VMware Fusion12,其他操作系统的自己调兑。

还需你下载一个cenos7的iso镜像(我已上传资源),最好选一个minal的,自己练手没必要整个很大的。

安装(略,自己琢磨去)。

2、创建几个虚拟机

我的博客中有如何创建虚拟机的文章连接,自己看。

3、虚拟机中安装docker

1)查看是否已经安装了docker

# yum list installed | grep docker

2)安装docker

# yum -y install docker

3)启动docker服务

# systemctl start docker

4、虚拟机中安装mysql

下载Mysql源安装包
  1   wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
yum安装mysql源
  2   yum localinstall mysql57-community-release-el7-8.noarch.rpm -y
检查mysql源是否安装成功
  3   yum repolist enabled | grep "mysql.*-community.*"
yum安装Mysql
  4   yum install mysql-community-server -y
启动Mysql服务
  5   systemctl start mysqld
并添加开机启动
systemctl enable mysqld systemctl daemon-reload
查看Mysql状态
  6   systemctl status mysqld
查看默认的mysql密码
此时Mysql安装完成!!!

# 开始搭建 mysql 主从复制架构 #

1、在每个虚拟机中安装docker-mysql 容器

$ docker run --name mysql3307 -p 3307:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=enjoy -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/3307/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/3307/data/:/var/lib/mysql -v /home/mysql/docker-data/3307/logs/:/var/log/mysql -d mysql:5.7

参数介绍
mysql3307:mysql的docker服务的名称
3307:3306:3307是虚拟机端口,3306是docker中mysql的端口,这里需要做一个映射,否则你无法直接在 
           linux环境中访问docker中的mysql服务。
MYSQL_DATABASE=enjoy:enjoy是我要常见的数据库名称,可自定义。
-v:v后面的是虚拟机环境和docker-mysqld的文件映射,和端口映射一个原理。
mysql:5.7:是docker image名称(实例名称)

注意:每个虚拟机中都要执行一样的命令。选择一个当做主master,其他的则为从slave。

2、给 主从 配置相关文件

主:cd 到 /home/mysql/docker-data/3307/conf目录下,添加一个my.cnf文件,my.cnf内容设置如下:

# master my.cnf
server-id=135
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1
lower_case_table_names=1

参数介绍:
server-id:集群中每台服务器的唯一标识,用来同步时指定mysql主机用
log-bin:必须配置,表示开启复制功能
auto_increment_increment和auto_increment_offset:是指id的增长从1开始,步长是2。这样的话,不同的sql主机配置有差异,id不会冲突(两个主和从的数据id 不会出现冲突的情况)

从:cd 到 /home/mysql/docker-data/3307/conf目录下,添加一个my.cnf文件,my.cnf内容设置如下:

# slave my.cnf
server-id=1353307
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
lower_case_table_names=1

重启主从服务器,令 配置生效: $ docker restart mysql3307

3、配置权限,让主从的关系真正生效

  • 在 master mysql 添加权限
grant replication slave,file,replication client on *.* to 'repluser'@'%'
identified by '123456';
flush privileges;

注意:命令中的引号是必须有的。
  • 在 slave mysql 设置master的信息
change master to master_host='192.168.198.3',master_port=3307,master_user='repluser',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;

参数介绍:
master_host:master节点的ip.
master_log_file:bin log文件
master_log_pos:需要同步的log位置

master_log_file和master_log_pos 怎么找?
去master上执行如下命令:
$ mysql -uroot -p123456 -h 192.168.198.3 -P 3307
继续执行:
mysql> show master status;
File和Position就是。

至此 简单的mysql 主从架构就已经搭建完成,下面验证该架构是否能实现主从复制。


1、使用mysql的客户端,对应主从服务器,常见相应的连接。

2、分别创建表 tb_user(user_id, user_name);

3、在master的表中添加一行数据保存。

如果slave的tb_user表中刷新后 也有这条一样的数据,那么就表示 我们上面搭建的架构成功了。

4、还可以通过查看日志验证

$ docker logs  -f mysql3307

可以看到已经将日志写到xxxx-relay-bin.000002日志文件中。也能说明同步成功。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值