docker部署MySQL主从复制读写分离

Docker部署Mysql主从复制实现Springboot读写分离案例 Sharding-JDBC定位为轻量级的JAVA框架,在JAVA的JDBC层提供额外的服务,它使得客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离适用于任何基于JDBC的ORM框架支持任何第三方的数据库连接池支持任意实现JDBC规范的数据库使用Sharding-JDBC框架的步骤导入对应的maven坐标在配置文件中配置读写分离规则。 阅读详情

环境:阿里云服务器CentOS 8.4版本,docker20.10版本,mysql5.7版本,此处读写分离使用amoeba软件实现(amoeba版本:2.20tar包)。部署1主1从架构。

一,云服务器安装操作系统,此处为CentOS 8.4。

    1,云服务器主机安装操作系统(https://www.aliyun.com),登录阿里云界面直接安装即可。

二,CentOS 8.4 安装docker
    1,安装依赖包
      yum install -y yum-utils  device-mapper-persistent-data  lvm2
      yum-config-manager  --add-repo   https://download.docker.com/linux/centos/docker-ce.repo
      yum install docker-ce docker-ce-cli containerd.io
    2,安装docker并启动,设置开机自启
      yum install docker-ce docker-ce-cli
      systemctl start docker
      docker --version
      systemctl enable docker   //设置开机自启

三,docker下载mysql镜像(此处拉取MySQL5.7版本),配置mysql文件并创建和启动MySQL容器
    1,docker pull mysql:5.7    //拉去MySQL镜像
    2,创建主服务器文件夹:mkdir /home/mysql 
                   mkdir /home/mysql/conf.d
                   mkdir /home/mysql/data/

    3,创建从服务器文件夹:mkdir /home/mysql2
                   mkdir /home/mysql2/conf.d
                   mkdir /home/mysql2/data/
    
    4,创建主服务器my.cnf配置文件
                    vim /home/mysql/my.cnf

  1 [mysqld]
  2 user=mysql
  3 character-set-server=utf8
  4 default_authentication_plugin=mysql_native_password
  5 secure_file_priv=/var/lib/mysql
  6 expire_logs_days=7
 7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO    ,NO_ENGINE_SUBSTITUTION
  8 max_connections=1000
  9 log-bin=mysql-bin
 10
 11 log-slave-updates=true     //允许从服务器同步
 12 server-id=10                     //标识符,每台服务器标识符不能相同
 13
 14 [client]
 15 default-character-set=utf8
 16
 17 [mysql]
 18 default-character-set=utf8

     5,创建从服务器my.cnf配置文件
                     vim /home/mysql2/my.cnf

  1 [mysqld]
  2 user=mysql
  3 character-set-server=utf8
  4 default_authentication_plugin=mysql_native_password
  5 secure_file_priv=/var/lib/mysql
  6 expire_logs_days=7
 7sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO    ,NO_ENGINE_SUBSTITUTION
  8 max_connections=1000
  9
 10 server-id=20                                       //注意区分主服务器id
 11 relay-log=relay-log-bin                                    //指定从服务器日志文件名
 12 relay-log-index=slave-relay-bin.index                //指定从服务器索引文件名
 13
 14 [client]
 15 default-character-set=utf8
 16
 17 [mysql]
 18 default-character-set=utf8

    6,启动主库容器(挂载外部目录,端口映射成33307,密码设置为123456)
      docker run  -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 33307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7


    7,启动从库容器(挂载外部目录,端口映射成33306,密码设置为123456)
      docker run  -di -v /home/mysql2/data/:/var/lib/mysql -v /home/mysql2/conf.d:/etc/mysql/conf.d -v /home/mysql2/my.cnf:/etc/mysql/my.cnf -p 33306:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 
    
    8,docker ps         //查询容器启动是否成功,(如启动失败,执行docker logs查看错误日志,排查原因)

四,登录主库和从库,配置主从复制

    1,连接主库:
       docker exec -it d92761440128 /bin/bash            //登录主库容器
                    mysql -uroot -p123456                            //登录MySQL主库
    2,创建test用户,并设置密码:
      create user 'test'@'%' identified by '123';
    3,授权用户:
      grant all privileges on *.* to 'test'@'%' ;      //此处授权为允许所有网段的ip访问
    4,刷新权限
      flush privileges;       
    5,查看主服务器状态
      show master status;  
    6,查看主容器库ip
      docker inspect --format={{.NetworkSettings.IPAddress}}  d92761440128
    7,连接从库:
       docker exec -it 72a27a9e5621 /bin/bash   //登录从库容器
                  mysql -uroot -p123456                  //登录MySQL从库
    8,配置主库信息
      change master to master_host='172.17.0.2',master_port=3306,master_user='test',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=970;
    /* 注解
    change master to 
    master_host='MySQL主服务器IP地址', 
                master_port=MySQL容器服务的端口3306(注意:此端口不是宿主机端口)
    master_user='之前在MySQL主服务器上面创建的用户名', 
    master_password='之前创建的密码', 
    master_log_file='MySQL主服务器状态中的二进制文件名', 
    master_log_pos='MySQL主服务器状态中的position值';
    */
    9,启用从库
      start slave;
    10,查看从库状态(Slave_IO_Running: Yes        Slave_SQL_Running: Yes   这两个参数为yes,则启动成功)
      show slave status\G;

五,登录主库,测试主从复制同步

#在主库上创建数据库test1
create database test1;
use test1;
#创建表
create table tom (id int not null,name varchar(100)not null ,age tinyint);
#插入数据
insert tom (id,name,age) values(1,'xxx',20),(2,'yyy',7),(3,'zzz',23);

#在从库上查看是否同步成功
#查看数据库
show database;
use test1;
#查看表
show tables;
#查看数据
select * from test1;
 

六,部署amoeba,搭建读写分离架构

1,安装jdk(此处为jdk1.6版本)

yum -y erase java-*

1)chmod +x jdk-6u14-linux-x64.bin

