本文通过Docker快速搭建MySQL主从数据库,并用spring boot测试读写分离的实现,这是一个实验环境,便于开发人员开发业务功能代码 。
一、用docker进行msyql主从环境搭建在搭建环境之前保证已安装docker,本文不进行docker安装的介绍 。
1、安装master结点执行下面安装
docker run --name mysql-master --privileged=true -v /home/yaokangjun/Apps/docker/master-data:/var/lib/mysql -p 23306:3306 -e MYSQL_ROOT_PASSword=root -d xiaochunping/mysql-master
命令介绍
--name指定运行之后的容器的名称为mysql-master;--privileged指定了当前容器是否真正的具有root权限,所谓的root权限是指具有宿主机的root权限,而不仅仅只是在容器内部有root权限;-v指定了容器中指定目录挂载到宿主机上的某个目录,这样做的目的在于防止容器中配置的数据丢失,因为docker容器在重启之后是不会保留前一次在其内部运行的相关数据的,把例子的目录改成你自己的:/home/yaokangjun/apps/docker/master-data;-p表示宿主机上的某个端口映射到docker容器内的某个端口,这里也就是将宿主机的3306端口映射到容器内部的3306端口;-e表示指定当前容器运行的环境变量,该变量一般在容器内部程序的配置文件中使用,而在外部运行容器指定该参数 。这里的MYSQL_ROOT_PASSWORD表示容器内部的MySQL的启动密码;-d参数指定了当前容器是在后台运行 。
安装完成后,执行:
docker ps
可以看到:
-bash-4.2$ sudo docker psCONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMESda8ccfefbce6xiaochunping/mysql-slave"docker-entrypoint.s…"4 hours agoUp 4 hours0.0.0.0:23307->3306/tcpmysql-slavec3b94d07a86axiaochunping/mysql-master"docker-entrypoint.s…"4 hours agoUp 4 hours0.0.0.0:23306->3306/tcpmysql-master
如下图
文章插图
通过容器名称mysql-master方式进入容器
docker exec -it mysql-master /bin/bash
进入容器后登录mysql:mysql -uroot -proot
我们要为从服务器创建一个可以用来master服务器同步数据的账户,也就是创建一个专门用来复制binlog的账号,并且赋予该账号复制权限,其命令如下:grant replication slave on *.* to 'test'@'%' identified by '123456';flush privileges;
这里的grant replication slave是一个命令格式,表示赋予后面的账户以复制的权限,这样slave节点就能够获取到master节点对数据的更新 。上述命令中创建的账户的用户名为test,密码为123456 。接着我们需要查看master节点的binlog状态:mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000003 |589 ||||+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)
文章插图
【搭建mysql主从并用springboot读写分离-含源码】
上面的File和Position很重要,等一下在从数据库会用到 。
2、安装slave结点slave的过程和master相似 。
执行下面安装:
docker run --name mysql-slave --privileged=true -v /home/yaokangjun/apps/docker/slave-data:/var/lib/mysql -p 23307:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=root -d xiaochunping/mysql-slave
从容器启动与主容器启动参数主要有一下两点:• 所映射的宿主机的端口号不能与master容器相同,因为其已经被master容器占用;• 必须加上--link参数,其后指定了当前容器所要连接的容器,mysql-master表示所要连接的容器的名称,master表示为该容器起的一个别名,通俗来讲,就是slave容器通过这两个名称都可以访问到master容器 。这么做的原因在于,如果master与slave不在同一个docker network中,那么这两个容器相互之间是没法访问的 。注意这一点非常重要,之前本人按照网上的搭建方式搭建主从服务器一直无法成功,主要就是因为他们一直没有提到要设置这个参数 。
进入容器并登录mysql:docker exec -it mysql-slave /bin/bashmysql -uroot -proot
连接上MySQL服务器之后,我们就需要切换当前服务的状态,使其能够连接上master服务器,并且复制其数据:change master to master_host='master', master_user='test', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=589, master_connect_retry=30;
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 10分钟快速搭建小程序管理后台,云开发CMS搭建可视化后台
- MySQL如何删除重复数据
- reGeorg搭建HTTP隧道和流量分析
- MySQL运行机制
- MySQL5.7数据库主从架构部署,你再也不用去问度娘了
- MySQL高可用架构的演进
- CENTOS Mysql5.7数据库自动安装脚本
- 怎样用3分钟搭建 Python 人脸识别系统
- 做好mysql运维,必须熟练掌握备份和恢复,实战一次不行多来几次
- MySQL还能实现分布式锁?