docker-compose使用

Compose是一个定义和管理多容器的工具,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,比如使用 什么镜像、数据卷、网络、映射端口等;然后一条命令管理所有服务,比如启动、停止、重启等。 1、Linux安装Compose 参考网址:Releases · docker/compose · GitHub 下载二进制文件 bash 1 2 3 curl -L \ https://github.com/docker/compose/releases/download/1.22.0/docker-compose-\ `uname -s`-`uname -m` -o /usr/local/bin/docker-compose 对二进制文件添加可执行权限 bash 1 chmod +x /usr/local/bin/docker-compose 测试安装 docker-compose –version 也可以使用pip工具安装:pip install docker-compose 2、使用compose 参考文档:Docker Compose | Docker Documentation compose语法详解:Compose file version 3 reference | Docker Documentation Docker compose file 中文参考文档 - CSDN博客 2.1 Compose常用命令选项 参数 介绍 build 构建或修改Dockerfile后重建服务 config 验证和查看compose文件语法 -q,只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 --services,打印服务名,一行一个 create down 停止和删除容器、网络、卷、镜像,这些内容是通过docker-compose up命令创建的. 默认值删除 容器 网络。 logs 打印compose service日志输出。 ps 打印compose进程,-q只打印pid 更多参数参考:Docker-compose命令详解 - CSDN博客...

docker Volume

对于docker来讲,作为容器运行的底层引擎,在组织及运行容器时每个容器内只运行一个程序及子程序。对于这个容器来讲,启动时依赖于 底层镜像联合挂载启动而成。 底层能够存储此类分层构建并联合挂载镜像的文件系统。最上层构建读写层。对于此读写层来说。所有对容器的操作都保存在最上层之上。而下层内容的操作需要使用写时复制。 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层,如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即 写时复制(COW)机制。此机制对IO较高的应用在实现持久化存储时,势必对在底层应用数据存储时性能要求较高。要想绕过使用限制,可以使用存储卷机制。 Why Data Volume? 宿主机的主机文件系统直接与容器内部的文件系统之上的某一访问路径建立绑定关系。 在宿主机上目录和容器内文件系统建立绑定关系的目录相对于容器来讲被称为volume。容器内所有有效数据都是保存在存储卷,从而脱离容器自身文件系统。当容器关闭并删除时,只要不删除与宿主机与之绑定的存储目录,就能实现数据脱离容器的生命周期而持久化。docker的存储卷默认情况下使用其所在宿主机之上的本地文件系统目录的。 关闭并重启容器,其数据不受影响;但删除Docker容器,则其更改将会全部丢失 存在的问题 存储于联合文件系统中,不易于宿主机访问; 容器间数据共享不便 删除容器其数据会丢失 解决方案:“卷(volume)” “卷”是容器上的一个或多个“目录”,此类目录可绕过联合文件系统,与宿主机上的某目录“绑定(关联)” 在docker中如果需要动刀存储卷时,不必要手动创建,Volume于容器初始化之时即会创建,由base image提供的卷中的数据会于此期间完成复制 Volume的初衷是独立于容器的生命周期实现数据持久化,因此删除容器之时既不会删除卷,也不会对哪怕未被引用的卷做垃圾回收操作; Data volumes ·卷为docker提供了独立于容器的数据管理机制 ·可以把“镜像”想像成静态文件,例如“程序”,把卷类比为动态内容,例如“数据 “;于是,镜像可以重用,而卷可以共享; ·卷实现了“程序(镜像)”和“数据(卷)”分离,以及“程序(镜像)”和“制作镜像的主机 “分离,用户制作镜像时无须再考虑镜像运行的容器所在的主机的环境; Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同; Bind mount volume 绑定挂载卷 在宿主机指定一个特定路径,在容器内指定一个特定路径,二者已知路径建立关联关系。 a volume that points to a user-specified location on the host file system Docker-managed volume docker管理卷 指定容器内的挂载点,与之关联的是宿主机的目录由docker daemon引擎自行创建空目录,或者使用已存在目录与存储卷路径建立关联关系。 the Docker daemon creates managed volumes in a portion of the host’s file system that’s owned by Docker 在容器中使用Volumes 为docker run命令使用一v选项即可使用Volume...

docker Registry使用

docker registry介绍 Registry用于保存docker镜像,包括镜像的层次结构和元数据,用户可自建Registry,也可使用官方的Docker Hub 分类 Sponsor Registry:第三方的registry,供客户和Docker社区使用 Mirror Registry:第三方的registry,只让客户使用 Vendor Registry:由发布Docker镜像的供应商提供的registry Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry 一个docker Registry上拥有两种功能: 提供镜像存储的仓库。 提供用户获取镜像时的认证功能。 同时提供当前服务器上所有可用镜像的搜索索引。 一个docker镜像仓库有仓库的名称,等同于yum的repostory。通常简称为repo。为了使的镜像和应用程序版本之间有意义上的关联关系。在docker一个仓库通常只存放一个应用程序的镜像。因此,这个仓库名就是应用程序名。通过给每个镜像额外添加一个组件叫tag,来标识每一个镜像。通常镜像名称:标签repo_name:tag才能唯一标识一个镜像。 为了可以快速创建registry,docker专门提供了一个程序包 docker-distribution 。https://hub.docker.com/r/distribution/registry/ regustry自身运行在容器中,而容器的文件系统会随着容器生命周期终止而删除,因此需要给registry定义存储卷,使用网络存储。 在yum的extras仓库有一个docker-registry的程序包。docker-distribution的主配置文件在 /etc/docker-distribution/registry/config.yml,所有上传的镜像存放在/var/lib/registry 。 sh 1 2 3 4 5 6 7 8 9 10 11 12 $ yum info docker-registry Available Packages Name : docker-registry Arch : x86_64 Version : 0.9.1 Release : 7.el7 Size : 123 k Repo : extras/7/x86_64 Summary : Registry server for Docker URL : https://github....