2)./jdk-6u14-linux-x64.bin

3)mv jdk1.6.0_14/ /usr/local/jdk1.6

4)vim /etc/profile

export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile && java -version

2,安装amoeba

mkdir /usr/local/amoeba                       //创建amoeba目录
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/             //解压amoeba安装包
chmod -R 755 /usr/local/amoeba/

3,在主MySQL数据库新建授权用户

 docker exec -it d92761440128 /bin/bash
 mysql -uroot -p123456 -h 172.17.0.2

mysql> grant all on *.* to haha@'172.17.0.%' identified by '123';

4,配置amoeba配置文件

1)vim /usr/local/amoeba/conf/amoeba.xml

 30                                         <property name="user">hehe</property>
 31
 32                                         <property name="password">123</property>

115                 <property name="defaultPool">slaves</property>
116
117                 <property name="writePool">master</property>
118                 <property name="readPool">slaves</property>

2)vim /usr/local/amoeba/conf/dbServers.xml

 25                         <!-- mysql user -->
 26                         <property name="user">haha</property>
 27
 28                         <property name="password">123</property>


 44         <dbServer name="master"  parent="abstractServer">
 45                 <factoryConfig>
 46                         <!-- mysql ip -->
 47                         <property name="ipAddress">172.17.0.2</property>
 48                 </factoryConfig>
 49         </dbServer>
 50
 51         <dbServer name="slave"  parent="abstractServer">
 52                 <factoryConfig>
 53                         <!-- mysql ip -->
 54                         <property name="ipAddress">172.17.0.3</property>
 55                 </factoryConfig>
 56         </dbServer>

 58         <dbServer name="slaves" virtual="true">

 64                         <property name="poolNames">slave</property>
 65                 </poolConfig>

5,启动amoeba

   amoeba start &

此处启动后报错”Unable to load native library: libnsl.so.1: cannot open shared object file:“

解决方案:yum install libnsl (安装依赖库)后 即可解决

netstat -utpln | grep 8066      //查看端口启动后amoeba启动成功。

 

 

 

 

 

 

 

 

