首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

docker1.13.1的安装与卸载及mysql5.5安装实例

2023-11-12 来源:花图问答

docker中国官方地址:https://www.docker-cn.com/

您可以使用以下命令直接从该镜像加速地址进行拉取:

$ docker pull registry.docker-cn.com/myname/myrepo:mytag例如:$ docker pull registry.docker-cn.com/library/mysql:5.5docker镜像搜索界面: https://hub.docker.com/

一、docker安装与启动操作

1、检查内核版本,必须是3.10及以上[root@localhost ~]# uname -r3.10.0-327.el7.x86_642、安装dockeryum install docker下载过程中需要输入y确认安装3、启动docker[root@localhost ~]# systemctl start docker[root@localhost ~]# docker -v --查看版本Docker version 1.13.1, build 94f4240/1.13.14、开机启动docker[root@localhost ~]# systemctl enable dockerCreated symlink from /etc/systemd/system/multiuser.target.wants/docker.service to /usr/lib/systemd/system/docker.service.5、停止dockersystemctl stop docker6、重启docker服务systemctl restart docker二、docker的卸载

1.查看docker安装包的命令 - rpm -qa|grep docker - yum list installed|grep docker方式一:[root@localhost ~]# rpm -qa|grep dockerdocker-1.13.1-63.git94f4240.el7.centos.x86_64docker-client-1.13.1-63.git94f4240.el7.centos.x86_64docker-common-1.13.1-63.git94f4240.el7.centos.x86_64方式二:[root@localhost ~]# yum list installed|grep dockerdocker.x86_64 2:1.13.1-63.git94f4240.el7.centos @extras docker-client.x86_64 2:1.13.1-63.git94f4240.el7.centos @extras docker-common.x86_64 2:1.13.1-63.git94f4240.el7.centos @extras

2.docker 卸载yum –y remove deleteNamedeleteName:需要删除的安装包名称三、docker常用命令

1. docker search mysql 这条命令表示查询mysql的所有镜像信息 2. docker pull mysql 表示从官方下载默认版本的mysql,latest docker pull mysql:5.5 表示下载mysql版本5.5的 3. docker images 查看当前本地的所有镜像 4. docker rmi image-id 删除制定镜像,image-id是每个镜像独有的id 5. docker rum ...... 根据镜像启动容器 6. docker ps 查看运行中的容器 7. docker ps -a 查看所有容器 8. docker start 容器id 启动容器 9. docker stop 容器id 停止容器10. docker rm 容器id 删除容器11. service firewalld status 查看防火墙状态12. service firewalld stop 关闭防火墙四、安装mysql5.5

1.下载mysql 镜像[root@localhost ~]# docker pull mysql:5.5Trying to pull repository docker.io/library/mysql ...

2.查看本地镜像[root@localhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/mysql 5.5 f13c4be36ec5 3 weeks ago 205 MB

3.根据mysql镜像启动容器[root@localhost ~]# docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.570fb9f7d1ce4d95c6b640a559a099e107678a552340fab49b6539fd69296376d

命令详细介绍: docker run:启动容器 -p 3306:3306:映射端口号 --name mysql01:启动容器的名称 -e MYSQL_ROOT_PASSWORD=root:设置mysql密码 -d mysql:5.5 :那个镜像4.查看刚才建立的容器1

技术图片5.容器操作1

技术图片6.docker下命令行连接mysql

进入本地cmd,70fb9f7d1ce4 :mysql的容器id[root@localhost ~]# docker exec -it 70fb9f7d1ce4 bashroot@70fb9f7d1ce4:/#

进入mysqlroot@70fb9f7d1ce4:/# mysql -uroot -p -h localhostEnter password: 技术图片

mysql本地进入来源于:https://blog.csdn.net/stemq/article/details/52934795--------------------- 作者:风zi 来源:CSDN 原文:https://blog.csdn.net/qq_35241080/article/details/80495718 版权声明:本文为博主原创文章,转载请附上博文链接!

docker1.13.1的安装与卸载及mysql5.5安装实例

标签:systemctl   link   重启   技术   latest   tor   详细介绍   开机   ras   

小编还为您整理了以下内容,可能对您也有帮助:

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES),是数据库错误造成的,解决方法如下:

1、首先需要更改root的权限远程的访问的权限,进行进入到自己数据库之后,进入mysql数据库中:use mysql。

2、进行执行update user set host='%' where user='root'  的命令进行执行。

3、执行了相关的命令之后,还是需要进行执行的flush privileges的命令。

4、还需要进行修改的是在etc/sysconfig/selinux进行编辑SELINUX=disabled中。

5、设置完成之后还是需要进行重启Linux,在访问之后,不再显示错误的内容。

如何卸载重装docker

1,就是你在安装这个软件以后,这个软件就自己带有一个卸载的程序,你只要点击:开始---程序---找到这个程序----上面就会有这个程序的卸载程序。

2,就是通过“添加与删除”来卸载,这个程序一般的WINDOS,自己都会带这个程序,你点:开始--控制面板---添加与删除----找到这个要卸载的程序---点删除就OK了。

3,就是利用第三方软件。我用腾讯电脑管家举例(免费安全软件,杀毒+管理2合1)。打开腾讯电脑管家——工具箱——软件卸载。

Docker卸载过程

对一台已经安装了docker的机器,如果我们要卸载掉他的话,可以通过rpm命令删除掉。
1)这里用到一台已经装了docker的机器,首先查看一下他的安装情况:
执行rpm -qa | grep docker,可以看到如下信息

2)在删除之前,我们可以通过docker ps命令来看一下有哪些容器处于运行状态,如果有的话通过docker stop 容器ID可用停掉容器,如果以CTRL+P+Q的方式退出容器的话,需要先docker attach 容器ID来先进入容器。
还可以通过docker rm -f 容器ID命令将容器直接删除掉。

3)如果没有处于运行状态的容器,可用跳过上一步,直接去删除docker,这里我们分别指向rpm -e来删除这些软件,删除的时候可能提示依赖包错误,我们需要加上--nodeps,如下图:

这里给出一个删除命令的示例作为参考

4)执行完上面的操作后docker,如果还没有卸载完全,需要通过yum remove将相关的包remove掉
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-selinux
docker-engine-selinux
docker-engine

5)最后去docker相关的一些目录,将该目录强制删除掉

Docker卸载过程

对一台已经安装了docker的机器,如果我们要卸载掉他的话,可以通过rpm命令删除掉。
1)这里用到一台已经装了docker的机器,首先查看一下他的安装情况:
执行rpm -qa | grep docker,可以看到如下信息

2)在删除之前,我们可以通过docker ps命令来看一下有哪些容器处于运行状态,如果有的话通过docker stop 容器ID可用停掉容器,如果以CTRL+P+Q的方式退出容器的话,需要先docker attach 容器ID来先进入容器。
还可以通过docker rm -f 容器ID命令将容器直接删除掉。

3)如果没有处于运行状态的容器,可用跳过上一步,直接去删除docker,这里我们分别指向rpm -e来删除这些软件,删除的时候可能提示依赖包错误,我们需要加上--nodeps,如下图:

这里给出一个删除命令的示例作为参考

4)执行完上面的操作后docker,如果还没有卸载完全,需要通过yum remove将相关的包remove掉
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-selinux
docker-engine-selinux
docker-engine

5)最后去docker相关的一些目录,将该目录强制删除掉

终于有人把Docker讲清楚了,Docker入门教程,原来这么简单...

Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。

Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker是一个用于开发,交付和运行应用程序的开放平台。Docker能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,可以管理应用程序相同的方式来管理基础架构。通过利用Docker的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。

终于有人把Docker讲清楚了,Docker入门教程,原来这么简单...

Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。

Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker是一个用于开发,交付和运行应用程序的开放平台。Docker能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,可以管理应用程序相同的方式来管理基础架构。通过利用Docker的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。

以免霸屏的指令是什么

为什么要学习Linux,因为Linux很多都是开源免费的,并且Linux是非常稳定的,我们开发出来的项目一般都是在服务器中的,我们操作服务器中的程序有两种方式,要么你就去服务器跟前,这种明显是不现实的,所以在实际情况中我们都是在电脑安装一个远程登陆软件,通过这个软件来连接远程的服务器,这样我们就可以在本地的电脑操作远程服务器了;Linux就提供了一种可靠的远程连接方式;

Linux的特点:免费,开源,多用户(同一时刻可以多个用户同时登陆和执行同一个Linux系统),多任务;

Linux的安装
安装
1.安装VMWare: 下载对应的软件,一直下一步就行;

2.安装centOS镜像:

①点击创建新的虚拟机

②然后按照虚拟机向导安装镜像,注意选择自己安装对应的镜像版本

③在CD/DVD的配置项中配置镜像的路径;(内存可以根据自己需求设置)

然后一直下一步就行;

④第一次启动的时候比较慢,因为需要安装一些东西;然后按照需求配置自己需要的就行;

不过设置的root密码要记住!第一次安装完成后需要重新启动!!!

⑤配置网卡驱动:

然后重新启动!

然后再使用 ip addr 查看ip地址是否可以显示了;

使用finalshell连接虚拟机
⑥使用远程连接软件连接本地的Linux来进行操作;

这里我们使用finalshell,自己下载安装这个finalshell就行;

下面我们来演示一下如何使用finalshell来连接这个Linux: 要先知道我们要连接的服务器(Linux或者是云服务器的IP地址)的ip地址才能去连接;

点击最左上角的文件夹图形,然后点击左边白色的文件夹,会弹窗出:然后点击SSH连接

出现下面的窗口:这个主机要写你要连接的服务器的ip地址,这里我们填自己这个虚拟机的ip地址就行(在本机的虚拟机使用 ip addr 查看自己的虚拟机的IP地址);

了解一下Linux的目录结构(不需要记忆)

Java中流传一句话:万物皆对象!在Linux中同样流传一句话:万物皆文件!
Linux中常用的命令(重点)
Linux命令初体验--几个常用命令
序号命令对应英文作用
1lslist查看当前目录下的内容
2pwdprint work directory查看当前目录所在目录
3cd 目录名change directory切换目录
4touch 文件名touch如果文件不存在,就新创建文件
5mkdir 目录名make directory创建目录
6rm 文件名remove删除指定文件
注意事项:

在执行Linux命令的时候,提示信息如果显示为乱码,这是由于编码问题导致的,只需要修改Linux的编码就行即可,命令如下:

下面命名表示:把'LANG="en_UTF-8"'追加到后面的文件中

echo 'LANG="en_UTF-8"' >> /etc/profile

source /etc/profile #重新加载配置文件,新添进去的配置才可以生效
登录后复制
使用Linux的一些小技巧:非常使用,和经常使用得到;

tab键自动补全

连续两次Tab键,给出操作提示

使用上下箭头快速调出曾经使用过的命令

使用clear命令或者是ctrl+l 实现快速清屏

Linux命令格式
command [-options][parameter]
登录后复制
说明:

command:命令名

[-options]:选项,可以用来对命令进行控制,也可以进行省略

[parameter]:传给命令的参数,可以是零个,一个或者是多个

注意:[] 代表可选

命令名 ,选项 ,参数之间使用空格进行分隔

案例演示: 使用 ls 与 使用 ls -l 的区别

paramter是多个的时候:比如同时创建多个文件

强制删除文件:

强制删除一个文件:rm -f 文件名1

强制删除一批文件:rm -f 文件名1 文件名2 文件名3

显示指定目录下的内容 ls和ll
作用:显示指定目录下的内容

语法:ls [-al] [dir]

说明:

-a 显示所有文件及目录 (.开头的隐藏文件也会列出, 在Linux中隐藏文件是以.开头的)

-l 除文件名称外,同时将文件类型(d表示目录,-表示文件),权限,拥有者,文件大小等信息详细列出

注意:由于我们使用ls命令是经常需要加入 -l 选项, 所以Linux为ls -l 提供了一种简单的书写方式, 即 ll

如果不指定特定的dir,那么展示的就是root目录下的所有文件;

如果指定了dir,那么展示的就是指定dir目录下的所有文件:ls -al /etc

简写: 把ls -al 进行了合并,变成了 ll

切换目录: cd
作用:用于切换当前工作目录,即进入指定目录;

语法:cd [dirName]

特殊说明:

~表示当前用户的home目录 不同用户的home目录可能不同,比如Linux中的root用户的home目录就是 /root

.表示目前所在的目录

..表示目前位置的上级目录 (用得比较频繁)

举例:

cd .. 切换到当前目录的上级目录

cd ~ 切换到用的home目录

cd /usr/local 切换到/usr/local目录

cd usr 进入到usr目录

显示文件内容:cat
作用:用于显示文件内容

语法: cat [-n] filaName

说明: -n 由1开始对所有输出行数编号

举例:cat /etc/profile 查看/etc目录下的profile文件内容

不使用-n:

使用-n:

分页查看文件:more
作用:以分页的形式显示文件内容, 使用场景,当查看的文件的内容比较多的时候,就可以使用more命令来查看,这样更加方便

语法:more fileNeme

操作说明:

回车键 向下滚动一行

空格键 向下滚动一屏

b 返回上一屏

q或者是Ctrl + c 退出more

举例:在根目录下使用命令 more /etc/profile

查看文件末尾:tail
作用:查看文件末尾的内容

语法:tail [-f] fileName

说明:动态的读取文件末尾内容并显示,通过用于日志文件的内容的输出

举例:

tail /etc/profile 显示/etc目录下的profile文件末尾10行的内容(这个10是默认的)

tail -20 /etc/profile 显示/etc目录下的profile文件末尾20行的内容

tail -f /ydl/my.log 动态的读取 /ydl目录下的my.log文件末尾内容并显示, 这个命令会让当前Linux窗口处于霸屏的状态,使用Ctrl + C 就可以停止;

创建目录:mkdir
作用:创建目录

语法:mkdir [-p] dirName

说明:

-p: 确保目录名称是存在的,不存在就创建一个。通过此选项,可以实现多层目录同时创建

(p代表parent)

举例:

mkdir it在当前目录下,创建一个名为it的子目录

mkdir -p it/javaTest 在工作的目录下的it目录中建立一个名为test的目录,若it目录不存在,则创建一个

删除目录:rmdir
作用:删除空目录

语法:rmdir [-p] dirName

说明:

-p : 当子目录被删除后使父目录为空目录的话,则一并删除

举例:

rmdir it 删除为it的空目录

rmdir -p it/java 删除it目录中名为Java的子目录,若java目录删除后it目录变为空目录,则it目录也会被删除

rmdir it* 删除以it开头的空目录

删除不为空的文件或目录 rm
作用:删除文件或者目录

语法:rm [-rf] name

说明:

-r : 将目录及目录中的所有文件(目录)逐一删除,即递归删除

-f : 无需确认,直接删除

举例:

rm -r it/ 删除名为it的目录和目录中的所有文件,删除前需要确定

rm -rf it/ 无需确认,直接删除名为it的目录和目录中所有文件

rm -rf hello.txt 无需确认,直接删除hello.txt文件 (这个删除文件的命令可以不用带r)

拷贝移动命令cp
作用:用于复制文件或者是目录

语法:cp [-r] source target

说明:

-r : 如果复制的是目录需要使用到此项,此时将复制该目录下所有的子目录和文件

举例:

cp hello.txt it/ 将hello.txt复制到it目录中

cp hello.txt ./hi.txt 将hello.txt复制到当前目录,并改名为hi.txt

cp -r it/ itjava/ 将it目录和目录下的所有文件复制到itjava目录下