ansible介绍

运维工具 OS Provisioning: PXE, Cobbler(repository,distritution, profile) PXE: dhcp, tftp, (http, ftp) dnsusq: dhcp, dns OS Config: puppet, saltstack, func Task Excute: fabric, func, saltstack Deployment: fabric 管理主机,要想管理被管理节点,二者必须有安全管理通道。puppet、saltstack在管理被管节点时,每一个被管节点必须运行puppet agent,管理端进程与每一个被管节点的agent进程进行通信,通信时使用的HTTP协议。此种方式必须在被管节点安装应用程序的agent,远程接收到指令,并在本地负责执行相应的任务。 根据远程管理时,是不是在每一个被管主机上安装agent端,分为两种puppet、func、saltstack;与无需agent端,ansible、fabric。依赖被管节点的ssh服务。而管理端需要知道对方主机上的账号密码。 ansible的组成 ansible核心 host invenory :为了管控每个被管主机,每个主机在本地需要注册。用来定义由ansible远程配置管理的主机,每个主机的IP地址、掩码、SSH监听的地址、端口号、账号密码等。 core modules:ansible执行任何特定管理任务,都是不由ansible自身玩成的,而是通过模块完成的。 custom Modules:使用任何编程语言来编写模块。 playbooks:将主机要完成的多个任务,事先定义在文件中可以多次调用。 1 ansible的特性 基于Python语言实现,由Paramiko, PyYAML和jiniia2三个关键模块 部署简单,agentless 默认使用SSH协议 主从模式: master:ansible, ssh client slave: ssh server 支持自定文模块:支持各种编程语言,支持Playbook,基于“模块”完成各种“任务”。 安装依赖于epel源 配置文件: text 1 2 /etc/ansible/ansible.cfg Invertory:/etc/ansible/hosts 2 ansible命令应用基础 语法: ansible <host-pattern> [-f forks] [-m module_name] [-a args]...

SSH客户端应用场景

SSH命令详解 参数 说明 -1 强制使用ssh协议版本1; -2 强制使用ssh协议版本2; -4 强制使用IPv4地址; -6 强制使用IPv6地址; -A 开启认证代理连接转发功能; -a 关闭认证代理连接转发功能; -b 使用本机指定地址作为对应连接的源ip地址; -C 请求压缩所有数据; -F 指定ssh指令的配置文件; -f 后台执行ssh指令; -g 允许远程主机连接主机的转发端口; -i 指定身份文件; -l 指定连接远程服务器登录用户名; -N 不执行远程指令; -o 指定配置选项; -p 指定远程服务器上的端口; -q 静默模式; -X 开启X11转发功能; -x 关闭X11转发功能; -y 开启信任X11转发功能。 -D 指定本地 “动态” 应用程序级端口转发。这通过分配套接字来侦听本地端口,可选地绑定到指定的bind_address。只要与此端口建立连接,就会通过安全通道转发连接,然后使用应用程序协议确定从远程计算机连接的位置。 SSH端口转发实战 概述 在通常情况下,网络防火墙会阻碍你进行某些必要的网络传输。公司的安全策略可能不允许你把SSH密钥存储在某些主机上。或者,你也可能需要在原本安全的环境中运行一些不安全的网络应用程序。 SSH提供了一个重要功能,称为转发forwarding或者称为隧道传输tunneling,它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程有时也被叫做tunneling,这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。 SSH端口转发主要用来解决如下两方面问题: 突破防火墙的限制完成无法建立的 TCP 连接。 加密 Client 端至 Server 端之间的通讯数据。 开启ssh的端口转发功能 ssh端口转发功能默认是打开的。如需修改的话,修改后需要重启sshd服务才会生效。...

tcp.validnode_checking踩过的坑

对Oracle 检查ip合法性,就必须在服务器端的sqlnet.ora文件中设置如下参数 text 1 2 TCP.INVITED_NODES=(10.0.0.36,10.0.0.1,10.0.0.35) TCP.EXCLUDED_NODES=(10.0.0.2) 启动监听出现如下错误 text 1 2 3 4 5 6 7 8 9 10 11 $ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 12-MAR-2018 18:32:13 Copyright (c) 1991, 2009, Oracle. All rights reserved. Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error: 111: Connection refused 错误输出并没有打印详细的信息,从lisenter.ora,tnsnames.ora入手,但没有发现文件是错误的。最后检查sqlnet.ora,发现TCP.INVITED_NODES参数有如下约束是官方文档没有给出的 tcp.invited_nodes需要满足如下条件才可成功启动监听 1、需要设置参数TCP.VALIDNODE_CHECKING为YES才能激活该特性。 2、tcp.invited_nodes的值中一定要包括本机地址(127.0.0.1 / 10.0.0.36)或localhost,因为监听需要通过本机ip去访问监听,一旦禁止lsnrct将不能启动或停止监听。 3、不能设置ip段和通配符。 4、此方式只适合tcp/ip协议。 5、此方式是通过监听限制白名单的。 6、针对的是ip地址而不是其他(如用户名等)。 7、此配置适用于9i以上版本。本次踩坑是oracle11gr2。 8、修改配置后需要重启监听才可生效。 TCP....