springboot多数据源配合docker部署mysql主从实现读写分离 小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取) 阅读详情

相关推荐

docker+atlas+mysql实现读写分离

docker+atlas+mysql实现读写分离1、引言2、准备1、Docker1、why Docker2、Docker安装2、mysql主从复制1、概述2、搭建步骤3、检测3、读写分离1、前提2、搭建步骤3、测试4、思考 1、引言 引言:在大数据量,高并发等场景下,对数据库压力越来越大,通过优化sql,合理索引,分库分表等措施已经无法满足数据处理、存储要求,因此通过代理和添加节点实现数据库主从复制、读写分离提升性能是很好的一个选择。网上关于atlas实现数据库读写分离的文章少之又少,而且雷同,没有详细的执

weixin_42098332的博客 1077

使用Docker安装达梦数据库

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、docker的安装二、新建带有端口映射的容器,并将端口开通好1.新建容器2.打通端口三、安装达梦数据库1.安装前准备2.进行安装总结 前言 最近公司要求对老项目进行维护,需要安装达梦数据库,我采用了centos7.8的docker进行安装,这里做个记录。 一、docker的安装 查看当前centos系统内核版本,高于3.10才能安装docker #uname -r 下载和安装docker #yum -y install

qq_26147675的博客 1万+

Docker部署MySQL集群+主从复制+Atlas读写分离

Docker部署MySQL集群+主从复制+Atlas读写分离

✅ 专注企业级 Linux/DevOps 运维的实战派 ✅ 已输出上百篇可落地方案 ✅ Shell 脚本开箱即用 ✅ K8s/YAML 环境验证 ✅ 故障排查链路完整复现 1782

登录oracle报错

解决error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory问题

qq_43712367的博客 2006

光学设计进阶:Zemax中的坐标断点与离轴系统优化

本文深入解析了Zemax中坐标断点的核心原理与实战应用,它是实现离轴光学系统设计的关键。文章通过比喻和实例,详细阐述了如何利用坐标断点作为“方向盘”来精确控制光学元件的偏心和倾斜,实现“前断后接”的局部坐标系变换,从而构建并优化无中心遮拦的离轴反射系统,避免光线失控。

3a9bq4r8t2y的博客 525

STM32F103C8T6+TB6612驱动直流电机全攻略(附PWM调速代码)

本文提供了一份基于STM32F103C8T6微控制器和TB6612驱动模块的直流电机驱动完整解决方案。详细解析了硬件连接、STM32CubeMX配置、HAL库驱动代码编写,并附带了PWM调速代码实现。内容涵盖从基础原理到实战调试的全过程,旨在帮助开发者快速构建稳定、可精准调速的电机控制系统,适用于智能车、机器人等嵌入式项目。

weixin_29181861的博客 586

安装jdk报错

安装jdk报错 ed during initialization of VM Unable to load native library: libnsl.so.1: cannot open shared object file: No such file or directory

weixin_43920017的博客 1936

《揭秘 BME688人工智能压力湿度温度气体传感器:气体检测的多面能手》:此文为AI自动生成

BME688 是博世推出的一款具有人工智能和集成高线性度高精度压力、湿度、温度传感器的气体传感器,专为移动和联网应用开发,尺寸紧凑且低功耗。BME688 作为一款先进的传感器,在多个领域展现出卓越的性能。它采用了坚固而紧凑的 3.0 x 3.0 x 0.9 mm³ 封装,这种小巧的尺寸使其能够轻松应用于对空间要求严格的移动设备和联网应用中。同时,低功耗的特性也使得它在能源有限的环境下能够长时间稳定运行。

zheng_ruiguo的专栏 1931

Centos 安装JDK 出现Unable to load native library: libnsl.so.1

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

star_star_91的博客 7457

数字IC后端笔记-libcell命名规则与标准单元库介绍

ND3D1BWP13T40P140HVTND3D1BWP13T40P140HVTTSMC两种工艺,Metalization Stack的截面示意图:还有一层AP用来走RDL,RDL这层是最厚的一层,一般用于连接IO的bump,信号线基本上不会用这层绕线。