cp -r it/* itjava/ 将it目录下所有文件复制到itjava目录下(目录这一层不复制,只复制目录下的内容)

移动拷贝mv
作用:为文件或者是目录进行改名,或将文件或目录移动到其他位置

语法:mv source dest

举例:

mv hello.txt hi.txt 将hello.txt改名为hi.txt

mv hi.txt it/ 将文件hi.txt移动到it目录中

mv hi.txt it/hello.txt 将hi.txt移动到it目录中,并且改名为hello.txt

mv it/ itjava/ 如果itjava目录不存在,将it目录改名为itjava

mv it/ itjava/ 如果itjava目录存在,将it目录移动到itjava目录中

打包压缩命令 tar
作用:对文件进行打包,解包,压缩,解压

语法:tar [-zcxvf] filaName[files]

包文件后缀为 .tar 表示只完成了打包,并没有压缩

包文件后缀为 .tar.gz 表示打包同时还进行了压缩

说明:

-z : z代表的是gzip , 通过gzip命令处理文件,gzip可以对文件压缩或者是解压

-c : c代表的是create, 即创建新的文件包 (打包)

-x : x代表的是extract,实现从包文件还原文件 (解包)

-v : v代表的是verbose,显示命令执行的过程

-f : f代表的是file,用于指定包文件的名称

如果不想把解压的文件包的内容放到当前目录, 加 -c /要存放的目录

第一个常用组合: -cvf

第二个常用组合:-zcvf

第三个常用组合: -xvf 解压包
第四个常用组合:-zxvf (非常常用)

文本编辑命令vi/vim
作用:vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似与windows的记事本;

语法:vi fileName

文本编辑命令vim:

作用:对文件内容进行编辑,vim其实就是一个文本编辑器;

语法:vim fileName

说明:

1.在使用vim进行编辑文件的时候,如果指定的文件存在则直接打开此文件。如果指定的文件不存在则新建文件

2.vim在进行文本编辑的时候一共分为三种模式,分别是命令模式(command mode),插入模式(insert mode)和底行模式(last line mode)。这三种模式之间可以相互切换。我们在使用vim命令的时一定要注意我们当前所处的是哪一种模式;

对于这三种模式的一些说明:

注意:命令模式下,这个gg表示的是快速将光标移动到文件开头, 这个G表示的是快速将光标移动到文件末尾;

下面的插入模式和底行模式,是不能直接进行转换的,都需要先进入到命令模式然后才能进行模式转换;

注意:必须要进入底行模式才能进行文件的保存!!!

查询命令find
作用:在指定目录下查找文件 (从指定目录中搜索指定的文件)

语法:find dirName(目录名称) -option fileName

(-option 一般是-name,表示根据指定名称来查找文件)

举例:

find . -name "*.java" 在当前目录及其子目录下查找.java结尾的文件 (-name根据文件名来进行查找)

find /it -name "*.java" 在/it目录及其子目录下查找.java结尾的文件

查找指定内容命令grep
作用:从指定文件中查找指定的文本内容(从当前或者是指定的文件中查找指定的内容)

语法:grep word fileName

注意:这个word是区分大小写的 !

举例:

grep hello helloword.java 查找 helloword.java文件中出现的hello字符串的位置

grep hello *.java 查找当前目录中所有.java结尾的文件中包含hello字符串的位置

Linux中进行软件安装
软件安装的方式:

二进制发布包的安装

软件已经针对具体平台编译打包发布,只需要解压,修改配置即可

rpm安装

软件已经安装redhat的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题

yum安装(一般推荐这种安装方式)

一种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程自动解决库依赖的问题

源码编译安装(Java源代码安装)

软件以源码工程的形式发布,需要自己编译打包

在Linux中安装jdk
安装jdk,先检测一下自己的Linux中有没有jdk环境,如果有就不需要安装了;

检测命令:java -version

如果没有的话,那就安装和配置环境变量:

1.先在官网下载好jdk在Linux环境下的呀压缩包,以.tar.gz结尾的jdk压缩包

2.然后使用 tar -zxvf jdk-8uxxxxxx64.tar.gz -C /usr/local (表示把压缩包解压到usr下的local文件夹下)

3.解压完成后,然后进行环境变量的配置, 使用命令 vim /etc/profile

然后快速的到达文件的末尾,按一下 大写的G就行;然后修改配置文件:

LANG="en_US.UTF-8" #配置字符编码集
JAVA_HOME=/usr/java/jdk1.8.0_261-amd64 #配置jdk的环境变量
PATH=$JAVA_HOME/bin:$PATH
登录后复制
修改完成后让配置文件重新加载一下,使用命令:source /etc/profile 然后回车;

4.然后查看是否配置成功:java -version

在Linux中安装Tomcat(防火墙相关命令使用的时候查询就行)
sh startup.sh
./startup.sh
登录后复制
# 查看Tomcat的后50行日志
tail -50 /usr/loacal/apache-tomcat-7.0.57/logs/catalina.out

# 查询指定软件的进程
ps -ef | grep tomcat
登录后复制
Tomcat在Linux运行的,可能你在浏览器也无法访问,因为防火墙开着的;

查看和修改防火墙的状态:

查看防火墙状态(systemctl status firewalld、firewall-cmd --state)

暂时关闭防火墙(systemctl stop firewalld)

永久关闭防火墙(systemctl disable firewalld)

开启防火墙(systemctl start firewalld)

开放指定端口8080(firewall-cmd --zone=public --add-port=8080/tcp --permanent)

关闭指定端口(firewall-cmd --zone=public --remove-port=8080/tcp --permanent)

立即生效(firewall-cmd --reload)

查看开放的端口(firewall-cmd --zone=public --list-ports)

注意:

1、systemctl是管理Linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作

2、firewall-cmd是Linux中专门用于控制防火墙的命令

3、为了保证系统安全,服务器的防火墙不建议关闭 在Linux中开放指定的端口是以后在实际生产中最常用的方式,在实际生产中是不能直接把防火墙关闭的,容易受到攻击;修改防火墙配置后都需要reload一下才能生效;

systemctl status firewalld、firewall-cmd --state
systemctl stop firewalld
systemctl start firewalld
systemctl start firewalld
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
登录后复制
sh shutdown.sh
./shutdwon.sh
ps -ef | grep tomcat
kill -9 7742 # 一般不建议直接强制停止进程,除非正常的手段无法停止进程了
登录后复制
在Linux中安装MySQL
使用rpm来进行安装MySQL;

①先检查当前系统中是否安装了MySQL数据库

rpm -qa #查询当前系统中安装的所有软件
rpm -qa|grep mysql #查询当前系统中安装的名称带MySQL的软件
rpm -qa|grep mariadb #查询当前系统中安装的名称带mariadb的软件 这个是centons中自带的一个数据库,如果你的虚拟机中有这个软件要先把这个软件给卸载然后再安装MySQL,不然会出现数据库冲突的情况
登录后复制
卸载mariadb数据库:

rpm -e --nodeps 软件名称
rpm -e --nodeps

rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
登录后复制
参考下面的文章:

Linux安装MySQL详细教程(YUM+离线安装)初尘屿风的博客-CSDN博客yum安装mysql的步骤和方法
https://blog.csdn.net/qinluyu111/article/details/124343942?ops_request_misc=%7B%22request_id%22%3A%22165569845616782390520827%22%2C%22scm%22%3A%2220140713.130102334.pc_all.%22%7D&request_id=165569845616782390520827&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v32_ecpm-26-124343942-null-null.142%5Ev17%5Erank_v32,157%5Ev15%5Enew_3&utm_term=linux%E5%AE%89%E8%A3%85MySQL%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187
在参考这个文章的时候,中途可能还会报一个错误:在下面的文件中修改配置文件,把相关的文件地址填过去;

登陆: mysql -u -root -p 登陆的时候可能会报下面的错误:一般来说都是密码错误了.....(反正我测试了很多次才登陆成功)

安装Linux常见的三个错误:liunx 安装 mysql 时遇到错误的解决_qq_31683775的博客-CSDN博客
安装lrzsz
这个是Linux中负责文件的上传和下载的功能;

1.搜索lrzsz安装包,命令为 yum list lrzsz (这个命令的作用是在应用商店搜索lrzsz这个安装包)

2.使用yum在线安装,命令为 yum install lrzsz.x86_64 ,然后回车就行(中间可能让你输入一个y);然后在命令窗口使用 rz 命令就可以把本地的文件上传到Linux上了;

注意:虽然这个finalshell可以直接使用拖拽的方式来进行文件的上传,那么为什么还要安装这个软件?因为并不是所有的Linux连接工具中都会有这种可视图操作的功能!

Linux项目部署
手工部署项目
自己打包,自己上传,自己运行,然后都是自己一行一行的手敲命令来完成;

①在代码编写工具中把spring boot项目打成jar架构包;

②将jar包上传到Linux服务器

mkdir /usr/local/take_out_app #创建目录,将项目的jar包放到此目录
登录后复制
运行命令:不过要注意的是,你这个Linux环境必须安装了jdk才可以运行Boot项目

java -jar reggie_take_out-1.0-SNAPSHOT.jar
登录后复制
检查防火墙8080是否对外开放:firewall -cmd --zone=public --list-ports

我们发现8080端口并没有被开放,所以使用命令把8080端口开放:

firewall-cmd --zone=public --add-port=8080/tcp --permanent # 出现sucess后,然后必须执行下面的reload,不然开放的端口不会生效

firewall-cmd --reload

firewall-cmd --zone=public --list-ports # 如果再次进行查看
登录后复制
然后可以去浏览器访问了,但是此时还不一定可以访问成功,如果你的这个项目使用到了数据库MySQL或者是redis,那么还需要配置数据库,或者是使用你本地的数据库,但是要修改刚刚上传的jar架构包中的yml文件中的MySQL的url;

比如果你的Linux的ip是:192.168.300.100 , 而你的MySQL是在windons中,你windows的ip地址是 192.169.200.1, 那么就要在Linux中把yml文件中的MySQL的url中的localhost改成你的这个windows的ip地址;

等等问题需要去解决。。。。。。。。(后面再补充一下具体的情况)

设置Java项目在后台运行并且输出日志到指定文件
上面的那种霸屏允许的方式,只要允许Java程序的那个窗口被关闭,那么在浏览器就访问不到了;

比如在运行刚刚到项目:

nohup java -jar reggie_take_out-1.0-SNAPSHOT.jar &> app.log & # 这里的log文件是相对路径下的文件,会在我们执行该行命令的目录下生成这个log文件 最后一个&表示在后台运行
登录后复制
那么这种在后台运行的程序应该怎么把它结束?使用杀进程的方式

ps -ef | grep java 拿到Java程序的进程id

然后使用 kill -9 进程号 (这个9可以换成15,15杀进程的方式更加‘温柔一些’)

然后再查询一下 ps -ef | grep java 看有没有关闭该程序

shell脚本自动部署
通过脚本的方式,只要执行一个命令,就可以自动的从我们的git仓库拉取项目和部署项目;

完整的操作步骤:

java
linux
电子蜂鸣器
精选推荐
广告

python基础代码大全-python基础语法,python 代码命令大全
1804阅读·0评论·0点赞
2020年10月28日
Undefined symbols for architecture x86_64:"xxxxxx", referenced from:
9398阅读·0评论·0点赞
2016年12月6日
yml 配置指令参考
129阅读·0评论·0点赞
2022年9月29日
Docker Compose
236阅读·0评论·0点赞
2020年5月12日
linux服务器上部署项目常用命令
1658阅读·1评论·3点赞
2018年6月21日
/proc/diskstats
381阅读·0评论·0点赞
2018年8月2日
如果,一个人身上出现了这几个迹象,说明他的情商非常低
国际专业情商测试
广告
[求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
391阅读·0评论·0点赞
2016年11月27日
Linux大神都是怎么记住这么多命令的?
496阅读·1评论·0点赞
2021年7月22日
将瑞吉外卖项目jar包部署在远程服务器并成功运行在pc和移动端
928阅读·14评论·8点赞
2022年7月20日
linux命令那么多怎么记,如何记住Linux命令
205阅读·0评论·0点赞
2021年5月11日
linux命令怎么学?
6481阅读·0评论·1点赞
2018年10月3日
【Linux学习笔记22】Linux-C进程内存分布
210阅读·0评论·1点赞
2019年8月2日
Linux nohup模式启动jar
220阅读·0评论·0点赞
2018年9月21日
linux yml安装mysql
2345阅读·2评论·0点赞
2019年12月18日
Linux 命令集锦
5476阅读·0评论·0点赞
2007年3月19日
shendxx python 知识点
1下载·0评论
2022年12月9日
科创成果奖励.rar.rar
0下载·0评论
2022年12月9日
DISCO_v1.0.7.exe
0下载·0评论
2022年12月9日
统计咨询用户量.sql
0下载·0评论
2022年12月9日
去首页
看看更多热门内容
评论2

爱殇戏子


大佬,再自学么?

以免霸屏的指令是什么

为什么要学习Linux,因为Linux很多都是开源免费的,并且Linux是非常稳定的,我们开发出来的项目一般都是在服务器中的,我们操作服务器中的程序有两种方式,要么你就去服务器跟前,这种明显是不现实的,所以在实际情况中我们都是在电脑安装一个远程登陆软件,通过这个软件来连接远程的服务器,这样我们就可以在本地的电脑操作远程服务器了;Linux就提供了一种可靠的远程连接方式;

Linux的特点:免费,开源,多用户(同一时刻可以多个用户同时登陆和执行同一个Linux系统),多任务;

Linux的安装
安装
1.安装VMWare: 下载对应的软件,一直下一步就行;

2.安装centOS镜像:

①点击创建新的虚拟机

②然后按照虚拟机向导安装镜像,注意选择自己安装对应的镜像版本

③在CD/DVD的配置项中配置镜像的路径;(内存可以根据自己需求设置)

然后一直下一步就行;

④第一次启动的时候比较慢,因为需要安装一些东西;然后按照需求配置自己需要的就行;

不过设置的root密码要记住!第一次安装完成后需要重新启动!!!

⑤配置网卡驱动:

然后重新启动!

然后再使用 ip addr 查看ip地址是否可以显示了;

使用finalshell连接虚拟机
⑥使用远程连接软件连接本地的Linux来进行操作;

这里我们使用finalshell,自己下载安装这个finalshell就行;

下面我们来演示一下如何使用finalshell来连接这个Linux: 要先知道我们要连接的服务器(Linux或者是云服务器的IP地址)的ip地址才能去连接;

点击最左上角的文件夹图形,然后点击左边白色的文件夹,会弹窗出:然后点击SSH连接

出现下面的窗口:这个主机要写你要连接的服务器的ip地址,这里我们填自己这个虚拟机的ip地址就行(在本机的虚拟机使用 ip addr 查看自己的虚拟机的IP地址);

了解一下Linux的目录结构(不需要记忆)

Java中流传一句话:万物皆对象!在Linux中同样流传一句话:万物皆文件!
Linux中常用的命令(重点)
Linux命令初体验--几个常用命令
序号命令对应英文作用
1lslist查看当前目录下的内容
2pwdprint work directory查看当前目录所在目录
3cd 目录名change directory切换目录
4touch 文件名touch如果文件不存在,就新创建文件
5mkdir 目录名make directory创建目录
6rm 文件名remove删除指定文件
注意事项:

在执行Linux命令的时候,提示信息如果显示为乱码,这是由于编码问题导致的,只需要修改Linux的编码就行即可,命令如下:

下面命名表示:把'LANG="en_UTF-8"'追加到后面的文件中

echo 'LANG="en_UTF-8"' >> /etc/profile

source /etc/profile #重新加载配置文件,新添进去的配置才可以生效
登录后复制
使用Linux的一些小技巧:非常使用,和经常使用得到;

tab键自动补全

连续两次Tab键,给出操作提示

使用上下箭头快速调出曾经使用过的命令

使用clear命令或者是ctrl+l 实现快速清屏

Linux命令格式
command [-options][parameter]
登录后复制
说明:

command:命令名

[-options]:选项,可以用来对命令进行控制,也可以进行省略

[parameter]:传给命令的参数,可以是零个,一个或者是多个

注意:[] 代表可选

命令名 ,选项 ,参数之间使用空格进行分隔

案例演示: 使用 ls 与 使用 ls -l 的区别

paramter是多个的时候:比如同时创建多个文件

强制删除文件:

强制删除一个文件:rm -f 文件名1

强制删除一批文件:rm -f 文件名1 文件名2 文件名3

显示指定目录下的内容 ls和ll
作用:显示指定目录下的内容

语法:ls [-al] [dir]

说明:

-a 显示所有文件及目录 (.开头的隐藏文件也会列出, 在Linux中隐藏文件是以.开头的)

-l 除文件名称外,同时将文件类型(d表示目录,-表示文件),权限,拥有者,文件大小等信息详细列出

注意:由于我们使用ls命令是经常需要加入 -l 选项, 所以Linux为ls -l 提供了一种简单的书写方式, 即 ll

如果不指定特定的dir,那么展示的就是root目录下的所有文件;

如果指定了dir,那么展示的就是指定dir目录下的所有文件:ls -al /etc

简写: 把ls -al 进行了合并,变成了 ll

切换目录: cd
作用:用于切换当前工作目录,即进入指定目录;

语法:cd [dirName]

特殊说明:

~表示当前用户的home目录 不同用户的home目录可能不同,比如Linux中的root用户的home目录就是 /root

.表示目前所在的目录

..表示目前位置的上级目录 (用得比较频繁)

举例:

cd .. 切换到当前目录的上级目录

cd ~ 切换到用的home目录

cd /usr/local 切换到/usr/local目录

cd usr 进入到usr目录

显示文件内容:cat
作用:用于显示文件内容

语法: cat [-n] filaName

说明: -n 由1开始对所有输出行数编号

举例:cat /etc/profile 查看/etc目录下的profile文件内容

不使用-n:

使用-n:

分页查看文件:more
作用:以分页的形式显示文件内容, 使用场景,当查看的文件的内容比较多的时候,就可以使用more命令来查看,这样更加方便

语法:more fileNeme

操作说明:

回车键 向下滚动一行

空格键 向下滚动一屏

b 返回上一屏

q或者是Ctrl + c 退出more

举例:在根目录下使用命令 more /etc/profile

查看文件末尾:tail
作用:查看文件末尾的内容

语法:tail [-f] fileName

说明:动态的读取文件末尾内容并显示,通过用于日志文件的内容的输出

举例:

tail /etc/profile 显示/etc目录下的profile文件末尾10行的内容(这个10是默认的)

tail -20 /etc/profile 显示/etc目录下的profile文件末尾20行的内容

tail -f /ydl/my.log 动态的读取 /ydl目录下的my.log文件末尾内容并显示, 这个命令会让当前Linux窗口处于霸屏的状态,使用Ctrl + C 就可以停止;

创建目录:mkdir
作用:创建目录

语法:mkdir [-p] dirName

说明:

-p: 确保目录名称是存在的,不存在就创建一个。通过此选项,可以实现多层目录同时创建

(p代表parent)

举例:

mkdir it在当前目录下,创建一个名为it的子目录

mkdir -p it/javaTest 在工作的目录下的it目录中建立一个名为test的目录,若it目录不存在,则创建一个

删除目录:rmdir
作用:删除空目录

语法:rmdir [-p] dirName

说明:

-p : 当子目录被删除后使父目录为空目录的话,则一并删除

举例:

rmdir it 删除为it的空目录

rmdir -p it/java 删除it目录中名为Java的子目录,若java目录删除后it目录变为空目录,则it目录也会被删除

rmdir it* 删除以it开头的空目录

删除不为空的文件或目录 rm
作用:删除文件或者目录

语法:rm [-rf] name

说明:

-r : 将目录及目录中的所有文件(目录)逐一删除,即递归删除

-f : 无需确认,直接删除

举例:

rm -r it/ 删除名为it的目录和目录中的所有文件,删除前需要确定

rm -rf it/ 无需确认,直接删除名为it的目录和目录中所有文件

rm -rf hello.txt 无需确认,直接删除hello.txt文件 (这个删除文件的命令可以不用带r)

拷贝移动命令cp
作用:用于复制文件或者是目录

语法:cp [-r] source target

说明:

-r : 如果复制的是目录需要使用到此项,此时将复制该目录下所有的子目录和文件

举例:

cp hello.txt it/ 将hello.txt复制到it目录中

cp hello.txt ./hi.txt 将hello.txt复制到当前目录,并改名为hi.txt

cp -r it/ itjava/ 将it目录和目录下的所有文件复制到itjava目录下

cp -r it/* itjava/ 将it目录下所有文件复制到itjava目录下(目录这一层不复制,只复制目录下的内容)

移动拷贝mv
作用:为文件或者是目录进行改名,或将文件或目录移动到其他位置

语法:mv source dest

举例:

mv hello.txt hi.txt 将hello.txt改名为hi.txt

mv hi.txt it/ 将文件hi.txt移动到it目录中

mv hi.txt it/hello.txt 将hi.txt移动到it目录中,并且改名为hello.txt

mv it/ itjava/ 如果itjava目录不存在,将it目录改名为itjava

mv it/ itjava/ 如果itjava目录存在,将it目录移动到itjava目录中

打包压缩命令 tar
作用:对文件进行打包,解包,压缩,解压

语法:tar [-zcxvf] filaName[files]

包文件后缀为 .tar 表示只完成了打包,并没有压缩

包文件后缀为 .tar.gz 表示打包同时还进行了压缩

说明:

-z : z代表的是gzip , 通过gzip命令处理文件,gzip可以对文件压缩或者是解压

-c : c代表的是create, 即创建新的文件包 (打包)

-x : x代表的是extract,实现从包文件还原文件 (解包)

-v : v代表的是verbose,显示命令执行的过程

-f : f代表的是file,用于指定包文件的名称

如果不想把解压的文件包的内容放到当前目录, 加 -c /要存放的目录

第一个常用组合: -cvf

第二个常用组合:-zcvf

第三个常用组合: -xvf 解压包
第四个常用组合:-zxvf (非常常用)

文本编辑命令vi/vim
作用:vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似与windows的记事本;

语法:vi fileName

文本编辑命令vim:

作用:对文件内容进行编辑,vim其实就是一个文本编辑器;

语法:vim fileName

说明:

1.在使用vim进行编辑文件的时候,如果指定的文件存在则直接打开此文件。如果指定的文件不存在则新建文件

2.vim在进行文本编辑的时候一共分为三种模式,分别是命令模式(command mode),插入模式(insert mode)和底行模式(last line mode)。这三种模式之间可以相互切换。我们在使用vim命令的时一定要注意我们当前所处的是哪一种模式;

对于这三种模式的一些说明:

注意:命令模式下,这个gg表示的是快速将光标移动到文件开头, 这个G表示的是快速将光标移动到文件末尾;

下面的插入模式和底行模式,是不能直接进行转换的,都需要先进入到命令模式然后才能进行模式转换;

注意:必须要进入底行模式才能进行文件的保存!!!

查询命令find
作用:在指定目录下查找文件 (从指定目录中搜索指定的文件)

语法:find dirName(目录名称) -option fileName

(-option 一般是-name,表示根据指定名称来查找文件)

举例:

find . -name "*.java" 在当前目录及其子目录下查找.java结尾的文件 (-name根据文件名来进行查找)

find /it -name "*.java" 在/it目录及其子目录下查找.java结尾的文件

查找指定内容命令grep
作用:从指定文件中查找指定的文本内容(从当前或者是指定的文件中查找指定的内容)

语法:grep word fileName

注意:这个word是区分大小写的 !

举例:

grep hello helloword.java 查找 helloword.java文件中出现的hello字符串的位置

grep hello *.java 查找当前目录中所有.java结尾的文件中包含hello字符串的位置

Linux中进行软件安装
软件安装的方式:

二进制发布包的安装

软件已经针对具体平台编译打包发布,只需要解压,修改配置即可

rpm安装

软件已经安装redhat的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题

yum安装(一般推荐这种安装方式)

一种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程自动解决库依赖的问题

源码编译安装(Java源代码安装)

软件以源码工程的形式发布,需要自己编译打包

在Linux中安装jdk
安装jdk,先检测一下自己的Linux中有没有jdk环境,如果有就不需要安装了;

检测命令:java -version

如果没有的话,那就安装和配置环境变量:

1.先在官网下载好jdk在Linux环境下的呀压缩包,以.tar.gz结尾的jdk压缩包

2.然后使用 tar -zxvf jdk-8uxxxxxx64.tar.gz -C /usr/local (表示把压缩包解压到usr下的local文件夹下)

3.解压完成后,然后进行环境变量的配置, 使用命令 vim /etc/profile

然后快速的到达文件的末尾,按一下 大写的G就行;然后修改配置文件:

LANG="en_US.UTF-8" #配置字符编码集
JAVA_HOME=/usr/java/jdk1.8.0_261-amd64 #配置jdk的环境变量
PATH=$JAVA_HOME/bin:$PATH
登录后复制
修改完成后让配置文件重新加载一下,使用命令:source /etc/profile 然后回车;

4.然后查看是否配置成功:java -version

在Linux中安装Tomcat(防火墙相关命令使用的时候查询就行)
sh startup.sh
./startup.sh
登录后复制
# 查看Tomcat的后50行日志
tail -50 /usr/loacal/apache-tomcat-7.0.57/logs/catalina.out

# 查询指定软件的进程
ps -ef | grep tomcat
登录后复制
Tomcat在Linux运行的,可能你在浏览器也无法访问,因为防火墙开着的;

查看和修改防火墙的状态:

查看防火墙状态(systemctl status firewalld、firewall-cmd --state)

暂时关闭防火墙(systemctl stop firewalld)

永久关闭防火墙(systemctl disable firewalld)

开启防火墙(systemctl start firewalld)

开放指定端口8080(firewall-cmd --zone=public --add-port=8080/tcp --permanent)

关闭指定端口(firewall-cmd --zone=public --remove-port=8080/tcp --permanent)

立即生效(firewall-cmd --reload)

查看开放的端口(firewall-cmd --zone=public --list-ports)

注意:

1、systemctl是管理Linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作

2、firewall-cmd是Linux中专门用于控制防火墙的命令

3、为了保证系统安全,服务器的防火墙不建议关闭 在Linux中开放指定的端口是以后在实际生产中最常用的方式,在实际生产中是不能直接把防火墙关闭的,容易受到攻击;修改防火墙配置后都需要reload一下才能生效;

systemctl status firewalld、firewall-cmd --state
systemctl stop firewalld
systemctl start firewalld
systemctl start firewalld
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
登录后复制
sh shutdown.sh
./shutdwon.sh
ps -ef | grep tomcat
kill -9 7742 # 一般不建议直接强制停止进程,除非正常的手段无法停止进程了
登录后复制
在Linux中安装MySQL
使用rpm来进行安装MySQL;

①先检查当前系统中是否安装了MySQL数据库

rpm -qa #查询当前系统中安装的所有软件
rpm -qa|grep mysql #查询当前系统中安装的名称带MySQL的软件
rpm -qa|grep mariadb #查询当前系统中安装的名称带mariadb的软件 这个是centons中自带的一个数据库,如果你的虚拟机中有这个软件要先把这个软件给卸载然后再安装MySQL,不然会出现数据库冲突的情况
登录后复制
卸载mariadb数据库:

rpm -e --nodeps 软件名称
rpm -e --nodeps

rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
登录后复制
参考下面的文章:

Linux安装MySQL详细教程(YUM+离线安装)初尘屿风的博客-CSDN博客yum安装mysql的步骤和方法
https://blog.csdn.net/qinluyu111/article/details/124343942?ops_request_misc=%7B%22request_id%22%3A%22165569845616782390520827%22%2C%22scm%22%3A%2220140713.130102334.pc_all.%22%7D&request_id=165569845616782390520827&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v32_ecpm-26-124343942-null-null.142%5Ev17%5Erank_v32,157%5Ev15%5Enew_3&utm_term=linux%E5%AE%89%E8%A3%85MySQL%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187
在参考这个文章的时候,中途可能还会报一个错误:在下面的文件中修改配置文件,把相关的文件地址填过去;

登陆: mysql -u -root -p 登陆的时候可能会报下面的错误:一般来说都是密码错误了.....(反正我测试了很多次才登陆成功)

安装Linux常见的三个错误:liunx 安装 mysql 时遇到错误的解决_qq_31683775的博客-CSDN博客
安装lrzsz
这个是Linux中负责文件的上传和下载的功能;

1.搜索lrzsz安装包,命令为 yum list lrzsz (这个命令的作用是在应用商店搜索lrzsz这个安装包)

2.使用yum在线安装,命令为 yum install lrzsz.x86_64 ,然后回车就行(中间可能让你输入一个y);然后在命令窗口使用 rz 命令就可以把本地的文件上传到Linux上了;

注意:虽然这个finalshell可以直接使用拖拽的方式来进行文件的上传,那么为什么还要安装这个软件?因为并不是所有的Linux连接工具中都会有这种可视图操作的功能!

Linux项目部署
手工部署项目
自己打包,自己上传,自己运行,然后都是自己一行一行的手敲命令来完成;

①在代码编写工具中把spring boot项目打成jar架构包;

②将jar包上传到Linux服务器

mkdir /usr/local/take_out_app #创建目录,将项目的jar包放到此目录
登录后复制
运行命令:不过要注意的是,你这个Linux环境必须安装了jdk才可以运行Boot项目

java -jar reggie_take_out-1.0-SNAPSHOT.jar
登录后复制
检查防火墙8080是否对外开放:firewall -cmd --zone=public --list-ports

我们发现8080端口并没有被开放,所以使用命令把8080端口开放:

firewall-cmd --zone=public --add-port=8080/tcp --permanent # 出现sucess后,然后必须执行下面的reload,不然开放的端口不会生效

firewall-cmd --reload

firewall-cmd --zone=public --list-ports # 如果再次进行查看
登录后复制
然后可以去浏览器访问了,但是此时还不一定可以访问成功,如果你的这个项目使用到了数据库MySQL或者是redis,那么还需要配置数据库,或者是使用你本地的数据库,但是要修改刚刚上传的jar架构包中的yml文件中的MySQL的url;

比如果你的Linux的ip是:192.168.300.100 , 而你的MySQL是在windons中,你windows的ip地址是 192.169.200.1, 那么就要在Linux中把yml文件中的MySQL的url中的localhost改成你的这个windows的ip地址;

等等问题需要去解决。。。。。。。。(后面再补充一下具体的情况)

设置Java项目在后台运行并且输出日志到指定文件
上面的那种霸屏允许的方式,只要允许Java程序的那个窗口被关闭,那么在浏览器就访问不到了;

比如在运行刚刚到项目:

nohup java -jar reggie_take_out-1.0-SNAPSHOT.jar &> app.log & # 这里的log文件是相对路径下的文件,会在我们执行该行命令的目录下生成这个log文件 最后一个&表示在后台运行
登录后复制
那么这种在后台运行的程序应该怎么把它结束?使用杀进程的方式

ps -ef | grep java 拿到Java程序的进程id

然后使用 kill -9 进程号 (这个9可以换成15,15杀进程的方式更加‘温柔一些’)

然后再查询一下 ps -ef | grep java 看有没有关闭该程序

shell脚本自动部署
通过脚本的方式,只要执行一个命令,就可以自动的从我们的git仓库拉取项目和部署项目;

完整的操作步骤:

java
linux
电子蜂鸣器
精选推荐
广告

python基础代码大全-python基础语法,python 代码命令大全
1804阅读·0评论·0点赞
2020年10月28日
Undefined symbols for architecture x86_64:"xxxxxx", referenced from:
9398阅读·0评论·0点赞
2016年12月6日
yml 配置指令参考
129阅读·0评论·0点赞
2022年9月29日
Docker Compose
236阅读·0评论·0点赞
2020年5月12日
linux服务器上部署项目常用命令
1658阅读·1评论·3点赞
2018年6月21日
/proc/diskstats
381阅读·0评论·0点赞
2018年8月2日
如果,一个人身上出现了这几个迹象,说明他的情商非常低
国际专业情商测试
广告
[求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
391阅读·0评论·0点赞
2016年11月27日
Linux大神都是怎么记住这么多命令的?
496阅读·1评论·0点赞
2021年7月22日
将瑞吉外卖项目jar包部署在远程服务器并成功运行在pc和移动端
928阅读·14评论·8点赞
2022年7月20日
linux命令那么多怎么记,如何记住Linux命令
205阅读·0评论·0点赞
2021年5月11日
linux命令怎么学?
6481阅读·0评论·1点赞
2018年10月3日
【Linux学习笔记22】Linux-C进程内存分布
210阅读·0评论·1点赞
2019年8月2日
Linux nohup模式启动jar
220阅读·0评论·0点赞
2018年9月21日
linux yml安装mysql
2345阅读·2评论·0点赞
2019年12月18日
Linux 命令集锦
5476阅读·0评论·0点赞
2007年3月19日
shendxx python 知识点
1下载·0评论
2022年12月9日
科创成果奖励.rar.rar
0下载·0评论
2022年12月9日
DISCO_v1.0.7.exe
0下载·0评论
2022年12月9日
统计咨询用户量.sql
0下载·0评论
2022年12月9日
去首页
看看更多热门内容
评论2

爱殇戏子


大佬,再自学么?

如何有效防止数据中心系统宕机

这篇文章主要介绍了防止服务器宕机时MySQL数据丢失的几种方案,结合实践介绍了Replication和Monitor以及Failover这三个项目的应用,需要的朋友可以参考下   对于多数应用来说,MySQL都是作为最关键的数据存储中心的,所以,如何让MySQL提供HA服务,是我们不得不面对的一个问题。当master当机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master当机并进行相应的故障转移处理,都是需要我们好好思考的。这里,笔者将结合这段时间做的MySQL proxy以及toolsets相关工作,说说我们现阶段以及后续会在项目中采用的MySQL HA方案。   Replication   要保证MySQL数据不丢失,replication是一个很好的解决方案,而MySQL也提供了一套强大的replication机制。只是我们需要知道,为了性能考量,replication是采用的asynchronous模式,也就是写入的数据并不会同步更新到slave上面,如果这时候master当机,我们仍然可能会面临数据丢失的风险。   为了解决这个问题,我们可以使用semi-synchronous replication,semi-synchronous replication的原理很简单,当master处理完一个事务,它会等待至少一个支持semi-synchronous的slave确认收到了该事件并将其写入relay-log之后,才会返回。这样即使master当机,最少也有一个slave获取到了完整的数据。   但是,semi-synchronous并不是100%的保证数据不会丢失,如果master在完成事务并将其发送给slave的时候崩溃,仍然可能造成数据丢失。只是相比于传统的异步复制,semi-synchronous replication能极大地提升数据安全。更为重要的是,它并不慢,MHA的作者都说他们在*的生产环境中使用了semi-synchronous(这里),所以我觉得真心没必要担心它的性能问题,除非你的业务量级已经完全超越了*或者google。在这篇文章里面已经提到,MySQL 5.7之后已经使用了Loss-Less Semi-Synchronous replication,所以丢数据的概率已经很小了。   如果真的想完全保证数据不会丢失,现阶段一个比较好的办法就是使用gelera,一个MySQL集群解决方案,它通过同时写三份的策略来保证数据不会丢失。笔者没有任何使用gelera的经验,只是知道业界已经有公司将其用于生产环境中,性能应该也不是问题。但gelera对MySQL代码侵入性较强,可能对某些有代码洁癖的同学来说不合适了:-)   我们还可以使用drbd来实现MySQL数据复制,MySQL官方文档有一篇文档有详细介绍,但笔者并未采用这套方案,MHA的作者写了一些采用drdb的问题,在这里,仅供参考。   在后续的项目中,笔者会优先使用semi-synchronous replication的解决方案,如果数据真的非常重要,则会考虑使用gelera。   Monitor   前面我们说了使用replication机制来保证master当机之后尽可能的数据不丢失,但是我们不能等到master当了几分钟才知道出现问题了。所以一套好的监控工具是必不可少的。   当master当掉之后,monitor能快速的检测到并做后续处理,譬如邮件通知管理员,或者通知守护程序快速进行failover。   通常,对于一个服务的监控,我们采用keepalived或者heartbeat的方式,这样当master当机之后,我们能很方便的切换到备机上面。但他们仍然不能很即时的检测到服务不可用。笔者的公司现阶段使用的是keepalived的方式,但后续笔者更倾向于使用zookeeper来解决整个MySQL集群的monitor以及failover。   对于任何一个MySQL实例,我们都有一个对应的agent程序,agent跟该MySQL实例放到同一台机器上面,并且定时的对MySQL实例发送ping命令检测其可用性,同时该agent通过ephemeral的方式挂载到zookeeper上面。这样,我们可以就能知道MySQL是否当机,主要有以下几种情况:   机器当机,这样MySQL以及agent都会当掉,agent与zookeeper连接自然断开   MySQL当掉,agent发现ping不通,主动断开与zookeeper的连接   Agent当掉,但MySQL未当   上面三种情况,我们都可以认为MySQL机器出现了问题,并且zookeeper能够立即感知。agent与zookeeper断开了连接,zookeeper触发相应的children changed事件,监控到该事件的管控服务就可以做相应的处理。譬如如果是上面前两种情况,管控服务就能自动进行failover,但如果是第三种,则可能不做处理,等待机器上面crontab或者supersivord等相关服务自动重启agent。   使用zookeeper的好处在于它能很方便的对整个集群进行监控,并能即时的获取整个集群的变化信息并触发相应的事件通知感兴趣的服务,同时协调多个服务进行相关处理。而这些是keepalived或者heartbeat做不到或者做起来太麻烦的。   使用zookeeper的问题在于部署起来较为复杂,同时如果进行了failover,如何让应用程序获取到最新的数据库地址也是一个比较麻烦的问题。   对于部署问题,我们要保证一个MySQL搭配一个agent,幸好这年头有了docker,所以真心很简单。而对于第二个数据库地址更改的问题,其实并不是使用了zookeeper才会有的,我们可以通知应用动态更新配置信息,VIP,或者使用proxy来解决。   虽然zookeeper的好处很多,但如果你的业务不复杂,譬如只有一个master,一个slave,zookeeper可能并不是最好的选择,没准keepalived就够了。   Failover   通过monitor,我们可以很方便的进行MySQL监控,同时在MySQL当机之后通知相应的服务做failover处理,假设现在有这样的一个MySQL集群,a为master,b,c为其slave,当a当掉之后,我们需要做failover,那么我们选择b,c中的哪一个作为新的master呢?   原则很简单,哪一个slave拥有最近最多的原master数据,就选哪一个作为新的master。我们可以通过show slave status这个命令来获知哪一个slave拥有最新的数据。我们只需要比较两个关键字段Master_Log_File以及Read_Master_Log_Pos,这两个值代表了slave读取到master哪一个binlog文件的哪一个位置,binlog的索引值越大,同时pos越大,则那一个slave就是能被提升为master。这里我们不讨论多个slave可能会被提升为master的情况。   在前面的例子中,假设b被提升为master了,我们需要将c重新指向新的master b来开始复制。我们通过CHANGE MASTER TO来重新设置c的master,但是我们怎么知道要从b的binlog的哪一个文件,哪一个position开始复制呢?   GTID   为了解决这一个问题,MySQL 5.6之后引入了GTID的概念,即uuid:gid,uuid为MySQL server的uuid,是全局唯一的,而gid则是一个递增的事务id,通过这两个东西,我们就能唯一标示一个记录到binlog中的事务。使用GTID,我们就能非常方便的进行failover的处理。   仍然是前面的例子,假设b此时读取到的a最后一个GTID为3E11FA47-71CA-11E1-9E33-C80AA9429562:23,而c的为3E11FA47-71CA-11E1-9E33-C80AA9429562:15,当c指向新的master b的时候,我们通过GTID就可以知道,只要在b中的binlog中找到GTID为3E11FA47-71CA-11E1-9E33-C80AA9429562:15这个event,那么c就可以从它的下一个event的位置开始复制了。虽然查找binlog的方式仍然是顺序查找,稍显低效暴力,但比起我们自己去猜测哪一个filename和position,要方便太多了。   google很早也有了一个Global Transaction ID的补丁,不过只是使用的一个递增的整形,LedisDB就借鉴了它的思路来实现failover,只不过google貌似现在也开始逐步迁移到MariaDB上面去了。   MariaDB的GTID实现跟MySQL 5.6是不一样的,这点其实比较麻烦,对于我的MySQL工具集go-mysql来说,意味着要写两套不同的代码来处理GTID的情况了。后续是否支持MariaDB再看情况吧。   Pseudo GTID   GTID虽然是一个好东西,但是仅限于MySQL 5.6+,当前仍然有大部分的业务使用的是5.6之前的版本,笔者的公司就是5.5的,而这些数据库至少长时间也不会升级到5.6的。所以我们仍然需要一套好的机制来选择master binlog的filename以及position。   最初,笔者打算研究MHA的实现,它采用的是首先复制relay log来补足缺失的event的方式,但笔者不怎么信任relay log,同时加之MHA采用的是perl,一个让我完全看不懂的语言,所以放弃了继续研究。   幸运的是,笔者遇到了orchestrator这个项目,这真的是一个非常神奇的项目,它采用了一种Pseudo GTID的方式,核心代码就是这个   复制代码 代码如下:   create database if not exists meta;   drop event if exists meta.create_pseudo_gtid_view_event;   delimiter ;;   create event if not exists   meta.create_pseudo_gtid_view_event   on schele every 10 second starts current_timestamp   on completion preserve   enable   do   begin   set @pseudo_gtid := uuid();   set @_create_statement := concat('create or replace view meta.pseudo_gtid_view as select '', @pseudo_gtid, '' as pseudo_gtid_unique_val from al');   PREPARE st FROM @_create_statement;   EXECUTE st;   DEALLOCATE PREPARE st;   end   ;;   delimiter ;   set global event_scheler := 1;   它在MySQL上面创建了一个事件,每隔10s,就将一个uuid写入到一个view里面,而这个是会记录到binlog中的,虽然我们仍然不能像GTID那样直接定位到一个event,但也能定位到一个10s的区间了,这样我们就能在很小的一个区间里面对比两个MySQL的binlog了。   继续上面的例子,假设c最后一次出现uuid的位置为s1,我们在b里面找到该uuid,位置为s2,然后依次对比后续的event,如果不一致,则可能出现了问题,停止复制。当遍历到c最后一个binlog event之后,我们就能得到此时b下一个event对应的filename以及position了,然后让c指向这个位置开始复制。   使用Pseudo GTID需要slave打开log-slave-update的选项,考虑到GTID也必须打开该选项,所以个人感觉完全可以接受。   后续,笔者自己实现的failover工具,将会采用这种Pseudo GTID的方式实现。   在《MySQL High Availability》这本书中,作者使用了另一种GTID的做法,每次commit的时候,需要在一个表里面记录gtid,然后就通过这个gtid来找到对应的位置信息,只是这种方式需要业务MySQL客户端的支持,笔者不很喜欢,就不采用了。   后记   MySQL HA一直是一个水比较深的领域,笔者仅仅列出了一些最近研究的东西,有些相关工具会尽量在go-mysql中实现。   更新   经过一段时间的思考与研究,笔者又有了很多心得与收获,设计的MySQL HA跟先前有了很多不一样的地方。后来发现,自己设计的这套HA方案,跟*这篇文章几乎一样,加之最近跟*的人聊天听到他们也正在大力实施,所以感觉自己方向是对了。   新的HA,我会完全拥抱GTID,比较这玩意的出现就是为了解决原先replication那一堆问题的,所以我不会考虑非GTID的低版本MySQL了。幸运的是,我们项目已经将MySQL全部升级到5.6,完全支持GTID了。   不同于fb那篇文章将mysqlbinlog改造支持semi-sync replication协议,我是将go-mysql的replication库支持semi-sync replication协议,这样就能实时的将MySQL的binlog同步到一台机器上面。这可能就是我和fb方案的唯一区别了。   只同步binlog速度铁定比原生slave要快,毕竟少了执行binlog里面event的过程了,而另外真正的slaves,我们仍然使用最原始的同步方式,不使用semi-sync replication。然后我们通过MHA监控整个集群以及进行故障转移处理。   以前我总认为MHA不好理解,但其实这是一个非常强大的工具,而且真正看perl,发现也还是看的懂得。MHA已经被很多公司用于生产环境,经受了检验,直接使用绝对比自己写一个要划算。所以后续我也不会考虑zookeeper,考虑自己写agent了。

如何有效防止数据中心系统宕机

这篇文章主要介绍了防止服务器宕机时MySQL数据丢失的几种方案,结合实践介绍了Replication和Monitor以及Failover这三个项目的应用,需要的朋友可以参考下   对于多数应用来说,MySQL都是作为最关键的数据存储中心的,所以,如何让MySQL提供HA服务,是我们不得不面对的一个问题。当master当机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master当机并进行相应的故障转移处理,都是需要我们好好思考的。这里,笔者将结合这段时间做的MySQL proxy以及toolsets相关工作,说说我们现阶段以及后续会在项目中采用的MySQL HA方案。   Replication   要保证MySQL数据不丢失,replication是一个很好的解决方案,而MySQL也提供了一套强大的replication机制。只是我们需要知道,为了性能考量,replication是采用的asynchronous模式,也就是写入的数据并不会同步更新到slave上面,如果这时候master当机,我们仍然可能会面临数据丢失的风险。   为了解决这个问题,我们可以使用semi-synchronous replication,semi-synchronous replication的原理很简单,当master处理完一个事务,它会等待至少一个支持semi-synchronous的slave确认收到了该事件并将其写入relay-log之后,才会返回。这样即使master当机,最少也有一个slave获取到了完整的数据。   但是,semi-synchronous并不是100%的保证数据不会丢失,如果master在完成事务并将其发送给slave的时候崩溃,仍然可能造成数据丢失。只是相比于传统的异步复制,semi-synchronous replication能极大地提升数据安全。更为重要的是,它并不慢,MHA的作者都说他们在*的生产环境中使用了semi-synchronous(这里),所以我觉得真心没必要担心它的性能问题,除非你的业务量级已经完全超越了*或者google。在这篇文章里面已经提到,MySQL 5.7之后已经使用了Loss-Less Semi-Synchronous replication,所以丢数据的概率已经很小了。   如果真的想完全保证数据不会丢失,现阶段一个比较好的办法就是使用gelera,一个MySQL集群解决方案,它通过同时写三份的策略来保证数据不会丢失。笔者没有任何使用gelera的经验,只是知道业界已经有公司将其用于生产环境中,性能应该也不是问题。但gelera对MySQL代码侵入性较强,可能对某些有代码洁癖的同学来说不合适了:-)   我们还可以使用drbd来实现MySQL数据复制,MySQL官方文档有一篇文档有详细介绍,但笔者并未采用这套方案,MHA的作者写了一些采用drdb的问题,在这里,仅供参考。   在后续的项目中,笔者会优先使用semi-synchronous replication的解决方案,如果数据真的非常重要,则会考虑使用gelera。   Monitor   前面我们说了使用replication机制来保证master当机之后尽可能的数据不丢失,但是我们不能等到master当了几分钟才知道出现问题了。所以一套好的监控工具是必不可少的。   当master当掉之后,monitor能快速的检测到并做后续处理,譬如邮件通知管理员,或者通知守护程序快速进行failover。   通常,对于一个服务的监控,我们采用keepalived或者heartbeat的方式,这样当master当机之后,我们能很方便的切换到备机上面。但他们仍然不能很即时的检测到服务不可用。笔者的公司现阶段使用的是keepalived的方式,但后续笔者更倾向于使用zookeeper来解决整个MySQL集群的monitor以及failover。   对于任何一个MySQL实例,我们都有一个对应的agent程序,agent跟该MySQL实例放到同一台机器上面,并且定时的对MySQL实例发送ping命令检测其可用性,同时该agent通过ephemeral的方式挂载到zookeeper上面。这样,我们可以就能知道MySQL是否当机,主要有以下几种情况:   机器当机,这样MySQL以及agent都会当掉,agent与zookeeper连接自然断开   MySQL当掉,agent发现ping不通,主动断开与zookeeper的连接   Agent当掉,但MySQL未当   上面三种情况,我们都可以认为MySQL机器出现了问题,并且zookeeper能够立即感知。agent与zookeeper断开了连接,zookeeper触发相应的children changed事件,监控到该事件的管控服务就可以做相应的处理。譬如如果是上面前两种情况,管控服务就能自动进行failover,但如果是第三种,则可能不做处理,等待机器上面crontab或者supersivord等相关服务自动重启agent。   使用zookeeper的好处在于它能很方便的对整个集群进行监控,并能即时的获取整个集群的变化信息并触发相应的事件通知感兴趣的服务,同时协调多个服务进行相关处理。而这些是keepalived或者heartbeat做不到或者做起来太麻烦的。   使用zookeeper的问题在于部署起来较为复杂,同时如果进行了failover,如何让应用程序获取到最新的数据库地址也是一个比较麻烦的问题。   对于部署问题,我们要保证一个MySQL搭配一个agent,幸好这年头有了docker,所以真心很简单。而对于第二个数据库地址更改的问题,其实并不是使用了zookeeper才会有的,我们可以通知应用动态更新配置信息,VIP,或者使用proxy来解决。   虽然zookeeper的好处很多,但如果你的业务不复杂,譬如只有一个master,一个slave,zookeeper可能并不是最好的选择,没准keepalived就够了。   Failover   通过monitor,我们可以很方便的进行MySQL监控,同时在MySQL当机之后通知相应的服务做failover处理,假设现在有这样的一个MySQL集群,a为master,b,c为其slave,当a当掉之后,我们需要做failover,那么我们选择b,c中的哪一个作为新的master呢?   原则很简单,哪一个slave拥有最近最多的原master数据,就选哪一个作为新的master。我们可以通过show slave status这个命令来获知哪一个slave拥有最新的数据。我们只需要比较两个关键字段Master_Log_File以及Read_Master_Log_Pos,这两个值代表了slave读取到master哪一个binlog文件的哪一个位置,binlog的索引值越大,同时pos越大,则那一个slave就是能被提升为master。这里我们不讨论多个slave可能会被提升为master的情况。   在前面的例子中,假设b被提升为master了,我们需要将c重新指向新的master b来开始复制。我们通过CHANGE MASTER TO来重新设置c的master,但是我们怎么知道要从b的binlog的哪一个文件,哪一个position开始复制呢?   GTID   为了解决这一个问题,MySQL 5.6之后引入了GTID的概念,即uuid:gid,uuid为MySQL server的uuid,是全局唯一的,而gid则是一个递增的事务id,通过这两个东西,我们就能唯一标示一个记录到binlog中的事务。使用GTID,我们就能非常方便的进行failover的处理。   仍然是前面的例子,假设b此时读取到的a最后一个GTID为3E11FA47-71CA-11E1-9E33-C80AA9429562:23,而c的为3E11FA47-71CA-11E1-9E33-C80AA9429562:15,当c指向新的master b的时候,我们通过GTID就可以知道,只要在b中的binlog中找到GTID为3E11FA47-71CA-11E1-9E33-C80AA9429562:15这个event,那么c就可以从它的下一个event的位置开始复制了。虽然查找binlog的方式仍然是顺序查找,稍显低效暴力,但比起我们自己去猜测哪一个filename和position,要方便太多了。   google很早也有了一个Global Transaction ID的补丁,不过只是使用的一个递增的整形,LedisDB就借鉴了它的思路来实现failover,只不过google貌似现在也开始逐步迁移到MariaDB上面去了。   MariaDB的GTID实现跟MySQL 5.6是不一样的,这点其实比较麻烦,对于我的MySQL工具集go-mysql来说,意味着要写两套不同的代码来处理GTID的情况了。后续是否支持MariaDB再看情况吧。   Pseudo GTID   GTID虽然是一个好东西,但是仅限于MySQL 5.6+,当前仍然有大部分的业务使用的是5.6之前的版本,笔者的公司就是5.5的,而这些数据库至少长时间也不会升级到5.6的。所以我们仍然需要一套好的机制来选择master binlog的filename以及position。   最初,笔者打算研究MHA的实现,它采用的是首先复制relay log来补足缺失的event的方式,但笔者不怎么信任relay log,同时加之MHA采用的是perl,一个让我完全看不懂的语言,所以放弃了继续研究。   幸运的是,笔者遇到了orchestrator这个项目,这真的是一个非常神奇的项目,它采用了一种Pseudo GTID的方式,核心代码就是这个   复制代码 代码如下:   create database if not exists meta;   drop event if exists meta.create_pseudo_gtid_view_event;   delimiter ;;   create event if not exists   meta.create_pseudo_gtid_view_event   on schele every 10 second starts current_timestamp   on completion preserve   enable   do   begin   set @pseudo_gtid := uuid();   set @_create_statement := concat('create or replace view meta.pseudo_gtid_view as select '', @pseudo_gtid, '' as pseudo_gtid_unique_val from al');   PREPARE st FROM @_create_statement;   EXECUTE st;   DEALLOCATE PREPARE st;   end   ;;   delimiter ;   set global event_scheler := 1;   它在MySQL上面创建了一个事件,每隔10s,就将一个uuid写入到一个view里面,而这个是会记录到binlog中的,虽然我们仍然不能像GTID那样直接定位到一个event,但也能定位到一个10s的区间了,这样我们就能在很小的一个区间里面对比两个MySQL的binlog了。   继续上面的例子,假设c最后一次出现uuid的位置为s1,我们在b里面找到该uuid,位置为s2,然后依次对比后续的event,如果不一致,则可能出现了问题,停止复制。当遍历到c最后一个binlog event之后,我们就能得到此时b下一个event对应的filename以及position了,然后让c指向这个位置开始复制。   使用Pseudo GTID需要slave打开log-slave-update的选项,考虑到GTID也必须打开该选项,所以个人感觉完全可以接受。   后续,笔者自己实现的failover工具,将会采用这种Pseudo GTID的方式实现。   在《MySQL High Availability》这本书中,作者使用了另一种GTID的做法,每次commit的时候,需要在一个表里面记录gtid,然后就通过这个gtid来找到对应的位置信息,只是这种方式需要业务MySQL客户端的支持,笔者不很喜欢,就不采用了。   后记   MySQL HA一直是一个水比较深的领域,笔者仅仅列出了一些最近研究的东西,有些相关工具会尽量在go-mysql中实现。   更新   经过一段时间的思考与研究,笔者又有了很多心得与收获,设计的MySQL HA跟先前有了很多不一样的地方。后来发现,自己设计的这套HA方案,跟*这篇文章几乎一样,加之最近跟*的人聊天听到他们也正在大力实施,所以感觉自己方向是对了。   新的HA,我会完全拥抱GTID,比较这玩意的出现就是为了解决原先replication那一堆问题的,所以我不会考虑非GTID的低版本MySQL了。幸运的是,我们项目已经将MySQL全部升级到5.6,完全支持GTID了。   不同于fb那篇文章将mysqlbinlog改造支持semi-sync replication协议,我是将go-mysql的replication库支持semi-sync replication协议,这样就能实时的将MySQL的binlog同步到一台机器上面。这可能就是我和fb方案的唯一区别了。   只同步binlog速度铁定比原生slave要快,毕竟少了执行binlog里面event的过程了,而另外真正的slaves,我们仍然使用最原始的同步方式,不使用semi-sync replication。然后我们通过MHA监控整个集群以及进行故障转移处理。   以前我总认为MHA不好理解,但其实这是一个非常强大的工具,而且真正看perl,发现也还是看的懂得。MHA已经被很多公司用于生产环境,经受了检验,直接使用绝对比自己写一个要划算。所以后续我也不会考虑zookeeper,考虑自己写agent了。

如何在mac上彻底删除docker?

1、删除不了的软件或文件的解决方法: 开机按F8到安全模式中删除即可。

如果使用其他办法无法删除可选择Unlocke。

2、强行删除工具删除,安装后右键点要删除的文件选择Unlocke。

3、再选删除就可以将要删除的文件彻底删除。

下载网址:

软件详细信息

Unlocke是一个免费的右键扩充工具,使用者在安装后,它便能整合于鼠标右键的操作当中。

4、当使用者发现有某个文件或目录无法删除时,只要按下鼠标右键中的“Unlocke”,那么程序马上就会显示出是哪一些程序占用了该目录或文件,接着只要按下弹出的窗口中的“Unlock”就能够为你的文件解套。 

5、 Unlocke不同于其它解锁软件的部分在于它并非强制关闭那些占用文件的程序,而是以解除文件与程序关连性的方式来解锁,因此不会像其它解锁程序一样因为强制关闭程序而造成使用者可能的数据遗失。

Docker 安装 Redis、MySQL、Gogs

人生有涯,学海无涯

最近接到一个项目,由于项目的独特性需要自己搭建一些环境,刚好之前学了一些 Docker(这里如果大家不熟悉 Docker 可以查看公号前面松哥写的 Docker 的系列文章),所以就决定采用 Docker 搭建,毕竟搭建方便、简单、快速。

大家在公网服务器安装 Redis 的时候 一定要设置密码,一定要设置密码,一定要设置密码

如果不设置密码很容易被黑客利用 Redis 的漏洞进行比特币的勒索。如果不巧遇到了那都是血的教训!切记不要抱有侥幸心理,或者简单的以为换个端口就可以了,端口的数量是有*了,黑客完全可以遍历一下就破解了。最好两个都设置,既改端口也加密码,双保险,当然密码也不要简单到随便一个字典库就能破解的那种,尽量复杂点。

与 Redis 安装方式类似,不过这里获取的是指定版本的 MySQL 。

首先提到代码管理平台,大家首先想到的肯定是 Github 以及 Gitlab,这两种大家平时应该用到的比较多,开源软件用的大部分是 Github,公司内部大部分使用的是 Gitlab。Gogs 也是一种代码管理平台,相比 Gitlab 来说相对轻量级。

我这里为什么要使用 Gogs 而不使用 Gitlab 呢? 主要是个人服务器配置跟不上啊!!!

尝试了安装 Gitlab,安装后服务器完全跑不起来了,本来个人服务器性能就不是很好,上面还跑了几个程序,安装完 Gitlab 后连博客网站都打不开,果断放弃。官方推荐的安装 Gitlab 硬件配置是 4 核 8G,相对来说 Gogs 就轻量很多,安装后基本对服务器没什么影响,而且 Docker 安装十分方便。

注意修改端口号:



如果在上一步点击安装后一切正常那边跳过这一步,如果出现 MySQL error: The maximum column size is 767 bytes,那么很高兴你遇到一个坑,不过别怕,我们可以解决它只需要对 mysql 进行参数的设置就好了。

解决方案:

Docker 安装 Redis、MySQL、Gogs

人生有涯,学海无涯

最近接到一个项目,由于项目的独特性需要自己搭建一些环境,刚好之前学了一些 Docker(这里如果大家不熟悉 Docker 可以查看公号前面松哥写的 Docker 的系列文章),所以就决定采用 Docker 搭建,毕竟搭建方便、简单、快速。

大家在公网服务器安装 Redis 的时候 一定要设置密码,一定要设置密码,一定要设置密码

如果不设置密码很容易被黑客利用 Redis 的漏洞进行比特币的勒索。如果不巧遇到了那都是血的教训!切记不要抱有侥幸心理,或者简单的以为换个端口就可以了,端口的数量是有*了,黑客完全可以遍历一下就破解了。最好两个都设置,既改端口也加密码,双保险,当然密码也不要简单到随便一个字典库就能破解的那种,尽量复杂点。

与 Redis 安装方式类似,不过这里获取的是指定版本的 MySQL 。

首先提到代码管理平台,大家首先想到的肯定是 Github 以及 Gitlab,这两种大家平时应该用到的比较多,开源软件用的大部分是 Github,公司内部大部分使用的是 Gitlab。Gogs 也是一种代码管理平台,相比 Gitlab 来说相对轻量级。

我这里为什么要使用 Gogs 而不使用 Gitlab 呢? 主要是个人服务器配置跟不上啊!!!

尝试了安装 Gitlab,安装后服务器完全跑不起来了,本来个人服务器性能就不是很好,上面还跑了几个程序,安装完 Gitlab 后连博客网站都打不开,果断放弃。官方推荐的安装 Gitlab 硬件配置是 4 核 8G,相对来说 Gogs 就轻量很多,安装后基本对服务器没什么影响,而且 Docker 安装十分方便。

注意修改端口号:



如果在上一步点击安装后一切正常那边跳过这一步,如果出现 MySQL error: The maximum column size is 767 bytes,那么很高兴你遇到一个坑,不过别怕,我们可以解决它只需要对 mysql 进行参数的设置就好了。

解决方案:

微服务基础服务之docker篇

什么是docker

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

传统虚拟化

Docker

为什么要用docker

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。

而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

特性容器虚拟机 启动秒级分钟级 硬盘使用一般为MB一般为GB 性能接近原生弱于 系统支持量单机支持上千个容器一般几十个

基本概念

我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

Centos安装docker18

常用的docker命令

常用的docker镜像

redis

mysql

微服务基础服务之docker篇

什么是docker

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

传统虚拟化

Docker

为什么要用docker

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。

而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

特性容器虚拟机 启动秒级分钟级 硬盘使用一般为MB一般为GB 性能接近原生弱于 系统支持量单机支持上千个容器一般几十个

基本概念

我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

Centos安装docker18

常用的docker命令

常用的docker镜像

redis

mysql

如何在 Windows 操作系统中运行 Docker 客户端

下面是安装 Docker 客户端并在上面运行容器的简单步骤。

1. 下载 Boot2Docker

在我们开始安装之前,我们需要 Boot2Docker 的可执行文件。可以从 它的 Github 下载最新版本的 Boot2Docker。在这篇指南中,我们从网站中下载版本 v1.6.1。我们从那网页中用我们喜欢的浏览器或者下载管理器下载了名为 docker-install.exe 的文件。

2. 安装 Boot2Docker

现在我们运行安装文件,它会安装 Window Docker 客户端、用于 Windows 的 Git(MSYS-git)、VirtualBox、Boot2Docker Linux ISO 以及 Boot2Docker 管理工具,这些对于开箱即用地运行全功能的 Docker 引擎都至关重要。

3. 运行 Boot2Docker

安装完成必要的组件之后,我们从桌面上的“Boot2Docker Start”快捷方式启动 Boot2Docker。它会要求你输入以后用于验证的 SSH 密钥。然后会启动一个配置好的用于管理在虚拟机中运行的 Docker 的 unix shell。

为了检查是否正确配置,运行下面的 docker version 命令。

docker version

4. 运行 Docker

由于 Boot2Docker Start 自动启动了一个已经正确设置好环境变量的 shell,我们可以马上开始使用 Docker。请注意,如果我们要将 Boot2Docker 作为一个远程 Docker 守护进程,那么不要在 docker 命令之前加 sudo。

现在,让我们来试试 hello-world 例子镜像,它会下载 hello-world 镜像,运行并输出 "Hello from Docker" 信息。

$ docker run hello-world

5. 使用命令提示符(CMD) 运行 Docker

现在,如果你想开始用命令提示符使用 Docker,你可以打开命令提示符(CMD.exe)。由于 Boot2Docker 要求 ssh.exe 在 PATH 中,我们需要在命令提示符中输入以下命令使得 %PATH% 环境变量中包括 Git 安装目录下的 bin 文件夹。

set PATH=%PATH%;"c:\Program Files (x86)\Git\bin"

运行上面的命令之后,我们可以在命令提示符中运行 boot2docker start 启动 Boot2Docker 虚拟机。

boot2docker start

注意: 如果你看到 machine does no exist 的错误信息,就运行 boot2docker init 命令。

然后复制上图中控制台标出命令到 cmd.exe 中为控制台窗口设置环境变量,然后我们就可以像平常一样运行 docker 容器了。

6. 使用 PowerShell 运行 Docker

为了能在 PowerShell 中运行 Docker,我们需要启动一个 PowerShell 窗口并添加 ssh.exe 到 PATH 变量。

$Env:Path="${Env:Path};c:\Program Files (x86)\Git\bin"

运行完上面的命令,我们还需要运行

boot2docker start

这会打印用于设置环境变量连接到虚拟机内部运行的 Docker 的 PowerShell 命令。我们只需要在 PowerShell 中运行这些命令就可以和平常一样运行 docker 容器。

7. 用 PUTTY 登录

Boot2Docker 会在%USERPROFILE%.ssh 目录生成和使用用于登录的公共和私有密钥,我们也需要使用这个文件夹中的私有密钥。私有密钥需要转换为 PuTTY 的格式。我们可以通过 puttygen.exe 实现。

我们需要打开 puttygen.exe 并从 %USERPROFILE%.ssh\id_boot2docker 中导入("File"->"Load" 菜单)私钥,然后点击 "Save Private Key"。然后用保存的文件通过 PuTTY 用 docker@127.0.0.1:2022 登录。

8. Boot2Docker 选项

Boot2Docker 管理工具提供了一些命令,如下所示。

$ boot2docker

Usage: boot2docker.exe [<options>]{help|init|up|ssh|save|down|poweroff|reset|restart|config|status|info|ip|shellinit|delete|download|upgrade|version}[<args>]

总结

通过 Docker Windows 客户端使用 Docker 很有趣。Boot2Docker 管理工具是一个能使任何 Docker 容器能像在 Linux 主机上平滑运行的很棒的应用程序。如果你更仔细的话,你会发现 boot2docker 默认用户的用户名是 docker,密码是 tcuser。最新版本的 boot2docker 设置了一个 host-only 的网络适配器提供访问容器的端口。一般来说是 192.168.59.103,但可以通过 VirtualBox 的 DHCP 实现改变。

如果你有任何问题、建议、反馈,请在下面的评论框中写下来然后我们可以改进或者更新我们的内容。非常感谢!Enjoy:-)

如何在Ubuntu 14.10 上安装WordPress? http://www.linuxidc.com/Linux/2015-02/112648.htm

Docker安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm

在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker http://www.linuxidc.com/Linux/2014-10/108184.htm

Docker安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu 14.04安装Docker http://www.linuxidc.com/linux/2014-08/105656.htm

阿里云CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm

显示全文