jenkins检查代码 如没更新停止构建步骤

需求分析 在jenkins中没有找到构建前插件,每次构建时间很长,希望可以实现判断代码是否更新,如果没更细则停止构建步骤。 实现步骤 在构建时执行shell命令,而jenkins提供的的环境变量可以实现此判断 https://wiki.jenkins.io/display/JENKINS/Conditional+BuildStep+Plugin text 1 2 3 4 5 6 GIT_COMMIT The commit hash being checked out. GIT_PREVIOUS_COMMIT The hash of the commit last built on this branch, if any. GIT_PREVIOUS_SUCCESSFUL_COMMIT The hash of the commit last successfully built on this branch, if any. GIT_COMMIT 当前拉取版本的commit id GIT_PREVIOUS_COMMIT 最后在此分支上构建的 commit id GIT_PREVIOUS_SUCCESSFUL_COMMIT 最后在此分支上成功构建的 commit id号 text 1 2 3 4 5 6 7 8 #!/bin/bash if [ $GIT_PREVIOUS_SUCCESSFUL_COMMIT == $GIT_COMMIT ];then echo "no change,skip build" exit 0 else echo "git pull commmit id not equals to current commit id trigger build" fi 注意,不能使用-eq 只能使用 “==” 提交新版本后,构建提示如下:...

jenkins多个slave遇到的坑

jenkins配置如下 在Jenkins上添加了两个节点(Slave Node),且为这两个节点设置了一个相同的标签 “windows”。创建了一个新Job – “test-windows”,选择的是”构建一个自由风格的软件项目”。并且为了使多个slave并行构建,我选择了"只允许绑定到这台机器的job”,在"Label Expression"中选择了"windows"。 然而这种方式并不能实现多个slave并行操作。网上90%说的都不靠谱。 在我使用的过程中,使用了label 去管理多个 Slave,给一个项目的构建指定了这个 label,会发现这个项目的多次构建,都使用同一个 Slave,并没有使用 label 里的其它 Slave去构建。 查了很多资料才发现原来从 jenkins 的调度算法使用了一致性的哈希算法,jenkins根据添加的信息评测出优先级列表,选择优先级最高的Slave去构建,当最优slave不满足条件或者没有可用的 execut时,才会选用下一个slave。 查了很多资料发现构造多配置项目可以选择构建时的slave。这样可以实现多slave并行构建。 multi configuration project比起构建自由风格的软件项目多个Configuration Matrix,在这里可以选择多个slave。这里选择lable的话,还是会使用默认算法从lable中选择最优slave进行构建。 配置完成后再构建时,会同时在多个slave上进行并行构建 禁止在master上运行job或和业务相关的操作 将 [executors] 设置为0

windows上sqlplus客户端连接oralce数据库中文显示问题

运行环境 服务器:centos6.8 服务器oracle版本:oracle 11g R2 64位,字符集是ZHS32utf8。 客户端:navicat 12x64 windows8.1x64 问题分析 当在windows客户端使用sqlplus或navicat时如果数据库中文显示“????” 这种情况是在客户端与服务器端字符集不一致时,从客户端输入了汉字信息。输入的这些信息即便是把客户端字符集更改正确,也无法显示汉字。 解决方法:退出sqlplus,设置相应的环境变量NLS_LANG linux: text 1 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" windows: 出现问题 此时。系统cmd命令行使用sqlplus已经正常显示中文,但是navicat中依旧是???? 图为cmd命令行访问sqlplus客户端查询 图为navicat f6弹出的sqlplus客户端 原因是因为Navicat Premium默认自带的instant client,但是其是base lite版本的(Basic Lite: Basic 的精简版本,其中仅带有英文错误消息和 Unicode、ASCII 以及西欧字符集支持),不支持中文字符集,而本文中的服务器端oracle恰好是中文字符集。自带版本不支持。此处需要去oracle官网下载相对应的版本。 http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html 将下载的文件解压覆盖navicat中的instantclient目录里的文件。 此时连接oracle实例提示如下信息 尽管我们下载了64位的版本。却提示如图信息。这是因为Navicat仅支持32位的,因此还需下载一个32位的客户端。替换到instantclient目录中 替换完成后连接实例。f6使用sqlplus查询发现中文已经正常显示

jenkins github tag使用方式

jenkins github tag 测试项目地址:GitHub - go-redis\redis: Type-safe Redis client for Golang 插件下载地址:[git-parameter](http:\updates.jenkins-ci.org\download\plugins\git-parameter) pt-online-schema-change Jenkins中配置gradle项目的坑 - doctorq - CSDN博客

详解haproxy

