开发人员不要总是认为搭建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日志文件中。也能说明同步成功。