搭建Mysql主从复制历程

 搭建目的:

        由于前几日在于一家公司hr交流中得知他们公司需要搭建存储得集群,于是决定自己利用虚拟机和docker部署一个mysql主从集群,其中也遇到了一些问题,在此进行一些记录;

搭建过程:

    一)docker命令拉取mysql镜像

此处由于我并没有具体得实际应用需求,就从docker官网拉取了最新版本得mysql镜像,此处附上docker镜像官网地址 mysql - Official Image | Docker Hubicon-default.png?t=N7T8https://hub.docker.com/_/mysql

拉取完毕后,在服务器上运行如下命令:

docker images;

可以看到MySQL已经拉取成功;

二)创建docker容器,运行MySQL

使用下载完成得镜像创建容器:

Master(主节点): 

docker run -p 3301:3306 --name master -e MYSQL_ROOT_PASSWORD=1234 -d mysql

Slave(从节点):

docker run -p 3302:3306 --name slave -e MYSQL_ROOT_PASSWORD=1234 -d mysql

注:-d 后跟得是镜像名称     我的mysql镜像名称就是mysql,读者需根据具体情况进行修改

容器创建完毕后,可以利用数据库管理工具进行外部连接。

1)Master节点用户创建

进入容器:

docker exec -it 容器ID /bin/bash

登录MySQL:

mysql -uroot -p 密码

 注意:此处要用root账户登录,不然会报错

查询是否允许外部访问:

use mysql;
select host,user from user;

 

可以看到,并没有我们创建得用户(暂时也不知道为啥)。

所以我们需要重新创建用户:

CREATE USER 用户名@'%' IDENTIFIED BY '密码';  -- 创建用户并指定密码
GRANT ALL PRIVILEGES ON *.* TO 用户名@'%' WITH GRANT OPTION;  --授权

创建完成再次进行查询:

可以看到,出现了一个新用户(我创建得名称为master),并且可以进行外部连接

注:host为%即允许外部所有ip连接,如果有安全需求可以改为固定ip

再次进行连接,应该就可以成功了

2)Slave节点用户创建

大体步骤与Master节点得创建步骤相同

但是为了后期实现读写分离,最好只给slave节点赋予读权限:

CREATE USER 用户名@'%' IDENTIFIED BY '密码';  -- 创建用户并指定密码
GRANT SELECT ON *.* TO '用户名'@'%';  --授权

三)搭建集群配置

1)Master节点的配置

docker内部安装vim

apt-get update

apt-get install vim

注:如果进度条不动,遇到报错

可以尝试在容器外修改docker配置:

修改此路径文件

vim /etc/docker/daemon.json

添加如下配置,注意配置之间用“,”隔开 

重新进行vim下载

下载完成后执行如下命令:

vim /etc/mysql/my.cnf

在文件中添加如下配置:

[mysqld]
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能,可以随便取(关键)
log-bin=master-bin
binlog-format=ROW     // 二级制日志格式,有三种 row,statement,mixed
binlog-do-db=数据库名  //同步的数据库名称,如果不配置,表示同步所有的库

配置完成后,需要重启mysql服务使其修改的配置文件生效,使用如下命令使mysql进行重启

service mysql restart

重启会导致docker容器停止,使用如下命令重新启动容器:

docker start mysql-master

重新进入master节点


创建数据库同步账户并授权:

mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '密码';

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

至此,master节点配置完毕;

2)Slave节点的配置

类似于Master,使用docker命令docker exec -it mysql-slave /bin/bash 进入到slave容器中,进入到etc/mysql路径,使用vim命令编辑my.cnf文件:

[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=mysql-relay-bin  
read_only=1  ## 设置为只读,该项如果不设置,表示slave可读可写

四)连接主从节点

1)进入master节点,查看状态

进入master节点的mysql客户端,执行如下命令:

show master status

注意:记录此处的File和Position值,后面需要用到;

2)进入从节点,连接主节点

注:由于要上文只给从节点用户授予了读权限,此处需要用root用户进入从节点;

change master to master_host='主节点服务器ip', master_user='slave', master_password='1234', master_port=3301, master_log_file='master-bin.000002', master_log_pos=718, master_connect_retry=30;

master_host: Master所处的服务器IP

master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

运行 

show slave status \G

查看主从节点状态;

此处由于没有开启主从复制,所以两处都是NO;

开启主从复制:

start slave

 

再次查看状态,发现两处都变为Yes;

至此,完成主从搭建

3)测试

想验证是否完成主从同步,只需在主节点创建一个数据库,查看从节点是否能到查询到即可;

以下是实际操作:

由此可见,在主节点创建了一个名为userdb的数据库;

再去查看从节点:

成功查询到userdb;

并且由于我们只给从节点授予了读权限,所以他不能对数据库进行修改;

至此 数据库的主从搭建完成!

五)总结

虽然对于学习过程中,搭建的mysql集群还没有什么实际应用;

但是对于以后的工作,这个搭建的经验应该还是有用武之处的;

最后,各位朋友在搭建过程中有任何问题,都可以通过QQ:735205643联系我,

一同探讨学习!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值