haproxy 介绍 haproxy是一个开源的、高性能的基于TCP和HTTP应用代理的高可用的、负载均衡服务软件,它支持双机热备、高可用、负载均衡、虚拟主机、基于TCP和HTTP的应用代理、图形界面查看信息等功能。其配置简单、维护方便,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,haproxy会自动的将该故障服务器摘除,当故障的服务器恢复后,haproxy还会自动将该服务器自动加入进来提供服务。 LVS/NGINX对比 haproxy 特别适用于那些高负载、访问量很大,但又需要会话保持及七层应用代理的业务应用。haproxy运行在今天的普通的服务器硬件上,几乎不需要进行任何的优化就可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单、轻松、安全的整合到各种己有的网站架构中,同时,haproxy的代理模式,可以使得所有应用服务器不会暴露到公共网络上,即后面的节点服务器不需要公网IP地址。 从1.3版本起,haproxy软件引入了frontend,backend的功能,frontend (ad规则匹配)可以让运维管理人员根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend(这个是事先定义好的多个server pools,等待前端把请求转过来的服务器组)。通过frontend和backend,我们可以很容易的买现haproxy的各种7层应用代理功能。 haproxy代理模式 haproxy支持两种主要代理模式: 1、基于4层的tcp应用代理(例如:可用于邮件服务、内部协议通信服务器、MySQL、HTTPS服务等)。 2、基于7层的http代理。在4层tcp代理模式下,haproxy仅在客户端和服务器之间进行流量转发。但是在7层http代理模式下,haproxy会分析应用层协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求(request)或者回应(response)里指定内容来控制协议。 官方网站:www.haproxy.org haproxy 解决方案拓扑图 haproxy L4负载均衡应用架构拓扑 haproxy软件的四层tcp应用代理非常优秀,且配置非常简单、方便,比LVS和Nginx的配置要简单很多,首先,配置haproxy不需要在RS端做任何特殊配置 (只要对应服务开启就OK)就可以实现应用代理,其次,haproxy的配置语法和增加虚拟主机功能等也比lvs/nginx简单。并且和商业版的NS (Netscaler)、F5, A10等负载均衡硬件的使用方法和在架构中的位置一模一样。下面是haproxy的Layer4层应用代理的拓扑结构图: 说明:由于haproxy软件采用的是类NAT模式(本质不同)的应用代理,数据包来去都会经过haproxy,因此,在流量特别大的情况下(门户级别的流量),其效率和性能不如LVS的DR模式负载均衡。 在一般的中小型公司,建议采用haproxy做负载均衡,而不要使用LVS或Nginx。为什么强调中小型公司呢?换句话说,千万PV级别以下直接使用haproxy做负载均衡,会让我们负责维护的运维管理人员配置简单、快速、维护方便,出问题好排查。 haproxy L7负载均衡应用架构拓扑 haproxy软件的最大优势在于其7层的根据URL请求头应用过滤的功能以及sesson会话功能,在门户网站的高并发生产架构中,haproxy软件一般用在4层LVS负载均衡软件的下一层,或者像haproxy官方推荐的也可以挂在硬件负载均衡althon, NS, F5, A10下使用,其表现非常好。从2009年起taobao,京东商城的业务也大面积使用了haproxy作为7层CACHE应用代理。 安装haproxy 模拟真实环境 搭建合适的模拟环境是一个人学习能力的重要体现。例如:人类第一次上太空也没有真正的环境,但是想去太空就是要自己动手去搭建逼真的模拟环境。实验多了就是经验,自然就有解除生产环境的机会了。 名称 接口 IP 用途 MASTER eth0 10.0.0.7 外网管理IP用于WAN数据转发 eth1 172.16.1.7 内网管理IP,用于LAN数据转发 eth2 10.0.10.7 用于服务器间心跳连接(直连) VIP 10.0.0.17 用于提供应用程序A挂载服务 BACKUP eth0 10.0.0.8 外网管理IP,用于WAN数据转发 eth1 172.16.1.8 内网管理IP,用于LAN数据转发 eth2 10.0.10.8 用于服务器间心跳连接(直连) VIP 10.0.0.8 用于提供应用程序B挂载服务 下载安装haproxy 下载地址:http://www.haproxy.org/download/ 文档地址:http://www.haproxy.org/download/1.7/doc/configuration.txt 编译haproxy bash 1 2 3 4 make TARGET=linux2628 ARCH=x86_64 # <==64位编译配置 make TARGET=linux2628 ARCH=i386 # <==32位编译配置 make PREFIX=/app/haproxy-1....

ch08 - MySQL存储引擎

