<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>易博云天 &#187; Linux</title>
	<atom:link href="http://www.eavea.com/blog/index.php/tag/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://www.eavea.com/blog</link>
	<description>专注技术：学习、交流、分享、免费，每天进步一点点！</description>
	<lastBuildDate>Mon, 13 Mar 2023 07:04:16 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6.1</generator>
		<item>
		<title>Nginx正向代理与反向代理</title>
		<link>http://www.eavea.com/blog/index.php/nginxzhengxiangdailiyufanxiangdaili.html</link>
		<comments>http://www.eavea.com/blog/index.php/nginxzhengxiangdailiyufanxiangdaili.html#comments</comments>
		<pubDate>Tue, 14 Apr 2020 07:48:28 +0000</pubDate>
		<dc:creator>eavea</dc:creator>
				<category><![CDATA[运维知识]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nginx]]></category>

		<guid isPermaLink="false">http://www.eavea.com/blog/?p=62</guid>
		<description><![CDATA[Nginx正向代理与反向代理 正向代理与反向代理的区别，以及用Nginx配置实现代理服务。 一、正向代理与反向 [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>Nginx正向代理与反向代理</div>
<blockquote><p>正向代理与反向代理的区别，以及用Nginx配置实现代理服务。</p></blockquote>
<h2 id="toc-heading-1">一、正向代理与反向代理</h2>
<h3 id="toc-heading-2">1. 正向代理</h3>
<p>正向代理其实相当于请求的中继，比如说，如果某个网站国内无法访问，也就是被墙了，我可以选择两种方式：<br />
一个是配置代理服务器，第二种就是 VPN。</p>
<p>其实两种技术原理差不太多，如果说我自己访问不到这个网站，而这时可以通过一台可以访问到这个网站的服务器，也就是代理服务器，来进行访问，这台代理服务器，分析我们请求的信息，然后去对应的要去的网站上将内容取回来发给我，这样我就能读到想要访问的网站上的内容了，通过一下图片，可以很清晰的看出其原理：</p>
<div><img alt="forward_proxy.png" src="https://www.wenyuanblog.com/medias/blogimages/forward_proxy.png" width="500" height="300" align="center" data-original="/medias/blogimages/forward_proxy.png" /></div>
<p>&nbsp;</p>
<h3 id="toc-heading-3">2. 反向代理</h3>
<p>反向代理比正向代理更加透明，客户端并不知道访问的是代理服务器，当客户端请求一个网址的时候，会经过反向代理服务器，而这台反向代理服务器，会根据客户端的请求，将请求转发到内网服务器中，内网服务器处理请求并返回结果到反向代理服务器上，通过反向代理服务器，将结果最终返回到客户端，详情如图：</p>
<div><img alt="reverse_proxy.png" src="https://www.wenyuanblog.com/medias/blogimages/reverse_proxy.png" width="500" height="300" align="center" data-original="/medias/blogimages/reverse_proxy.png" /></div>
<p>&nbsp;</p>
<p><strong>简单来说：</strong><br />
正向代理代理的是客户端（如通过代理访问谷歌），而反向代理代理的是服务器（如 Nginx 代理 PHP 服务器）。</p>
<h2 id="toc-heading-4">二、通过SSH反向代理实现内网穿透</h2>
<h3 id="toc-heading-5">1. 背景</h3>
<p>我用学校实验室的一台服务器在跑数据，但是这台服务器没有公网 ip，只有学校内网 ip，故我只能到实验室登录。但有时候，需要在宿舍或者家里远程连接这台服务器。</p>
<p>于是，我就用到了<strong>反向代理</strong>。前提是我有一台公网 ip 的服务器（例如，阿里的学生机，或者 vultr 的 VPS 都可以）。</p>
<p>首先，准备好这两台服务器：</p>
<ul>
<li>学校实验室服务器（SchoolServer）
<ul>
<li>IP：192.168.10.50</li>
<li>ssh端口：22</li>
<li>用户：student</li>
<li>密码：helloworld</li>
</ul>
</li>
<li>我的外网服务器（MyServer）
<ul>
<li>IP：111.13.100.91</li>
<li>ssh端口：22</li>
<li>用户：wenyuanblog</li>
<li>密码：<a href="http://www.wenyuanblog.com/" target="_0">www.wenyuanblog.com</a></li>
</ul>
</li>
</ul>
<h3 id="toc-heading-6">2. 实现原理</h3>
<p>在学校内网服务器（以下简称 SchoolServer）中，通过 SSH 设置反向代理，指向我的公网服务器（以下简称 MyServer，该服务器作为反向代理服务器），之后用客户端连接 MyServer 时，MyServer 会把请求转交给 SchoolServer，从而间接登录学校的内网服务器。</p>
<p><strong>整个过程，我们作为客户端是感知不到代理服务器的存在的。客户端是否能感知代理服务器的存在，是区别正向代理和反向代理的关键。</strong></p>
<p>SSH 参数介绍</p>
<div>bash<i></i><i></i></div>
<pre><code># 反向代理命令
ssh -fCNR

# 正向代理命令
ssh -fCNL
</code></pre>
<p>参数说明</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>含义</th>
</tr>
</thead>
<tbody>
<tr>
<td>-f</td>
<td>后台执行 ssh 指令</td>
</tr>
<tr>
<td>-C</td>
<td>允许压缩数据</td>
</tr>
<tr>
<td>-N</td>
<td>不执行远程指令</td>
</tr>
<tr>
<td>-R</td>
<td>将远程服务器的某个端口转发到本地服务器的指定端口</td>
</tr>
<tr>
<td>-L</td>
<td>将本地服务器的某个端口转发到远程服务器的指定端口</td>
</tr>
<tr>
<td>-p</td>
<td>指定远程服务器的端口</td>
</tr>
</tbody>
</table>
<h3 id="toc-heading-7">3. 内网服务器操作</h3>
<p>登录 SchoolServer，进行如下操作：</p>
<div>bash<i></i><i></i></div>
<pre><code># ssh -N -f -R MyServer端口:127.0.0.1:本地端口 MyServer用户@MyServerIP
ssh -N -f -R 20022:127.0.0.1:22 wenyuanblog@111.13.100.91
</code></pre>
<p>这句命令的意思是，将 MyServer 的 20022 端口转发至 SchoolServer 22 端口，最后是 MyServer 用户名和 IP。<br />
使用 <code>ps aux | grep ssh</code> 来查看是否运行。</p>
<h3 id="toc-heading-8">4. 公网服务器操作</h3>
<p>登录 MyServer，进行如下操作：</p>
<div>bash<i></i><i></i></div>
<pre><code># ssh SchoolServer用户名@127.0.0.1 -p 代理端口 -L MyServerIP:代理端口:127.0.0.1:22
ssh student@127.0.0.1 -p 20022 -L 111.13.100.91:20022:127.0.0.1:22
</code></pre>
<p>执行这条命名，输入 student 用户的密码，现在就已经跳转登录到内网服务器了。</p>
<p>保持当前窗口的登录状态，这时候使用 xshell、beyondcompare，就只要在登录的配置项里 IP 填 MyServer 的 IP，端口填 20022 就好了。</p>
<h2 id="toc-heading-9">三、Nginx配置实现代理服务</h2>
<h3 id="toc-heading-10">1. 背景</h3>
<p>到目前为止，我们都还没有用到 Nginx 的代理服务。那什么时候会需要呢，现在有了如下需求：</p>
<p>在学校内网服务器上跑了一个网页（实验室代码库 GitLab），我们需要在宿舍或者家里访问这个内部网页。</p>
<p>该项目是部署在内网的，所以在内网直接访问不会有问题，而从外网访问当然也就访问不到。</p>
<ul>
<li>学校实验室服务器（SchoolServer）
<ul>
<li>IP：192.168.10.50</li>
<li>页面 url：192.168.10.50:8000</li>
</ul>
</li>
<li>我的外网服务器（MyServer）
<ul>
<li>IP：111.13.100.91</li>
<li>站点域名：<a href="http://www.wenyuanblog.com/" target="_0">www.wenyuanblog.com</a></li>
</ul>
</li>
</ul>
<h3 id="toc-heading-11">2. 实现原理</h3>
<p>还是通过反向代理来实现。</p>
<p>通过 Nginx 实现端口转发，最后可以通过公网服务器的域名+端口号访问学校内网服务器的页面。<br />
即访问 <a href="http://www.wenyuanblog.com:28000/" target="_0">www.wenyuanblog.com:28000</a> 时，将得到 192.168.10.50:8000（实验室代码库）的页面。<br />
当然了，这样配置的话，我不得不记住 28000 这个端口号，显然不方便。</p>
<p>所以下面的配置，我将配置成二级域名的形式，即 gitlab.wenyuanblog.com -&gt; 192.168.10.50:8000</p>
<h3 id="toc-heading-12">3. 内网服务器操作</h3>
<p>登录 SchoolServer，进行如下操作（和二&gt;中一样）：</p>
<div>bash<i></i><i></i></div>
<pre><code># ssh -N -f -R MyServer端口:127.0.0.1:本地端口 MyServer用户@MyServerIP
ssh -N -f -R 28000:127.0.0.1:8000 wenyuanblog@111.13.100.91
</code></pre>
<p>这句命令的意思是，将 MyServer 的 28000 端口转发至 SchoolServer 8000 端口，最后是 MyServer 用户名和 IP。</p>
<p>使用 <code>ps aux | grep ssh</code> 来查看是否运行。</p>
<h3 id="toc-heading-13">4. 公网服务器操作</h3>
<p>登录 MyServer，增加一份 Nginx 的配置文件，我习惯放于 <code>/usr/local/nginx/conf/vhosts</code> 目录下，考虑到是代理的配置文件，我取名为 <code>school.proxy</code>。</p>
<p><code>vim school.proxy</code>，配置如下：</p>
<div>bash<i></i><i></i></div>
<pre><code>upstream school_gitlab {
        server 127.0.0.1:28000;
}
server {
        listen       80;
        server_name   gitlab.wenyuanblog.com;
        location / {
            proxy_pass http://school_gitlab;
            proxy_set_header Host $host;
        }
        access_log  /var/log/nginx/access/school_gitlab.log;
}
</code></pre>
<p>现在，我就可以通过二级域名访问学校实验室的 GitLab 了。</p>
<p>整个过程中，在 MyServer 的数据流向如下：<br />
<strong>二级域名访问</strong> -&gt; <strong>MyServer:80</strong> -&gt; <strong>nginx 分发</strong> -&gt; <strong>MyServer:28000</strong> -&gt; <strong>SchoolServer:8080</strong></p>
<h2 id="toc-heading-14">四、补充：用autossh代替ssh</h2>
<h3 id="toc-heading-15">1. 背景</h3>
<p>其实整个过程到上面为止已经结束了，目前已经通过反向代理实现内网穿透，平时肯定够用了。<br />
如果想追求更进一步的配置，可以继续往下看。</p>
<p>什么是更进一步的配置呢？</p>
<p>在前面二、三两部分内容的「内网服务器操作」时，我们使用 ssh 建立的反向连接其实很不稳定，长时间不使用连接就会自动释放，这个时候就需要使用 autossh。<br />
autossh 的参数与 ssh 的参数是一致的，但是不同的是，在隧道断开的时候，autossh 会自动重新连接而 ssh 不会。</p>
<h3 id="toc-heading-16">2. 步骤修改</h3>
<p>只需改动一个地方，那就是上面二和三里面的「3. 内网服务器操作」，其他操作不变。</p>
<p><strong>现在如下操作：</strong></p>
<p><strong>Step1. 配置公钥和私钥，实现免密码登录</strong>（为后面的脚本做准备）</p>
<ul>
<li>登录内网服务器（SchoolServer）<br />
切换到普通用户 student，不建议用 root。<br />
执行命令：<code>ssh-keygen -t rsa -P ''</code>，直接 ssh-keygen 然后三次回车就可以了。</p>
<ul>
<li><code>-P</code> 表示密码，<code>-P ''</code> 就表示空密码，也可以不用 <code>-P</code> 参数，这样就要三车回车，用 <code>-P</code> 就一次回车。</li>
<li>它在 <code>/home/student</code> 下生成 <code>.ssh</code> 目录，<code>.ssh</code> 下有 <code>id_rsa</code> 和 <code>id_rsa.pub</code>。（这样就生成了公钥/私钥对）</li>
</ul>
</li>
<li>把内网服务器（SchoolServer）下的 <code>id_rsa.pub</code> 复制到公网服务器（MyServer）下<br />
执行命令：<code>scp .ssh/id_rsa.pub wenyuanblog@111.13.100.91:/home/wenyuanblog/id_rsa.pub</code><br />
由于还没有免密码登录的，所以要输入密码。</li>
<li>公网服务器（MyServer）加入内网服务器（SchoolServer）的公钥<br />
登录公网服务器（MyServer），切换到 wenyuanblog 账户（下面的步骤不要用 root）。<br />
如果公网服务器的 wenyuanblog 目录下没有 <code>.ssh</code> 和 <code>authorized_keys</code> 文件则创建这个文件夹和文件。<br />
把从内网服务器复制的 <code>id_rsa.pub</code> 添加到 <code>.ssh/authorzied_keys</code> 文件里，即执行命令：<br />
<code>cat id_rsa.pub &gt;&gt; .ssh/authorized_keys</code><br />
<code>cat .ssh/authorized_keys</code><br />
<code>chmod 644 .ssh/authorized_keys</code></p>
<ul>
<li>authorized_keys 的权限要是 644 。</li>
</ul>
</li>
<li>内网服务器（SchoolServer）登录公网服务器（MyServer）试试<br />
回到内网服务器（SchoolServer），用之前的普通用户 student，执行：<code>ssh wenyuanblog@111.13.100.91</code><br />
第一次登录要 yes，现在内网机器就可以免密码登录公网机器了。</li>
</ul>
<p><strong>Step2. 登录内网服务器，启动 autossh，维持 ssh 连接</strong></p>
<p>上面提过，使用 ssh 建立的反向连接很不稳定，长时间不使用连接就会自动释放，这个时候就需要使用 autossh。</p>
<p>一般新机器需要安装 autossh：<br />
<code>yum install autossh</code>（CentOS）<br />
<code>apt-get install autossh</code>（Ubuntu）</p>
<p>切换到 wenyuanblog 用户（非 root 用户），在其 <code>home</code> 目录下创建一个 <code>autossh.sh</code> 脚本，开辟连接到公网服务器的隧道。<br />
<code>autossh.sh</code> 脚本内写入要开辟的端口：</p>
<div>bash<i></i><i></i></div>
<pre><code>#!/bin/bash
/usr/bin/autossh -NR 0.0.0.0:20022:127.0.0.1:22  -i ~/.ssh/id_rsa wenyuanblog@公网IP -p 22 &gt;&gt; ~/log/ssh_nat.log 2&gt;&amp;1 &amp;
/usr/bin/autossh -NR 0.0.0.0:28000:127.0.0.1:8000 -i ~/.ssh/id_rsa wenyuanblog@公网IP -p 22 &gt;&gt; ~/log/ssh_nat.log 2&gt;&amp;1 &amp;
</code></pre>
<p>这两行就分别代替了上面二和三中「3. 内网服务器操作」里的内容。</p>
<p>运行脚本：<br />
<code>chmod +x autossh.sh</code><br />
<code>sh autossh.sh</code></p>
<p>使用 <code>ps -ef|grep autossh</code> 和 <code>ps -ef|grep ssh</code> 查看当前运行中的 autossh 任务进程。</p>
<p>其余步骤不变，完成。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eavea.com/blog/index.php/nginxzhengxiangdailiyufanxiangdaili.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nmap基础用法</title>
		<link>http://www.eavea.com/blog/index.php/nmapjichuyongfa.html</link>
		<comments>http://www.eavea.com/blog/index.php/nmapjichuyongfa.html#comments</comments>
		<pubDate>Tue, 14 Apr 2020 07:45:26 +0000</pubDate>
		<dc:creator>eavea</dc:creator>
				<category><![CDATA[运维知识]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nmap]]></category>

		<guid isPermaLink="false">http://www.eavea.com/blog/?p=60</guid>
		<description><![CDATA[Nmap基础用法 自己搜集总结的Nmap常用命令及参数说明。 一、简介 NMap，也就是Network Map [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>Nmap基础用法</div>
<blockquote><p>自己搜集总结的Nmap常用命令及参数说明。</p></blockquote>
<h2 id="一、简介">一、简介</h2>
<p>NMap，也就是Network Mapper，是Linux下的网络扫描和嗅探工具包。<br />
nmap是在网络安全渗透测试中经常会用到的强大的扫描器，功能很强大。</p>
<h2 id="二、参数说明">二、参数说明</h2>
<p>-sP 渗透内网之后判断当前网络哪些主机在线</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -sP 192.168.1/255
</code></pre>
<p>-vv 显示详细的扫描过程<br />
-sS 使用SYN半开式扫描，这种扫描方式使得扫描结果更加正确（又称半开放,或隐身扫描）</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -vv -sS IP
</code></pre>
<p>-O 大写O代表OS，判断主机操作系统</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -O IP
</code></pre>
<p>延时策略<br />
-T(0-5) 默认为 3<br />
0 即 Paranoid 模式。为了避开IDS的检测使扫描速度极慢，nmap串所有的扫描，每隔至少5分钟发送一个包。<br />
1 即 Sneaky 模式。也差不多，只是数据包的发送间隔是15秒。<br />
2 即 Polite 模式。不增加太大的网络负载，串行每个探测，并使每个探测间隔0.4秒。<br />
3 即 Normal 模式。nmap的默认选项，在不使网络过载或者主机/端口丢失的情况下尽可能快速地扫描。<br />
4 即 Aggressive 模式。设置5分钟的超时限制，对每台主机的扫描时间不超过5分钟，并且对每次探测回应的等待时间不超过1.5秒。<br />
5 即 lnsane 模式。只适合快速的网络或者不在意丢失默些信息，每台主机的超时限制为75秒，对每次探测只等待0.3秒。</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -sS -T1 IP
</code></pre>
<p>-sV 探测端口的服务类型/具体版本等信息</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -vv -sV IP
</code></pre>
<p>-p 端口号 对某个端口的服务版本进行详细探测，有助于升入的针对性攻击，比如缓冲溢出攻击</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -vv -sV IP -p 21
</code></pre>
<p>适用于内外网的探测，以内网操作为示例（外网参数同）</p>
<div>bash<i></i><i></i></div>
<pre><code>简单端口扫描：nmap -vv -sT(sS、sF、sU、sA) 192.168.0.1 -D 127.0.0.1
（-D 伪造的地址）

OS检测：nmap -vv -sS -O 192.168.0.1

RPC鉴别：nmap -sS -sR 192.168.0.1
Linux 上的 portmap 就是一个简单的 RPC 服务，监听端口为111（默认）

Ping 扫射：nmap -sP 172.16.15.0/24
</code></pre>
<h2 id="三、十条nmap常用的扫描命令">三、十条nmap常用的扫描命令</h2>
<p>1）获取远程主机的系统类型及开放端口</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -sS -P0 -sV -O &lt;target&gt;
</code></pre>
<p>这里的 &lt; target &gt; 可以是单一IP，或主机名，或域名，或子网<br />
-sS TCP SYN 扫描（又称半开放，或隐身扫描）<br />
-P0 允许你关闭 ICMP pings.<br />
-sV 打开系统版本检测<br />
-O 尝试识别远程操作系统<br />
其它选项：<br />
-A 同时启用操作系统指纹识别和版本检测<br />
-v 详细输出扫描情况<br />
nmap -sS -P0 -A -v</p>
<p>2）列出开放了指定端口的主机列表</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -sT -p 80 -oG – 192.168.1.* | grep open
</code></pre>
<p>更改-p参数来指定端口号。参考“man nmap”中指定地址范围的不同方法。</p>
<p>3）在网络中寻找所有在线主机</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -sP 192.168.0.*
# 或者也可用以下命令指定 subnet：
nmap -sP 192.168.0.0/24
</code></pre>
<p>4）Ping指定范围内的 IP 地址</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -sP 192.168.1.100-254
</code></pre>
<p>nmap接受多种寻址符号、多个目标/范围等。</p>
<p>5）在某段子网上查找未占用的IP</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -T4 -sP 192.168.2.0/24 &amp;&amp; egrep "00:00:00:00:00:00" /proc/net/arp
</code></pre>
<p>6）在局域网上扫描Conficker蠕虫病毒</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -PN -T4 -p139,445 -n -v -script=smb-check-vulns -script-args safe=1 192.168.0.1-254
</code></pre>
<p>将192.168.0.1-256替换成你想要检查的IP</p>
<p>7）扫描网络上的恶意接入点（rogue APs）</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -A -p1-85,113,443,8080-8100 -T4 -min-hostgroup 50 -max-rtt-timeout 2000 -initial-rtt-timeout 300 -max-retries 3 -host-timeout 20m -max-scan-delay 1000 -oA wapscan 10.0.0.0/8
</code></pre>
<p>我用这个扫描命令成功地在一个非常大的网络中找到许多流氓APs。</p>
<p>8）使用诱饵扫描方法来扫描主机端口<br />
在扫描端口时使用诱饵，以避免被系统管理员捕获</p>
<div>bash<i></i><i></i></div>
<pre><code>sudo nmap -sS 192.168.0.10 -D 192.168.0.2
</code></pre>
<p>扫描目标设备/计算机（192.168.0.10）上打开的端口，同时设置一个诱饵地址（192.168.0.2）。这将在目标安全日志中显示诱饵ip地址，而不是您的ip。诱饵地址必须是活的。检查/var/log/secure上的目标安全日志，确保它工作正常。</p>
<p>9）子网的反向DNS记录列表</p>
<div>bash<i></i><i></i></div>
<pre><code>nmap -R -sL 209.85.229.99/27 | awk '{if($3=="not")print"("$2") no PTR";else print$3" is "$2}' | grep '('
</code></pre>
<p>10）显示网络上共有多少台Linux及Win设备</p>
<div>bash<i></i><i></i></div>
<pre><code>sudo nmap -F -O 192.168.1.1-255 | grep "Running: " &gt; /tmp/os; echo "$(cat /tmp/os | grep Linux | wc -l) Linux device(s)"; echo "$(cat /tmp/os | grep Windows | wc -l) Window(s) devices"
</code></pre>
<h2 id="四、nmap命令完整思维导图">四、nmap命令完整思维导图</h2>
]]></content:encoded>
			<wfw:commentRss>http://www.eavea.com/blog/index.php/nmapjichuyongfa.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux连接MySQL命令表</title>
		<link>http://www.eavea.com/blog/index.php/linuxlianjiemysqlminglingbiao.html</link>
		<comments>http://www.eavea.com/blog/index.php/linuxlianjiemysqlminglingbiao.html#comments</comments>
		<pubDate>Tue, 14 Apr 2020 07:42:47 +0000</pubDate>
		<dc:creator>eavea</dc:creator>
				<category><![CDATA[运维知识]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.eavea.com/blog/?p=59</guid>
		<description><![CDATA[Linux连接MySQL命令表 Linux环境下通过一些命令快速操作数据库。 bash # 连接mysql（注 [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>Linux连接MySQL命令表</div>
<blockquote><p>Linux环境下通过一些命令快速操作数据库。</p></blockquote>
<div>bash<i></i><i></i></div>
<pre><code># 连接mysql（注：-h、-P、-u、-p后面可以不用加空格）
mysql -h主机地址 -P端口 -u用户名 -p用户密码

# 显示数据库
mysql&gt; show databases;

# 使用某个数据库
mysql&gt; use xxx;

# 查看该数据库中的表
mysql&gt; show tables;

# 显示数据表的结构
mysql&gt; describe 表名;

# 显示表中的记录（注意表名大小写）
mysql&gt; select * from 表名;

# 创建数据库
mysql&gt; create database 数据库名;

# 建表  
use 库名;
create table 表名 （跟上字段列表）;
# 例如：创建表user,表中有id（序号，自增），name（姓名）,gender（性别）,birthday（出身年月）四个字段  
mysql&gt; use blog;  
mysql&gt; create table user (id int(3) auto_increment not null primary key, name char(8),gender char(2),birthday date);
mysql&gt; describe name;

# 往表中增加数据
# 例如：增加几条相关纪录。  
mysql&gt; insert into user values('','张三','男','2019-01-01');  
mysql&gt; insert into user values('','李四','女','2020-06-01');
mysql&gt; select * from name;

# 修改表中数据
# 例如：将张三的出生年月改为2019-06-01
mysql&gt; update user set birthday='2019-01-01' where name='张三';  

# 删除某表中的数据  
# 例如：删除名字是张三的数据。  
mysql&gt; delete from user where name='张三';  

# 删库和删表  
mysql&gt; drop database 库名;
mysql&gt; drop table 表名;

# 退出mysql
mysql&gt; exit (回车)
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.eavea.com/blog/index.php/linuxlianjiemysqlminglingbiao.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows环境安装MySQL5.7</title>
		<link>http://www.eavea.com/blog/index.php/windowshuanjinganzhuangmysql5-7.html</link>
		<comments>http://www.eavea.com/blog/index.php/windowshuanjinganzhuangmysql5-7.html#comments</comments>
		<pubDate>Tue, 14 Apr 2020 07:41:17 +0000</pubDate>
		<dc:creator>eavea</dc:creator>
				<category><![CDATA[运维知识]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.eavea.com/blog/?p=57</guid>
		<description><![CDATA[Windows环境安装MySQL5.7 在Windows开发环境下安装MySQL5.7，使用官方免安装软件包， [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>Windows环境安装MySQL5.7</div>
<blockquote><p>在Windows开发环境下安装MySQL5.7，使用官方免安装软件包，手动启停服务和编写批处理脚本实现MySQL启停。</p></blockquote>
<h2 id="toc-heading-1">一、安装</h2>
<h3 id="toc-heading-2">1. 下载免安装软件包</h3>
<p>我比较喜欢免安装版本的，比较干净。<br />
到官网的开发者专区下载MySQL（Community版）免安装软件包，<br />
下载地址：<a href="https://dev.mysql.com/downloads/mysql/" target="_0" rel="external nofollow noopener noreferrer">https://dev.mysql.com/downloads/mysql/</a><br />
* 当前最新版本是8.0，如果需要下载其它版本，可以点击页面中的 Looking for previous GA versions? （未来版本超链接入口可能会有变化）</p>
<div><img alt="mysql_download_in_windows.png" src="https://www.wenyuanblog.com/medias/blogimages/mysql_download_in_windows.png" data-original="/medias/blogimages/mysql_download_in_windows.png" /></div>
<p>&nbsp;</p>
<h3 id="toc-heading-3">2. 解压压缩包</h3>
<p>将下载的软件包解压并重命名到 <code>D:\Program Files\mysql-5.7</code> 目录下。</p>
<div><img alt="mysql_unzip_in_windows.png" src="https://www.wenyuanblog.com/medias/blogimages/mysql_unzip_in_windows.png" data-original="/medias/blogimages/mysql_unzip_in_windows.png" /></div>
<p>&nbsp;</p>
<h3 id="toc-heading-4">3. 进入命令行终端</h3>
<p>以Window10为例，<br />
【开始】-【搜索程序和文件】输入 <code>cmd</code>，在搜索到的程序图标上点击鼠标右键，选择【以管理员身份运行】。</p>
<h3 id="toc-heading-5">4. 进入命令行终端</h3>
<p>依次输入如下指令：</p>
<pre><code>C:\Windows\system32&gt; d:
D:\&gt; cd D:\Program Files\mysql-5.7\bin
</code></pre>
<h3 id="toc-heading-6">5. 初始化MySQL</h3>
<p>初始化可以选择带有随机密码或无密码，建议采用无密码初始化（可以设置密码），以免随机密码丢失。</p>
<pre><code>D:\Program Files\mysql-5.7\bin&gt; mysqld --initialize（随机密码）

D:\Program Files\mysql-5.7\bin&gt; mysqld --initialize-insecure（无密码）
</code></pre>
<h3 id="toc-heading-7">6. 安装mysqld</h3>
<pre><code>D:\Program Files\mysql-5.7\bin&gt; mysqld -install
</code></pre>
<p>* <code>mysql</code> 用于执行SQL命令，<code>mysqld</code> 用于执行数据库命令。</p>
<h3 id="toc-heading-8">7. 启动MySQL服务</h3>
<pre><code>D:\Program Files\mysql-5.7\bin&gt; net start mysql
</code></pre>
<div><img alt="mysql_start_in_windows.png" src="https://www.wenyuanblog.com/medias/blogimages/mysql_start_in_windows.png" data-original="/medias/blogimages/mysql_start_in_windows.png" /></div>
<p>&nbsp;</p>
<h3 id="toc-heading-9">8. 登录MySQL</h3>
<pre><code>D:\Program Files\mysql-5.7\bin&gt; mysql -u root -p
Enter password:（无密码则直接回车）
</code></pre>
<h2 id="toc-heading-10">二、添加root账号登录密码</h2>
<h3 id="toc-heading-11">1. 停止MySQL服务</h3>
<pre><code>D:\Program Files\mysql-5.7\bin&gt; net stop mysql
</code></pre>
<h3 id="toc-heading-12">2. 跳过密码验证</h3>
<pre><code>D:\Program Files\mysql-5.7\bin&gt; mysqld --console --skip-grant-tables
</code></pre>
<div><img alt="mysql_skip_grant_tables_in_windows.png" src="https://www.wenyuanblog.com/medias/blogimages/mysql_skip_grant_tables_in_windows.png" data-original="/medias/blogimages/mysql_skip_grant_tables_in_windows.png" /></div>
<p>此时，当前命令行终端窗口不能再输入命令了，我们需要再打开一个命令行窗口，进入 <code>D:\Program Files\mysql-5.7\bin&gt;</code>，方式和前面一样，即输入下面两行命令：</p>
<p>&nbsp;</p>
<pre><code>C:\Windows\system32&gt; d:
D:\&gt; cd D:\Program Files\mysql-5.7\bin
</code></pre>
<h3 id="toc-heading-13">3. 登录MySQL</h3>
<pre><code>D:\Program Files\mysql-5.7\bin&gt; mysql -u root -p
Enter password:（无需密码直接回车）
</code></pre>
<h3 id="toc-heading-14">4. 切换数据库</h3>
<pre><code>mysql&gt; use mysql;
</code></pre>
<h3 id="toc-heading-15">5. 执行修改密码的语句</h3>
<p>当前新版本的MySQL有密码规则：必须包含大写字母、小写字母、特殊符号并且8位以上。<br />
我们这边是强行修改字段的，会有警告，但现在是开发环境，可以不管它，就把密码设置成 <code>123456</code> 即可。</p>
<pre><code>mysql&gt; update mysql.user set authentication_string=password('123456') where user='root';
</code></pre>
<h3 id="toc-heading-16">6. 刷新权限并退出MySQL</h3>
<pre><code>mysql&gt; flush privileges;
mysql&gt; quit;
</code></pre>
<h3 id="toc-heading-17">7. 终止mysqld</h3>
<p>回到第一个命令行窗口，按 “Ctrl+C” 结束进程或者按 “Ctrl+Alt+Del” 打开任务管理器，结束“mysqld.exe”的进程。</p>
<h3 id="toc-heading-18">8. 重新启动MySQL服务</h3>
<pre><code>D:\Program Files\mysql-5.7\bin&gt; net start mysql
</code></pre>
<h3 id="toc-heading-19">9. 登录MySQL</h3>
<pre><code>D:\Program Files\mysql-5.7\bin&gt; mysql -u root -p
Enter password:123456
</code></pre>
<p>此时必须使用刚添加的密码才能登录MySQL。</p>
<h2 id="toc-heading-20">三、编写批处理脚本实现MySQL启停</h2>
<p>在前面安装完MySQL后，我们每次开机都是通过输入命令来切换目录、启停MySQL的，长期使用显然比较麻烦，为了偷懒，下面编写一个批处理脚本。</p>
<h3 id="toc-heading-21">1. 系统环境变量配置</h3>
<p>（1）新增系统变量<br />
变量名：MYSQL_HOME<br />
变量值：MySQL解压目录，如 D:\Program Files\mysql-5.7<br />
<img alt="mysql_global_config_system_variable.png" src="https://www.wenyuanblog.com/medias/blogimages/mysql_global_config_system_variable.png" data-original="/medias/blogimages/mysql_global_config_system_variable.png" /><br />
（2）追加PATH<br />
%MYSQL_HOME%\bin<br />
<img alt="mysql_global_config_path.png" src="https://www.wenyuanblog.com/medias/blogimages/mysql_global_config_path.png" data-original="/medias/blogimages/mysql_global_config_path.png" /></p>
<h3 id="toc-heading-22">2. 编写批处理脚本</h3>
<p>创建一个文件，并以 <code>.bat</code> 为后缀，如 <code>mysql.bat</code>，打开编辑，输入如下内容。输入后以管理员身份运行。（前提要MySQL已经安装或配置成功）</p>
<pre><code>cls 
@echo off
:设置窗口字体颜色
color 0F 
:设置窗口标题
TITLE MySQL管理程序 by winyuan

call :checkAdmin

goto menu
:菜单
:menu
cls
echo. 
echo.========= 请选择您要对MySQL的操作 =========
echo.
echo.1: 启动MySQL
echo.
echo.2: 关闭MySQL
echo. 
echo.3: 重启MySQL
echo. 
echo.4: 退 出
echo.
echo.========= 请输入您要选择的项目序号 =========
set /p id=
if "%id%"=="1" goto startup
if "%id%"=="2" goto shutdown
if "%id%"=="3" goto reboot
if "%id%"=="4" exit
pause

:启动
:startup
echo.
call :checkMySQL 1
echo.启动MySQL......
net start "MySQL"
echo.启动MySQL成功！
pause 
goto menu 

:停止
:shutdown
echo.
call :checkMySQL 2
echo.关闭MySQL......
net stop "MySQL"
echo.关闭MySQL成功！
pause 
goto menu

:重启
:reboot
echo.
call :checkMySQL 2
echo.关闭MySQL......
net stop "MySQL"
echo.关闭MySQL成功！
goto startup
goto menu

:退出
:goout
pause
goto menu

:检查MySQL进程是否存在
:checkMySQL
set /a count=0
for /f "tokens=1 delims= " %%i in ('tasklist /nh ^| find /i "MySQL"') do (set /a count+=1)
if %count% neq 0 if "%1" equ "1" (
  echo 警告：MySQL已启动
  goto goout
)
if %count% equ 0 if "%1" equ "2" (
  echo 警告：MySQL未启动
  goto goout
)

:检查是否是以管理员身份运行
:checkAdmin
echo test am i admin? &gt; %SystemRoot%\System32\wenyuanblog.txt
if not exist %SystemRoot%\System32\wenyuanblog.txt (
  echo 警告：请以管理员身份运行！
  pause
  exit
)
del %SystemRoot%\System32\wenyuanblog.txt
</code></pre>
<p>最后，用管理员身份运行 <code>mysql.bat</code>，如下图所示：<br />
<img alt="mysql_batch_script_in_windows.png" src="https://www.wenyuanblog.com/medias/blogimages/mysql_batch_script_in_windows.png" data-original="/medias/blogimages/mysql_batch_script_in_windows.png" /><br />
参考<br />
django中文网</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eavea.com/blog/index.php/windowshuanjinganzhuangmysql5-7.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