sinat_41774721的博客 2465

xhs私信协议分析

之前分析过xhs的shield算法,今天再聊聊xhs的私信,文章仅供学习参考研究交流,如有侵权请联系删帖。经过抓包分析发现私信接口并不是走的http协议,而是socket协议。而要获取socket包则需要使用wireshark软件1、protobuf的包体中的序号7,多次验证后发现文字信息的需要需要固定成12、protobuf的包体中的序号12,多次验证后发现文字信息的需要需要固定成1后续有时间的话,再研究一下视频和图片格式的私信协议,这次就分析到这里吧。

佛系更新... 3486

练习使用命令安装卸载软件

centos 怎么卸载 jdk centos 卸载 jdk 的方法是: 1、首先,查询系统是否安装了 jdk; 2、然后,执行【rpm -e --nodeps java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64】命令卸载 jdk 即可。(具体要看你电脑主要有哪些依赖,可以全部使用这个命令删除) Centos7 一般都会带有自己的 openjdk, 我们一般都回用 oracle 的 jdk,所以要卸载。 步骤一:查询系统是否安装了 jdk #rpm -qa |grep

不会划水猴子的博客 1502

echarts 饼图(加载进度条动画效果)

1、外侧动画细线效果运动“custom”自定义系列中“renderItem”属性来实现,动态修改起始角度和终止角度。2、圆环使用" pie "类型添加两个data值来画百分比圆环,动态修改data中的值。

God's asylum的博客 1631

docker 部署MySQL实现主从复制读写分离

详细阐述了通过Docker-Compose配置MySQL主架构,包括设置复制参数、配置用户权限等步骤。此外,并通过proxy SQL实现读写分离,旨在提高数据库系统的读取性能与可靠性。通过这一架构,系统能够自动将读请求分发到从节点,而写请求则保留在主节点,有效平衡了负载并增强了数据安全性,另介绍部署过程中的相关注意事项。。

sozee910的博客 1713

【Reality Capture 】01:Reality Capture1.5中文版安装教程(附安装包下载)

本文详细介绍了Reality Capture 1.5中文版的安装步骤。首先,下载并解压Reality Capture v1.4.0汉化版安装包,运行EpicInstaller并更改安装路径。接着,启动Epic Games Launcher,登录或注册账号后下载并安装软件。安装完成后,进入主界面并设置中文语言。此外,还提供了中文补丁的拷贝方法,将ui.xml和RealityCapture_CHS.exe文件分别放置到指定目录,并运行RealityCapture_CHS.exe以完成汉化。最后,文章提供了Rea

智慧空间实验室 1749

【Bug已解决】Codex Desktop 报错 Computer Use 插件不可用的解决方案

方案适用场景推荐指数让 Codex 自查修复首选的快速尝试方式⭐⭐⭐⭐⭐清理插件缓存重启明确怀疑是本地缓存损坏⭐⭐⭐⭐彻底卸载重装前两个方案无效时的进阶方案⭐⭐⭐⭐检查安全软件拦截企业电脑/装有严格安全软件的环境⭐⭐⭐确认账号权限范围排除功能本身未开放的可能性⭐⭐⭐Codex Desktop 报Computer Use 插件不可用的本质是客户端内置的插件资源在本地未被正确解包或注册到插件市场索引中,而不是真的缺少安装包。优先尝试让 Codex 自身检测并修复本地插件环境。

一键难忘的博客 5982

Docker安装MySQL,配置主从,读写分离

MySQL主从复制 为什么要使用主从复制 主从复制读写分离一般都是一起使用的,目的简单,为了提高数据库的并发。 如果是单机库,读写都在一台MySQL中完成,I/O频率过高,采用多机部署,读写分离,可以提高数据库的可用性 MySQL主从复制是一个异步的过程,底层是基于MySQL数据库自带的二进制日志功能,将一台或者多台MySQL数据库(即slave,从库)从另一台MySQL数据库(Master,即主库)进行日志的复制然后解析日志并应用到本身,最后实现从库数据与主库的数据保持一致。 MySQL复制过程分为三