什么是存储引擎 在经清楚什么是存储引擎之前,我们先来个比喻,我们都知道录制一个视频文件,可以转换成不同的格式如mp4 avi wmv等,而存在我们电脑的磁盘上也会存在于不同类型的文件系统中如windows里常见的ntfs fat32,存在于linux常见的ext3 ext4 xfs,但是,给我们或者用户看到实际视频内容都是一样的。直观区别是,占用系统的空间大小与清晰程度可能不一样。 那么数据库表里的数据存储在数据库里及磁盘上和上述的视频格式及存储磁盘文件系统格式特征类似,也有很多中存储方式。 但是,对于用户和应用程序来说同样一张表的数据,无论用什么引擎来存储,用户看到的数据都是一样的。不同的引擎存储,引擎功能,占用的空间大小,读取性能等可能有区别。 MySQL最常用的存储引擎为:MyISAM和InnoDB。全文索引:目前MySQL5.5版本,myisam和inondb都已经支持。 MySQL存储引擎的架构 MySQL的存储引擎是MySQL数据库的重要组成部分,MySQL常用的表的引擎为MyISAM和InnoDB两种。MySQL的每种存储引擎在MySQL里是通过插件的方式使用的,MySQL可以同时支持多种存储引擎。下面是MySQL存储引擎体系结构简图: MyISAM引擎 MyISAM引擎是MySQL关系数据库管理系统的默认存储引擎(MySQL 5.5.5以前)。这种MySQL表存储结构从旧的ISAM代码扩展出许多有用的功能。在新版本MySQL中,InnoDB引擎由于其对事务参照完整性,以及更高的并发性等优点开始逐步的取代MyISAM引擎, “InnoDB is the default storage engine as of MySQL 5.5.5。MyISAM: The MySQL storage engine that is used the most in Web,data warehousing,and other application environments.MyISAM is supported in all MySQL configurations,an is the default storage engine prior to MySQL 5.5.5。” 查看MySQL5.1数据库默认引擎 bash 1 2 3 4 5 6 7 mysql> show create table test1\G *************************** 1....

ch07 - 实现和MySQL非交互式对话

利用 mysql -e 参数查看 mysql 数据 bash 1 2 3 4 5 6 7 8 $ mysql -uroot -p111 -e 'use test;show tables;' +------------------------------+ | Tables_in_test | +------------------------------+ | 33hao_activity | | 33hao_activity_detail | | 33hao_address | +------------------------------+ 利用 mysql -e 参数查看SQL线程执行状态 bash 1 2 $ mysql -uroot -p111 -e 'show processlist;' kill 12; 查看完整的线程状态,此参数才查看慢查询语句是非常有用 解决方法: bash 1 2 3 4 root@localhost [test]>show variables like '%_timeout%'; # 设置 set global wait_timeout=60; set global interactive_timeout=60; 在配置文件里修改 text 1 2 set global wait_timeout=60; set global interactive_timeout=60; # 此参数设置后wait_timeout自动生效 其他方法 (1) PHP程序中,不适用持久链接,即 mysql_connect 而不是 pconnect(java调整连接池)...

ch06 - MySQL主从复制

Linux文件数据同步方案 在讲解MySQL主从复制之前,先回忆下,前面将结果的普通文件(磁盘上的文件)的同步方法。 文件级别的异机同步方案 scp/sftp/nc命令可以实现远程数据同步。 搭建ftp/http/svn/nfs服务器,然后在客户端上也可以把数据同步到服务器。 搭建samba文件共享服务,然后在客户端上也可以把数据同步到服务器。 利用rsync/csync2/union等均可以实现数据同步。 提示:union可实现双向同步,csync2可实现多机同步。 ​ 以上文件同步方式如果结合定时任务或innotify sersync等功能,可以实现定时以及实时的数据同步。 扩展思想:文件级别复制也可以利用mysql,mongodb等软件作为容器实现。 扩展思想:程序向两个服务器同时写数据,双写就是一个同步机制。 ​ 特点:简单、方便、效率和文件系统级别要差一些,但是被同步的节点可以提供访问。 软件的自身同步机制(mysql、oracle、mongdb、ttserver、redis…..),文件放到数据库,听不到从库,再把文件拿出来。 文件系统级别的异机同步方案 drbd基于文件系统同步,相当于网络RAID1,可以同步几乎任何业务数据。 mysql数据的官方推荐drbd同步数据,所有单点服务例如:NFS,MFS(DRBD),MySQL等度可以用drbd做复制,效率很高,缺点:备机服务不可用。 数据库同步方案 自身同步机制:mysql relication,(逻辑的SQL重写)物理复制方法drbd(丛库不提供读写)。 第三方drbd MySQL主从复制概述 MySQL的主从复制方案,和上述文件及文件系统级别同步是类似的,都是数据的传输。只不过MySQL无需借助第三方工具,而是其自带的同步复制功能,另外一点,MySQL的主从复制并不是磁盘上文件直接同步,而是逻辑的binlog日志绒布到本地在应用执行的过程 MySQL主从复制是一个异步的复制过程(虽然一般情况下感觉是实时的),数据将从一个MySQL数据库(Master)复制到另一个数据库(Slave),在 mater 与 Slave之 间实现整个主从复制的过程是由三个线程参与完成的。其中有两个线程( SQL和IO )在Slave端,另外一个线程(I/O)在Master端。 要实现MySQL的主从复制,首先必须打开 Master 端的 binlog 记录功能,否则就无法实现。因为整个复制过程实际上就是Slave从Master端获取Binlog日志,然后在Slave上以相同顺序逐自获取 binlog 日志中所记录的各种SQL操作。 要打开MySQL的binlog记录功能,可能通过在MySQL的配置文件 my.cnf 中的 mysqld 模块( [mysqld] )标识后的参数部分增加 “log-bin” 参数选项来实现,具体信息如下: bash 1 2 [mysqld] log-bin = /data/3307/mysql-bin 提示:log-bin需放置在[mysqld]标识后,否则会导致配置复制不成功。 MySQL数据可支持单向、双向、链式级联等不同场景的复制。在复制过程中,一台服务器充当主服务器(Master),而一个或多个其他的服务器充当从服务器(Slave)。 复制可以使单向:M==>S,也可以是双向 M<==>M,当然也可以多M环装同步等。 如果设置了链式级联复制,那么,从(slave)服务器本身除了充当从服务器外,也会同时充当其下面从服务器的主服务器。链式级联复制类似 A==>B==>C==>D 的复制形式。 下面是MySQL各种同步架构的逻辑图。 单向主从复制逻辑图,次架构只能在Master端进行数据写入。官方给出Slave最多9,工作中不要超过5 双向主主同步逻辑图,次架构可以再Master1端或Master2端进行数据写入 线性级联单向双主同步逻辑图,此架构只能在Master1端进行数据写入 缺陷:1 ==>3 之间会存在延迟 环装级联单向多主同步逻辑图,任意一个点都可以写入数据。...

