CentOS7+Docker下配置MySql数据库主从模式master-slave,搭建流程以及遇到的问题 - Go语言中文社区

CentOS7+Docker下配置MySql数据库主从模式master-slave,搭建流程以及遇到的问题


最近在学习Go语言,在了解Go语言操作数据库的相关知识点时,涉及到了Mysql数据库主从模式搭建相关的只是,因此简单记录一下Linux下Mysql数据库主从模式的搭建流程,以及搭建中遇到的一些问题

1.创建数据库

我用的是docker,操作系统为部署在virtualbox上的centos7,远程连接工具为Xshell。

docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:latest
docker run --name mysql-slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=12345678-d mysql:latest

分别创建了端口为3306的master数据库 和 端口为3307的slave数据库,查看一下容器状态,如下图所示
在这里插入图片描述
查看一下端口是否被占用

netstat -lnp | grep docker

如下图所示

在这里插入图片描述
查看一下当前虚拟机的ip

ifconfig

如下图所示
在这里插入图片描述
可以将ip记录下来,之后会用到。

2.创建主从复制用户

打开另一个终端用于操作master数据库
首先我们要连接master数据库。连接数据库时,我发现我的虚拟机是一直在docker容器中使用mysql数据库,本机并没有安装mysql客户端,因此 安装一下客户端先。

rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
yum install mysql-community-client.x86_64

安装成功之后,开始连接master数据库

mysql -uroot -h127.0.0.1 -p

输入密码之后回车,mysql数据库连接成功
查看master的状态信息

show master status;

结果如下图显示
在这里插入图片描述
在这里 我们需记录下文件名binlog.000002 稍后会用到

正式开始创建用户,命令如下

CREATE USER 'reader'@'%' IDENTIFIED BY 'reader';

创建成功后 我们给该用户赋予权限

grant replication slave on *.* to 'reader'@'%';

3.配置slave

新建一个终端,连接slave数据库

mysql -uroot -h127.0.0.1 -P3307 -p

配置一下master的信息,也就是告诉slave它要去哪里读取master的binlog

CHANGE MASTER TO MASTER_HOST='192.168.56.99',MASTER_USER='reader',MASTER_PASSWORD='reader',MASTER_LOG_FILE='binlog.000002',MASTER_LOG_POS=0;

制定好了文件名,并且从0开始复制。这里变用到了上文我们记录的虚拟机ip和binlog文件名称。
然后我们启动slave

start slave

查看slave的状态

show slave statusG

如下图所示
在这里插入图片描述
这里显示的Slave_IO_Running 这个和master数据库进行交互的进程是没有启动的,具体的错误原因在下面的error信息中也有提及。
我们在master和slave中分别使用命令如下

 show variables like 'server_id';

看到的结果确实是两个数据库服务的server_id是相同的。都是“1”,问题应该就是这里,所以我们目前的解决思路就是 修改slave数据库的server_id为2。

4.修改slave数据库的server_id

我们首先进入到slave数据库的容器中

docker exec -it 8ede9928be15  /bin/bash

修改server_id并且打开二进制日志

 sed -i '$a [mysqld]' /etc/mysql/my.cnf
sed -i '$a log-bin=mysql-bin' /etc/mysql/my.cnf
sed -i '$a server-id=2' /etc/mysql/my.cnf

然后我们退出容器 重启服务
再次进入连接slave数据库 重新启动slave查看状态

stop slave;
start slave;
show slave statusG

结果如下图所示
在这里插入图片描述
负责同步master的进程和自身的进程全部正常运行了

接下来我们再master中添加数据库 slave中都会自动同步,主从复制部署完成。

(最后的ps:做了四年多的.net工程师,从framework到core,也开始渐渐的拥抱开源,拥抱linux,去学习和使用docker、k8s等等容器化的开源技术,去接纳微服务和rpc,最近在学习Go语言相关的知识,转型不容易,且行且珍惜,给自己加油!)

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Koala_Ivy/article/details/103403758
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