葡萄枸杞桂圆干的博客 514

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

DOCKER部署mycat2+mysql8实现读写分离

使用docker +mycat2 +mysql实现数据库读写分离

qq_39794423的博客 1237

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

mysql proxy 读写分离_MySQL主从复制 mysql-proxy实现读写分离

1.安装和配置Docker服务器版本阿里云CentOS7.4docker版本18.06.0-cedocker安装步骤https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1# docker pull mysql:5.7启动两个mysql镜像,分别映射3306和3316端口主库:3306端口备库:3316端...

weixin_42234168的博客 309

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

基于 Docker 的高可用 WordPress 集群部署:分布式 Nginx + Keepalived、MySQL 主从复制与 ProxySQL 读写分离

Keepalived 同时部署在两台负载均衡服务器(192.168.0.119 和 192.168.0.120)上,每台服务器运行 Nginx 和 Keepalived,形成主备关系,通过虚拟 IP(VIP,192.168.0.100)实现高可用。:确保服务器间网络畅通,防火墙(若有安装)开放必要端口(80、443、3306、6032、6033,以及 VRRP 协议端口 112)。:监控账户用于 ProxySQL 检查 MySQL 服务器状态和复制延迟。:若挂载失败,检查 NFS 服务器状态或添加。

m0_68550105的博客 1182

基于Docker的高可用WordPress集群部署:Nginx负载均衡+Mysql主从复制+ProxySQL读写分离

确保所有服务器(192.168.91.167、192.168.91.168、192.168.91.169)已安装 Docker 和 Docker Compose。若未安装,请参考官方文档安装。:监控账户用于 ProxySQL 检查 MySQL 服务器状态和复制延迟。:目录权限需与容器内用户(通常 UID/GID 为 1000)匹配。:若挂载失败,检查 NFS 服务器状态或添加。执行以下 SQL 创建复制用户(使用。创建 ProxySQL 配置文件。:生产环境建议使用简洁版。(内容同 3.3 节)。

m0_68550105的博客 1337

mysql主从复制&读写分离

当存在用户并发时,不仅应用层有压力,数据库也会有压力,这时候需要用到mysql 的主从复制功能,主从复制可以用到mysql集群部署和读写分离。如下图,我们可以用一台服务器作为主服务器,进行增删改操作,多台服务站作为从服务器,由于查询远远大于修改的量,所以主服务器的数量可以少于从服务器。接下来进行配置。 预先准备两台实验机器,为了方便,本次使用docker容器 dockerrun-it --name mysql57 -eMYSQL_ROOT_PASSWORD=123456 -p 3306:33...

u014043168的博客 706

MySQL-基于docker实现Replication集群主从复制及读写分离

什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高可用性能。 说的直白一点就是要做一件事,一个人做着非常吃力,没有那么多精力,所以需要多个人分工合作,最终一起完成。MySQL集群就是这个道理,比如读写分离等等。这个说的比较简单了,今天这篇文章就是一个简单的一主一从双节点的Replication集群,为了测试使用。介绍...

谷子的博客 1662

MySql 主从复制 mysql-proxy实现读写分离

1.安装和配置Docker 服务器版本阿里云CentOS7.4 docker版本18.06.0-ce docker安装步骤https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1 下载mysql镜像 # docker pull mysql:5.7 启动两个mysql镜像,分别映射330...

weixin_34221073的博客 76

Mycat2+Mysql+Docker搭建简单的主从复制和读写分离

Mysql 主从复制 、读写分离简单配置

weixin_39080216的博客 1255

【Docker】使用docker-compose部署MySQL主从复制集群

MySQL是一款开源的关系型数据库管理系统,它利用结构化查询语言(SQL)来存储、检索和管理数据。本文主要介绍使用docker-compose部署MySQL主从复制集群。

weixin_43892251的博客 597
下一篇: Oracle基于CentOS 7安装
LinuxLOVERes
博客等级 码龄8年 1916粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值