ch04 - MySQL数据库服务日志类型

错误日志 error log MySQL错误日志记录MySQL服务进程mysqld在启动/关闭或运行过程中遇到的错误信息 错误日志配置 在配置文件中调整方法,当然可以在启动时加入启动参数 bash 1 2 [mysqld_safe] log-error=/data/3306/mysql_3306.err 启动MySQL命令里加入 bash 1 2 3 4 5 6 7 8 9 10 /app/mysql/bin/mysqld_safe \ --defaults-file=/data/3306/my.cnf \ --log-error=/data/3306/mysql_3306.err MariaDB> show variables like "%log_error%"; +-------------------+---------------------------+ | Variable_name | Value | +-------------------+---------------------------+ | log_error | /data/3306/mysql_3306.err | +-------------------+---------------------------+ 遇到数据库启动不了 先把日志文件备份并清空启动一下mysql服务后再查看日志文件,看报有什么错误 bash 1 2 3 InnoDB: The error means mysqld does not have the access rights to InnoDB: the directory 然后查看mysql3306目录下文件权限 普通查询日志 general query log 普通查询日志 (general query log):记录客户端链接信息和执行的SQL语句信息。...

ch02 - MySQL安全相关配置

设置MySQL管理员账号密码 在安装MySQL数据库后,MySQL管理员的账号root密码默认为空,极不安全 启动修改丢失的MySQL单实例root密码方法 停止MySQL bash 1 /etc/init.d/mysqld stop 使用 –skip-grant-tables启动mysql,忽略授权登陆验证 bash 1 2 3 4 5 6 7 8 9 10 11 # 单实例 /app/mysql/bin/mysqld_safe --skip-grant-tables --user=mysql # 多实例 /app/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf --user=mysql --skip-grant-tables & # 登录时空密码 $ mysql -S /data/3306/mysql.sock ... ... Welcome to the MySQL monitor. Commands end with ; or \g. # 在启动时加 --skip-grant-tables参数,表示忽略授权 修改root密码为新密码 bash 1 2 3 4 5 6 mysql> set password=password('123'); ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement mysql> update mysql....

ch05 - MySQL字符集相关配置

MySQL数据库字符集介绍 简单来说,字符集就是一套文字符号及其编码、比较规则的集合,第一个计算机字符集ASCII! MySQL数据库字符集包括字符集(character)和校对规则(collation)两个概念。其中,字符集是用来定义MySQL数据字符串的存储方式。而校对规则则是定义比较字符串的方式。 上面命令查看已建立的test数据库语句中 CHARACTER SET latin1即为数据库字符集,而COLLATE latin1_swedish_ci为校对规则,更多内容 见mysql手册第10章。 编译MySQL时,指定字符集了,这样以后建库的时候就直接create database test; 二进制安装MySQL,并没有指定字符集,这时字符集默认latin1,此时,需要建立UTF8字符集的库,就需要指定UTF8字符集建库。 sql 1 create database test1 default character set utf8 default collate=utf8_general_ci; MySQL常见字符集介绍 在互联网环境中,使用MySQL时常用的字符集有: 常用字符集 一个汉字长度(字节) 说明 GBK 2 不是国际标准,对中文环境支持很好。 UTF8 3 中英文混合环境,建议使用此字符集,用的比较多的。 latin1 1 MySQL的默认字符集 utf8mb4 4 UTF8 Unicode,移动互联网 MySQL如何选择合适的字符集? 如果处理各种各样的文字,发布到不同语言的国家地区,应选Unicode字符集,对MySQL来说就是utf-8(每个汉字三个字节),如果应用需处理英文,仅有少量汉字的utf-8更好。 如果只需支持中文,并且数据两很大,性能要求也高,可选GBK(定长 每个汉字占双字节,英文也占双字节),如果需大量运算,比较排序等,定长字符集更快,性能 处理移动互联网业务,可能需要使用utf8mb4字符集。 如无特别需求,选择UTF8 查看MySQL字符集 查看当前MySQL系统支持的字符集 MySQL可支持多种字符集,同一台机器,库或表的不同字段都可以指定不同的字符集。 sql 1 2 3 4 5 6 7 8 9 mysql> show character set; +----------+-------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-------------------------+---------------------+--------+ | latin1 | cp1252 West European | latin1_swedish_ci | 1 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | | utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 | +----------+-------------------------+---------------------+--------+ 查看MySQL当前的字符集设置情况...

ch03 - MySQL的备份与恢复

备份数据库的意义 运维工作到底是什么工作,到底是做什么? 运维工作简单的概括就两件事: 一是保护公司的数据;二是网站7*24小时提供服务。 那么对数据丢失一部分和网站7*24小时提供服务那个更重要呢? 都很重要,只是说相比哪个更为重要?这个具体要看业务个公司。例如:银行、金融行业,数据是最重要的,一条都不能丢,可能宕机停机影响就没那么大。百度搜索,腾讯qq聊天记录丢失了几万条数据,都不算啥。 对于数据来讲,数据最核心的就是数据库数据。 备份单个数据库练习多种参数的使用 MySQL数据库自带了一个很好用的备份命令,就是mysqldump,它的基本使用如下: sql 1 mysqldump -u UserName -p PassWord dbName > backName.sql 备份库 sql 1 mysqldump -S /data/3306/mysql.sock -uroot -p test>mysql.sql 检查备份结果 sql 1 2 3 4 5 6 7 8 9 10 11 12 $ egrep -v "#|\*|--|^$" ./mysql.sql DROP TABLE IF EXISTS `test1`; CREATE TABLE `test1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `num1` varchar(20) NOT NULL, `num2` varchar(20) NOT NULL, `num3` varchar(20) NOT NULL, `num4` int(11) NOT NULL DEFAULT '0' COMMENT 'test1', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2000001 DEFAULT CHARSET=utf8; LOCK TABLES `test1` WRITE; INSERT INTO `test1` VALUES (1,'1455577','9779520','4530868',0), 注:因为导出时的格式没有加字符集,一般恢复到数据库里会正常,只是系统外查看不正常而已。另外,insert是批量插入的方式,这样在恢复时效率很高。...

ch01 - Linux下安装Mysql

MySQL数据库简介 编程语言排名:http://www.tiobe.com/tiobe-index 数据库排名:http://db-engines.com/en/ranking MySQL数据库分类与版本升级 MySQL数据库官网为http://www.mysql.com,其发布的MySQL版本采用双授权政策,和大多数开源产品的路线一样,分别为社区版和商业版,而这两个版本又各自分四个版本依次发布,这四个版本为Alpha版、Beta版、RC版和GA版(GA正式发布版) MySQL数据库商业版和社区版的区别 在前面的内容已经阐述过了,MySQL的版本发布采用双授权政策,即分为社区版和商业版,而这两个版本又各自分四个版本依次发布:Alpha版、Beta版、RC版和GA版(GA正式发布版) Alpha版 Alpha版一般只在开发的公司内部运行,不对外公开。主要死开发者自己对产品进行测试,检查产品是否存在缺陷、错误,验证产品功能与说明书、用户手册是否一致。MySQL是属于开放源代码的开源产品,因此需要世界各地开发者、爱好者和用户参与软件的开发测试和手册编写等工作。所以会对外公布此版本的源码和产品,方便任何人可以参与开发测试工作,甚至编写与修改用户手册。 Beta版 Beta版一般是完成功能的开发和所有的测试工作时候的产品,不会存在较大的功能或性能BUG,并且邀请或提供给公户体验与测试,以便更全面地测试软件的不足之处或存在的问题。 RC版 RC版属于生产环境发布之前的一个小版本或称候选版,是根据Beta测试结果,收集到的BUG或缺陷之处等收集到信息,进行修复和完善之后的新一版本 GA版 GA版是软件产品正式发布的版本,也称生产版本的产品。一般情况下,企业生产环境都会选择GA版本的MySQL软件,用于真实的生产环境中。偶尔有个别的大型企业会追求新功能驱动而牺牲稳定性使用其他版本,但这个是个例。 MySQL四中发布版本选择说明 MySQL AB官方网站会把五种数据库版本都提供下载,主要是MySQL数据库属于开发源代码的数据库产品,鼓励全球的技术爱好者参与研发、测试、文档编写和经验分享,甚至包过产品发展规划,对于Development版本、Alpha版本和Beta版本是绝对不允许使用在任何生产环境,毕竟这是一个GA版本之前,也即生产版本发布之前的一个小版本。另外,对MySQL数据库GA版本,也是需要慎重选择,开源社区产品毕竟不是经过严格的测试工序完成的产品,是全球开源技术人员的资源完成的,会存在比商业产品稳定性弱的缺陷。更严格的选择见后文。 MySQL产品路线 MySQL产品路线变更历史背景 早起MySQL也是遵循版本号逐渐增加的方式发展的,格式例如:mysql-x.xx.xx.tar.gz,例如DBA都非常熟悉的生产场景版本:4.1.7、5.0.56等。 近几年,为了提高MySQL产品的竞争优势、以及提高性能、降低开发维护成本等原因,同时,更方便企业用户更精准的选择适合的版本产品用于自己的企业生产环境中。 MySQL在发展到5.1系列版本之后,重新规划为3条产品线 5.0.xx到5.1.xx产品线介绍 第一条产品线:5.0.xx及升级到5.1.xx的产品系列,这条产品线继续完善与改进其用户体验和性能,同时增加新功能,这条路线可以说是MySQL早起产品的延续系列,这一系列的产品发布情况及历史版本如下: MySQL 5.1是当前稳定(产品质量)发布系列。只针对漏洞修复重新发布;没有增加会影响稳定性的新功能。 MySQL 5.1:Previous stable(production-quality) release MySQL 5.0是前一稳定(产品质量)发布系列。只针对严重漏洞修复和安全修复重新发布;没有增加会影响该系列的重要功能。 MySQL 5.0:Old stable release nearing the end of the product lifecycle MySQL 4.0和3.23是旧的稳定(产品质量)发布系列。该版本不再使用,新的发布只用来修复特别严重的漏洞(以前的安全问题)。 5.4.xx开始到5.7.xx产品线系列介绍 为了更好的整合MySQL AB公司社区和第三方公司开发的新存储引擎,以及吸收新的实现算法等,从而更好的支持SMP架构,提高性能而做了大量的代码重构。版本号为从5.4.xx开始,目前发展到了5.6.x 主流:互联网公司用mysql5.5,逐步过渡到5.6。 6.0.xx-7.1.xx产品线系列介绍 第三条产品线:为了更好的推广MySQL Cluster版本,以及提高MySQL Cluster的性能和稳定性,以及功能改进和增加,以及改动mysql基础功能,使其对Cluster存储引擎提供更有效地支持与优化。版本号为6.0.xx开发,目前发展到7.1.xx MySQL数据库软件命名介绍 MySQL数据库软件的名字是由3个数字和一个后缀组成的版本号。例如,像 mysql-5.0.56.tar.gz 的版本号这样解释: 第一个数字(5)为主版本号,描述了文件格式。所有版本5发行都有相同文件格式。 第二个数字(0)为发行级别,主版本号和发行级别组合到一起便构成了发行序列号。 第三个数字(56 为在此发行系列的版本号,随每个新分发版本递增。通常你需要已经选择的发行(release)的最新版本。 每次更新后,版本字符串的最后一个数字递增。如果相对于前一个版本增加了新功能或有微小的不兼容性,字符串的第二个数字递增。如果文件格式改变,第一个数字递增。 后缀显示发现的稳定性级别。通过一系列后缀显示如何改进稳定性。可能的后缀有: alpha 表明发行包含大量未被彻底测试的新代码。已知的缺陷应该在新闻小节被记录。请参见附录D:MySQL变更史。在大多数alpha版本中也有新的命令和扩展。alpha版本也可能有主要代码更改等开发。但我们在发布前一定对其进行测试。 beta 意味着该版本功能是完整的,并且所有的新代码被测试了,没有增加重要的新特征,应该没有已知的缺陷。当alpha版本至少一个月没有出现报导的致命漏洞,并且没有计划增加导致已经实施的功能不稳定的新功能时,版本则从alpha版变为beta版。在以后的beta版、发布版或产品发布中,所有API、外部可视结构和SQL命令列均不再更改。 rc 是发布代表;是一个发行了一段时间的beta版本,看起来应该运行正常。只增加了很小的修复。(发布代表即以前所称的gamma 版) 如果没有后缀,这意味着该版本已经在很多地方运行一段时间了,而且没有非平台特定的缺陷报告。只增加了关键漏洞修复修复。这就是我们称为一个产品(稳定)或“通用”版本的东西。...

同步工具rsync使用指南

Overview 官方网站:https://www.samba.org/ftp/rsync/rsync.html rsync特性 rsync类似于scp的功能 rsync还可以在本地的不同分区和目录之间进行全量及增量的复制数据,类似cp又优于cp rsync可以实现文件的删除 一个rsync相当于 scp cp rm,但是还优于他们每一个 支持拷贝特殊文件如链接文件,设备等 可以有排除指定文件或目录的权限、时间、软硬链接、属主、组所有属性均不改变-p 可以有排除指定文件或目录的功能,相当于打包命令tar的排除功能 可以实现增量同步,即只同步发生变化的数据,因此数据传输效率很高tar。 可以使用rcp rsh ssh等方式来配合传输文件(rsync本身不对数据加密) 可以通过socket(进程方式)传输文件和数据 支持匿名的或认证(无须系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像 安装rsync linux上安装rsync Platform Command Debian/Ubuntu & Mint sudo apt-get install rsync Arch Linux pacman -S rsync Gentoo emerge sys-apps/rsync Fedora/CentOS/RHEL and Rocky Linux/AlmaLinux sudo yum install rsync openSUSE sudo zypper install rsync windows安装rsync 官网下载cwRsync的服务端和客户端软件,cwRsync官网为:www.itefix.net/cwrsync Notes:由于伟大的 people‘s leader president xi 网站已经无法中国地区访问(点击测试),伟大的俄罗斯因为俄乌战争,也不对俄罗斯访问了(俄乌战争开始后,西方大量学术网站禁止了俄罗斯地区的访问) 所以目前只能下载到一些镜像站上4.x版本,截止到2022年11月的6.2.7相差很多,windows客户端版本可以通过chocolate 安装 rsync使用说明 rsync命令语法 选项 注释说明 rsync rsync同步命令 option 为同步时的选项参数 src 为源,及待拷贝的分区、文件或目录等 dest 为目标分区、文件或目录等 rsync参数说明...