Centos UUID方式挂载

今天早晨到公司发现部分客户网站无法打开, 上服务器一看,原来是重启的时候挂载目录混乱了, 干脆就用UUID方式挂载了,下边分享出查询UUID的几条命令

1.blkid -o list

2.blkid -s UUID

3.ls -l /dev/disk/by-uuid

memcached 安装和使用

如何将 memcached 融入到您的环境中?

在开始安装和使用 using memcached 之前,我们需要了解如何将 memcached 融入到您的环境中。虽然在任何地方都可以使用 memcached,但我发现需要在数据库层中执行几个经常性查询时,memcached 往往能发挥最大的效用。我经常会在数据库和应用服务器之间设置一系列 memcached 实例,并采用一种简单的模式来读取和写入这些服务器。图 1 可以帮助您了解如何设置应用程序体系结构:
图 1. 使用 memcached 的示例应用程序体系结构
memcached1-fig1

体系结构相当容易理解。我建立了一个 Web 层,其中包括一些 Apache 实例。下一层是应用程序本身。这一层通常运行于 Apache Tomcat 或其他开源应用服务器之上。再下面一层是配置 memcached 实例的地方 — 即应用服务器与数据库服务器之间。在使用这种配置时,需要采用稍微不同的方式来执行数据库的读取和写入操作。

读取

我执行读取操作的顺序是从 Web 层获取请求(需要执行一次数据库查询)并检查之前在缓存中存储的查询结果。如果我找到所需的值,则返回它。如果未找到,则执行查询并将结果存储在缓存中,然后再将结果返回给 Web 层。

写入

将数据写入到数据库中时,首先需要执行数据库写入操作,然后将之前缓存的任何受此写入操作影响的结果设定为无效。此过程有助于防止缓存和数据库之间出现数据不一致性。

安装 memcached

memcached 支持一些操作系统,包括 Linux®、Windows®、Mac OS 和 Solaris。在本文中,我将详细介绍如何通过源文件构建和安装 memcached。采用这种方式的主要原因是我在遇到问题时可以查看源代码。

libevent

libevent 是安装 memcached 的唯一前提条件。它是 memcached 所依赖的异步事件通知库。您可以在 monkey.org 上找到关于 libevent 的源文件。接下来,找到其最新版本的源文件。对于本文,我们使用稳定的 1.4.11 版本。获取了归档文件之后,将它解压到一个方便的位置,然后执行清单 1 中的命令:
清单 1. 生成和安装 libevent

				
cd libevent-1.4.11-stable/

./configure

make

make install

 

memcached

从 Danga Interactive 获取 memcached 源文件,仍然选择最新的分发版。在撰写本文时,其最新版本是 1.4.0。将 tar.gz 解压到方便的位置,并执行清单 2 中的命令:
清单 2. 生成和安装 memcached

				
cd memcached-1.4.0/

./configure

make

make install

 

完成这些步骤之后,您应该安装了一个 memcached 工作副本,并且可以使用它了。让我们进行简单介绍,然后使用它。

使用 memcached

要开始使用 memcached,您首先需要启动 memcached 服务器,然后使用 telnet 客户机连接到它。

要启动 memcached,执行清单 3 中的命令:
清单 3. 启动 memcached

				
./memcached -d -m 2048 -l 10.0.0.40 -p 11211

 

这会以守护程序的形式启动 memcached(

-d

),为其分配 2GB 内存(

-m 2048

),并指定监听 localhost,即端口 11211。您可以根据需要修改这些值,但以上设置足以完成本文中的练习。接下来,您需要连接到 memcached。您将使用一个简单的 telnet 客户机连接到 memcached 服务器。

大多数操作系统都提供了内置的 telnet 客户机,但如果您使用的是基于 Windows 的操作系统,则需要下载第三方客户机。我推荐使用 PuTTy

安装了 telnet 客户机之后,执行清单 4 中的命令:
清单 4. 连接到 memcached

				
telnet localhost 11211

 

如果一切正常,则应该得到一个 telnet 响应,它会指示 Connected to localhost(已经连接到 localhost)。如果未获得此响应,则应该返回之前的步骤并确保 libevent 和 memcached 的源文件都已成功生成。

您现现已经登录到 memcached 服务器。此后,您将能够通过一系列简单的命令来与 memcached 通信。9 个 memcached 客户端命令可以分为三类:

  • 基本
  • 高级
  • 管理

基本 memcached 客户机命令

您将使用五种基本 memcached 命令执行最简单的操作。这些命令和操作包括:

  • set
  • add
  • replace
  • get
  • delete

 

前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令。它们都非常简单易用,且都使用清单 5 所示的语法:
清单 5. 修改命令语法

				
command <key> <flags> <expiration time> <bytes>
<value>

 

表 1 定义了 memcached 修改命令的参数和用法。
表 1. memcached 修改命令参数

参数 用法
key key 用于查找缓存值
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 在缓存中存储的字节点
value 存储的值(始终位于第二行)

 

现在,我们来看看这些命令的实际使用。

set

set

 命令用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。

注意以下交互,它使用了 

set

 命令:

set userId 0 0 5
12345
STORED

 

如果使用 

set

 命令正确设定了键值对,服务器将使用单词 STORED 进行响应。本示例向缓存中添加了一个键值对,其键为 

userId

,其值为 

12345

。并将过期时间设置为 0,这将向 memcached 通知您希望将此值存储在缓存中直到删除它为止。

add
仅当缓存中不存在键时,

add

 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应 NOT_STORED

下面是使用 

add

 命令的标准交互:

set userId 0 0 5
12345
STORED

add userId 0 0 5
55555
NOT_STORED

add companyId 0 0 3
564
STORED

 

replace
仅当键已经存在时,

replace

 命令才会替换缓存中的键。如果缓存中不存在键,那么您将从 memcached 服务器接受到一条 NOT_STORED 响应。

下面是使用 

replace

 命令的标准交互:

replace accountId 0 0 5
67890
NOT_STORED

set accountId 0 0 5
67890
STORED

replace accountId 0 0 5
55555
STORED

 

最后两个基本命令是 

get

 和 

delete

。这些命令相当容易理解,并且使用了类似的语法,如下所示:

command <key>

 

接下来看这些命令的应用。

get

get

 命令用于检索与之前添加的键值对相关的值。您将使用 

get

 执行大多数检索操作。

下面是使用 

get

 命令的典型交互:

set userId 0 0 5
12345
STORED

get userId
VALUE userId 0 5
12345
END

get bob
END

 

如您所见,

get

 命令相当简单。您使用一个键来调用 

get

,如果这个键存在于缓存中,则返回相应的值。如果不存在,则不返回任何内容。

delete
最后一个基本命令是 

delete

delete

 命令用于删除 memcached 中的任何现有值。您将使用一个键调用 

delete

,如果该键存在于缓存中,则删除该值。如果不存在,则返回一条 NOT_FOUND 消息。

下面是使用 

delete

 命令的客户机服务器交互:

set userId 0 0 5
98765
STORED

delete bob
NOT_FOUND

delete userId
DELETED

get userId
END

 

高级 memcached 客户机命令

可以在 memcached 中使用的两个高级命令是 

gets

 和 

cas

gets

 和 

cas

 命令需要结合使用。您将使用这两个命令来确保不会将现有的名称/值对设置为新值(如果该值已经更新过)。我们来分别看看这些命令。

gets

gets

 命令的功能类似于基本的 

get

 命令。两个命令之间的差异在于,

gets

 返回的信息稍微多一些:64 位的整型值非常像名称/值对的 “版本” 标识符。

下面是使用 

gets

 命令的客户机服务器交互:

set userId 0 0 5
12345
STORED

get userId
VALUE userId 0 5
12345
END

gets userId
VALUE userId 0 5 4
12345
END

 

考虑 

get

 和 

gets

 命令之间的差异。

gets

 命令将返回一个额外的值 — 在本例中是整型值 4,用于标识名称/值对。如果对此名称/值对执行另一个 

set

 命令,则 

gets

 返回的额外值将会发生更改,以表明名称/值对已经被更新。清单 6 显示了一个例子:
清单 6. set 更新版本指示符

				
set userId 0 0 5
33333
STORED

gets userId
VALUE userId 0 5 5
33333
END

 

您看到 

gets

 返回的值了吗?它已经更新为 5。您每次修改名称/值对时,该值都会发生更改。

cas

cas

(check 和 set)是一个非常便捷的 memcached 命令,用于设置名称/值对的值(如果该名称/值对在您上次执行 

gets

 后没有更新过)。它使用与 

set

 命令相类似的语法,但包括一个额外的值:

gets

 返回的额外值。

注意以下使用 

cas

 命令的交互:

set userId 0 0 5
55555
STORED

gets userId
VALUE userId 0 5 6
55555
END

cas userId 0 0 5 6
33333
STORED

 

如您所见,我使用额外的整型值 6 来调用 

gets

 命令,并且操作运行非常顺序。现在,我们来看看清单 7 中的一系列命令:
清单 7. 使用旧版本指示符的 

cas

 命令

				
set userId 0 0 5
55555
STORED

gets userId
VALUE userId 0 5 8
55555
END

cas userId 0 0 5 6
33333
EXISTS

 

注意,我并未使用 

gets

 最近返回的整型值,并且 

cas

 命令返回 EXISTS 值以示失败。从本质上说,同时使用 

gets

 和 

cas

 命令可以防止您使用自上次读取后经过更新的名称/值对。

缓存管理命令

最后两个 memcached 命令用于监控和清理 memcached 实例。它们是 

stats

 和 

flush_all

 命令。

stats

stats

 命令的功能正如其名:转储所连接的 memcached 实例的当前统计数据。在下例中,执行 

stats

 命令显示了关于当前 memcached 实例的信息:

stats
STAT pid 63
STAT uptime 101758
STAT time 1248643186
STAT version 1.4.11
STAT pointer_size 32
STAT rusage_user 1.177192
STAT rusage_system 2.365370
STAT curr_items 2
STAT total_items 8
STAT bytes 119
STAT curr_connections 6
STAT total_connections 7
STAT connection_structures 7
STAT cmd_get 12
STAT cmd_set 12
STAT get_hits 12
STAT get_misses 0
STAT evictions 0
STAT bytes_read 471
STAT bytes_written 535
STAT limit_maxbytes 67108864
STAT threads 4
END

 

此处的大多数输出都非常容易理解。稍后在讨论缓存性能时,我还将详细解释这些值的含义。至于目前,我们先来看看输出,然后再使用新的键来运行一些 

set

 命令,并再次运行 

stats

 命令,注意发生了哪些变化。

flush_all

flush_all

 是最后一个要介绍的命令。这个最简单的命令仅用于清理缓存中的所有名称/值对。如果您需要将缓存重置到干净的状态,则 

flush_all

 能提供很大的用处。下面是一个使用 

flush_all

 的例子:

set userId 0 0 5
55555
STORED

get userId
VALUE userId 0 5
55555
END

flush_all
OK

get userId
END

 

缓存性能

在本文的最后,我将讨论如何使用高级 memcached 命令来确定缓存的性能。

stats

 命令用于调优缓存的使用。需要注意的两个最重要的统计数据是 et_hits 和 get_misses。这两个值分别指示找到名称/值对的次数(get_hits)和未找到名称/值对的次数(get_misses)。

结合这些值,我们可以确定缓存的利用率如何。初次启动缓存时,可以看到 get_misses 会自然地增加,但在经过一定的使用量之后,这些 get_misses 值应该会逐渐趋于平稳 — 这表示缓存主要用于常见的读取操作。如果您看到 get_misses 继续快速增加,而 get_hits 逐渐趋于平稳,则需要确定一下所缓存的内容是什么。您可能缓存了错误的内容。

确定缓存效率的另一种方法是查看缓存的命中率(hit ratio)。缓存命中率表示执行 

get

 的次数与错过 

get

 的次数的百分比。要确定这个百分比,需要再次运行 

stats

 命令,如清单 8 所示:
清单 8. 计算缓存命中率

				
stats
STAT pid 6825
STAT uptime 540692
STAT time 1249252262
STAT version 1.2.6
STAT pointer_size 32
STAT rusage_user 0.056003
STAT rusage_system 0.180011
STAT curr_items 595
STAT total_items 961
STAT bytes 4587415
STAT curr_connections 3
STAT total_connections 22
STAT connection_structures 4
STAT cmd_get 2688
STAT cmd_set 961
STAT get_hits 1908
STAT get_misses 780
STAT evictions 0
STAT bytes_read 5770762
STAT bytes_written 7421373
STAT limit_maxbytes 536870912
STAT threads 1
END

 

现在,用 get_hits 的数值除以 cmd_gets。在本例中,您的命中率大约是 71%。在理想情况下,您可能希望得到更高的百分比 — 比率越高越好。查看统计数据并不时测量它们可以很好地判定缓存策略的效率。

 

常有命令如下:

 

启动/结束
memcached -d -m 10 -u root -l 192.168.0.122 -p 11200 -c 256 -P /tmp/memcached.pid
-d 选项是启动一个守护进程,
-m 是分配给Memcache使用的内存数量,单位是MB,这里是10MB
-u 是运行Memcache的用户,这里是root
-l 是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.122
-p 是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口
-c 选项是最大运行的并发连接数,默认是1024,这里设置了256,按照你服务器的负载量来设定
-P 是设置保存Memcache的pid文件
kill `cat /tmp/memcached.pid`

获取运行状态
echo stats | nc 192.168.1.123 11200
watch “echo stats | nc 192.168.1.123 11200” (实时状态)

 

引用:http://www.czhphp.com/archives/252

Mysql 启动报错

1.查看mysql状态,报错如下:

MySQL is running but PID file could not be found

查询日志发现如下提示:

mysqld_safe mysqld from pid file /usr/local/mysql/data/centos.pid ended

解决方法:初始化mysql

/usr/local/mysql/bin/mysql_install_db –user=mysql

2.mysql无法启动,查看日志:

/usr/local/mysql/libexec/mysqld: Disk is full writing ‘./mysql-bin.~rec~’ (Errcode: 28). Waiting for someone to free space… (Expect up to 60 secs delay for server to continue after freeing disk space)

清理磁盘空间,重启OK!

.htaccess:简介、访问控制、验证、目录浏览控制

一、.htaccess简介

1.什么是.htaccess

.htaccess是一个纯文本文件,里面存放着Apache服务器配置相关的一些指令,它类似于Apache的站点配置文件,如httpd.conf(Apache2已经支持多站点,因此你的站点配置文件可能在/etc/apache2/conf.d/目录下)。

.htaccess与httpd.conf配置文件不同的是,它只作用于当前目录。另外httpd.conf是在Apache服务启动的时候就加载的,而.htaccess只有在用户访问目录时加载,开销大、速度慢。

既然如此,为什么我们还要用.htaccess呢?因为它配置起来简单,它还支持重定向、URL重写以及访问验证,另外它管理起来很方便,可以很好适应网站迁移。总之,各有优缺点,主要就看你是要从全局考虑还是只配置单个目录。

2.AllowOverride All

通常情况下,Apache是默认启用.htaccess的,但是为了以防万一,请检查一下自己站点的配置文件,如httpd.conf,是否有这行:

AllowOverride All

这行允许重写配置文件。也就是如果能够从.htaccess加载配置文件,那么就以.htaccess为配置文件对其所在目录进行配置。

3.500错误

如果你租用了云服务提供商的主机或者空间,那么他们可能不会给你读写httpd.conf文件的权限,你也不可能检查AllowOverride命令参数是否为All,这时,你可以新建一个目录,在里面写一个.htaccess文件,文件中随意写入一些服务器看不懂的东西,然后访问该目录里的一个页面,耐心等待500错误的出现。

如果没有出现,那么.htaccess没有被启用,你需要向你的服务供应商寻求帮助;如果出现了,那么恭喜你,你可以对当前目录重写Apache配置。

/!注意:.htaccess语法错误可能会影响整个站点,如果你不确定这样做是否安全,请联系你的云服务供应商。
二、.htaccess访问控制(Allow/Deny)

1.访问控制基础:Order命令

为了限制用户访问一些关键目录,.htaccess可以提供目录访问限制。你只需要在要限制的目录中,加入如下.htaccess文件:

# no one gets in here!
deny from all

这会限制所有用户通过浏览器访问该目录,这太一刀切了,因此我们还可以增加一些特定的条件,如允许指定IP地址的访问:

Order Allow,Deny
Deny from All
Allow from 192.168.0.0/24

Order命令是一个难点,也是配置apache的基础,它决定了Apache处理访问规则的顺序。

  • 通过Allow,Deny参数,Apache首先找到并应用Allow命令,然后应用Deny命令,以阻止所有访问。
  • 通过Deny,Allow参数,Apache首先找到并应用Deny命令,然后应用Allow命令,以允许所有访问。

了解Order的用法后,再仔细考虑下上面的例子,你或许能够发现Deny命令是多余的,以下用法和之前的描述语义相同:

Order Allow,Deny
Allow from 192.168.0/24

2.利用.htaccess过滤域名或网络主机(Allow/Deny)

下例可以限制所有含有“domain.com”的网络主机访问网站:

Order Allow,Deny
Allow from all
Deny from .*domain.com.*

3.利用.htaccess禁止访问指定文件(Files)

Files命令可以用于过滤指定文件:

# secure htaccess file
<Files .htaccess>
 order allow,deny
 deny from all
</Files>

4.利用.htaccess禁止访问指定文件类型(FilesMatch)

下面的代码将限制访问所有.log和.exe文件:

<FilesMatch ".(log|exe)$">
 Order allow,deny
 Deny from all
</FilesMatch>

我们还可以通过Files命令描述文件类型,但是需要在命令后面加一个波浪线(~),该符号启用Files命令的正则表达解析功能:

<Files ~ "^.*.([Ll][Oo][Gg])|([eE][xX][eE])">
 Order allow,deny
 Deny from all
 Satisfy All
</Files>

有以下几点需要读者注意:

  • Files之后的波浪线用于开启“正则表达式”分析。请注意,这是个过时的用法,Apache更推荐使用<FilesMatch>指令。
  • 正则表达式必须在双引号之间。
  • 双引号中的“管道符”(|)用于将两种文件类型(.log和.exe)分开,相当于逻辑“或”
  • Order命令必须嵌在Files节(Section)中,否则将会应用到所有文件
  • Satisfy All表示必须同时满足主机级别(Allow/Denay)和用户级别(Require)的限制,All是默认值,该行可以省略。

三、利用.htaccess进行密码保护与验证

1.配置.htaccess

AuthType Basic
AuthName "restricted area"
AuthUserFile /usr/local/var/www/html/.htpasses
require valid-user

这个配置文件可以保护.htaccess所在的整个目录,简单说明下参数:

  • AuthType:验证类型为基本类型,密码以明文方式传输到服务器上
  • AuthName:验证提示,会出现在验证对话框中
  • AuthUserFile:验证配置文件,用于匹配用户名与密码,该密码是加密保存的
  • require valid-user:只有在AuthUserFile中出现的用户才可以通过验证

如果验证失败,则会出现401错误。

2.生成.htpasses文件

如何生成.htpasses文件呢?我们通过htpasswd命令生成密码文件:

htpasswd -c /usr/local/var/www/html/.htpasses lesca

它会提示你输入密码,并确认。之后将密码文件.htpasses保存在/usr/local/var/www/html/目录下。

3.对文件进行密码保护

保护与.htaccess在同一目录下的文件secure.php:

# password-protect single file
<Files secure.php>
AuthType Basic
AuthName "Prompt"
AuthUserFile /home/path/.htpasswd
Require valid-user
</Files>

保护.htaccess所在目录下的多个文件:

# password-protect multiple files
<FilesMatch "^(execute|index|secure|insanity|biscuit)*$">
AuthType basic
AuthName "Development"
AuthUserFile /home/path/.htpasswd
Require valid-user
</FilesMatch>

4.对指定IP进行密码保护

仅允许IP地址为99.88.77.66的主机直接访问该目录,其他IP需要验证。

AuthType Basic
AuthName "Personal"
AuthUserFile /home/path/.htpasswd
Require valid-user
Allow from 99.88.77.66
Satisfy Any

5.安全性

出于安全考虑,将.htpasses文件存放在WEB目录树之外也许是个好方法,但是由于.htpasses是隐藏文件,而且Apache不会输出隐藏文件,因此可以满足基本的安全要求。这是通过在主配置文件中加入如下限制实现的:

<Files ~ "^.ht">
 Order allow,deny
 Deny from all
 Satisfy All
</Files>

一般而言,这是默认设置,用户无需手动添加。我们唯一需要担心的是密码在网络传输过程中是明文形式,这很容易被黑客破译。Coz提供了一个开源项目Pajamas可以在本地利用JS对密码进行MD5加密,有兴趣的读者可以前去研究一下。
四、目录浏览与主页

1.启用目录浏览

# enable directory browsing
Options All +Indexes

2.禁用目录浏览

# disable directory browsing
Options All -Indexes

我们还可以通过IndexIgnore指令来禁用目录浏览。

# prevent folder listing
IndexIgnore *

通过IndexIgnore指令,我们可以禁止对指定类型的文件浏览:

# prevent display of select file types
IndexIgnore *.wmv *.mp4 *.avi *.etc

3.自定义目录浏览

如果你希望Apache在展示你的WEB目录时看起来与众不同,那么你需要启用FancyIndexing选项:

<IfModule mod_autoindex.c>
 IndexOptions FancyIndexing 
</ifModule>

通过这个选项,你可以实现自定义图标、添加文件类型描述、按日期排序等。

4.配置目录主页文件

即使启用了目录浏览,Apache未必会展示该目录的内容,因为该目录可能存在像index.htm这样的默认主页文件。Apache会有限展示主页文件,我们可以通过.htaccess设置:

DirectoryIndex index.html index.php index.htm

5.配置错误页面

如果Apache遇到错误,就会输出错误页面。配置自定义的错误页面,也许可以挽留即将离开的用户。

# custom error documents
ErrorDocument 401 /err/401.php
ErrorDocument 403 /err/403.php
ErrorDocument 404 /err/404.php
ErrorDocument 500 /err/500.php
转自:http://www.oseye.net/user/199/blog/99

Slave_SQL_Running: No mysql同步故障解决方法

Slave_SQL_Running: No mysql同步故障解决

     今天检查数据库发现一台MySQL Slave未和主机同步,查看Slave状态:
mysql> show slave statusG
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 1062
….
Seconds_Behind_Master:NULL
原因:
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.
解决办法I:
1.首先停掉Slave服务:slave stop
2.到主服务器上查看主机状态:
记录File和Position对应的值。
mysql> show master status;
+——————+———–+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———–+————–+——————+
| mysql-bin.000020 | 135617781 | | |
+——————+———–+————–+——————+
1 row in set (0.00 sec)
3.到slave服务器上执行手动同步:
mysql> change master to
> master_host=’master_ip’,
> master_user=’user’,
> master_password=’pwd’,
> master_port=3307,
> master_log_file=’mysql-bin.000020′,
> master_log_pos=135617781;
1 row in set (0.00 sec)
mysql> slave start;
1 row in set (0.00 sec)
再次查看slave状态发现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Seconds_Behind_Master: 0
解决办法II:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
自己的使用体会:方法一是强制性从某一个点开始同步,会有部分没有同步的数据丢失,后续主服务器上删除记录同步也会有一些错误信息,不会影响使用.方法二不一定会有效果.
=======================================================================================]
1,主从不能同步:
show slave status;报错:Error xxx dosn’t exist
且show slave statusG:
Slave_SQL_Running: NO
Seconds_Behind_Master: NULL
解决方法:
stop slave;
set global sql_slave_skip_counter =1 ;
start slave;
之后Slave会和Master去同步 主要看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master是否为0,0就是已经同步了
2,还需要做的一些优化与监视:
show full processlist; //查看mysql当前同步线程号
skip-name-resolve       //跳过dns名称查询,有助于加快连接及同步的速度
max_connections=1000    //增大Mysql的连接数目,(默认100)
max_connect_errors=100 //增大Mysql的错误连接数目,(默认10)
查看日志一些命令
1,  show master statusG;
在这里主要是看log-bin的文件是否相同。
show slave statusG;
在这里主要是看:
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
如果都是Yes,则说明配置成功.
2,在master上输入show processlistG;
mysql> SHOW PROCESSLISTG
*************************** 1. row ***************************
Id: 2
User: root
Host: localhost:32931
db: NULL
Command: Binlog Dump
Time: 94
State: Has sent all binlog to slave; waiting for binlog to
be updated
Info: NULL
   如果出现Command: Binlog Dump,则说明配置成功.
stop slave    #停止同步
start slave    #开始同步,从日志终止的位置开始更新。
SET SQL_LOG_BIN=0|1  #主机端运行,需要super权限,用来开停日志,随意开停,会造成主机从机数据不一致,造成错误
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n  # 客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。
RESET MASTER  #主机端运行,清除所有的日志,这条命令就是原来的FLUSH MASTER
RESET SLAVE   #从机运行,清除日志同步位置标志,并重新生成master.info
虽然重新生成了master.info,但是并不起用,最好,将从机的mysql进程重启一下,
LOAD TABLE tblname FROM MASTER #从机运行,从主机端重读指定的表的数据,每次只能读取一个,受timeout时间限制,需要调整timeout时间。执行这个命令需要同步账号有 reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
LOAD DATA FROM MASTER  #从机执行,从主机端重新读入所有的数据。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
CHANGE MASTER TO master_def_list  #在线改变一些主机设置,多个用逗号间隔,比如
CHANGE MASTER TO
MASTER_HOST=’master2.mycompany.com’,
MASTER_USER=’replication’,
MASTER_PASSWORD=’bigs3cret’
MASTER_POS_WAIT() #从机运行
SHOW MASTER STATUS #主机运行,看日志导出信息
SHOW SLAVE HOSTS #主机运行,看连入的从机的情况。
SHOW SLAVE STATUS (slave)
SHOW MASTER LOGS (master)
SHOW BINLOG EVENTS [ IN ‘logname’ ] [ FROM pos ] [ LIMIT [offset,] rows ]
PURGE [MASTER] LOGS TO ‘logname’ ; PURGE [MASTER] LOGS BEFORE ‘date’

一键安装拨号vpn pptp脚本

一些特殊注意事项

(1) ppp-2.4.4-14.1.rhel5.x86_64.rpm
PPTP需要PPP的支持,一般情况下linux系统都已安装有PPP软件包,最好安装较新的ppp软件包,用Uvh这个参数来更新系统的PPP组件。也可以用yum –y instll ppp命令安装。

(2) pptpd-1.3.4-2.rhel5.x86_64.rpm (pptpd服务软件)

(3) dkms-2.0.17.5-1.noarch.rpm CentOS5x/RHEL5x(内核支持mppe)不用安装
DKMS全称是 Dynamic Kernel Module Support,它可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。

(4) kernel_ppp_mppe-1.0.2-3dkms.noarch(MPPE的内核补丁),CentOS5x/RHEL5x(内核支持mppe)不用安装

(5) 在ADSL拨号环境中由于PPP包头占用8字节,MTU为1492字节,MSS为1452字节,如不能正确设置会导致网络不正常,可以通过TCPMSS模块调整MSS大小
关于iptables的:MASQUERADE
假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变
而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址
这个时候如果按照现在的方式来配置iptables就会出现问题了
因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的
每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip
这样是非常不好用的
MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT
比如下边的命令:

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

如此配置的话,不用指定SNAT的目标ip了
不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去
这样就实现了很好的动态SNAT地址转换

注:
对于MASQUERADE,只是计算机的负荷稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址 是配置好的。当然,这也有好处,就是我们可以使用通过PPP、 PPPOE、SLIP等拨号得到的地址,这些地址可是由ISP的DHCP随机分配的。

#!/bin/bash
wget https://fastlnmp.googlecode.com/files/dkms-2.0.17.5-1.noarch.rpm -p /usr/local/src/
wget https://fastlnmp.googlecode.com/files/ppp-2.4.4-9.0.rhel5.i386.rpm -p /usr/local/src/
wget https://acelnmp.googlecode.com/files/pptpd-1.3.4-2.rhel5.x86_64.rpm -p /usr/local/src/
yum -y install make libpcap iptables gcc-c++ logrotate tar cpio perl pam tcp_wrappers
rpm -ivh dkms-2.0.17.5-1.noarch.rpm
rpm -Uvh ppp-2.4.4-9.0.rhel5.i386.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.x86_64.rpm
#mknod /dev/ppp c 108 0
echo 1 > /proc/sys/net/ipv4/ip_forward
#echo “mknod /dev/ppp c 108 0” >> /etc/rc.local
echo “echo 1 > /proc/sys/net/ipv4/ip_forward” >> /etc/rc.local
echo “localip 192.168.88.1” >> /etc/pptpd.conf
echo “remoteip 192.168.88.50-254” >> /etc/pptpd.conf
echo “ms-dns 8.8.8.8” >> /etc/ppp/options.pptpd
echo “ms-dns 8.8.4.4” >> /etc/ppp/options.pptpd
pass=`openssl rand 6 -base64`
if [ “$1” != “” ]
then pass=$1
fi
echo “vpn pptpd ${pass} *” >> /etc/ppp/chap-secrets
iptables -t nat -A POSTROUTING -s 192.168.88.0/255.255.255.0 -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp –syn -s 192.168.88.0/24 -j TCPMSS –set-mss 1356
service iptables save
chkconfig iptables on
chkconfig pptpd on
service iptables start
service pptpd start
echo “VPN service is installed, your VPN username is vpn, VPN password is ${pass}”

 

转自http://blog.coocla.org/185.html

apache 禁止某个IP访问

定位到你的Apache安装目录下的conf文件夹,

找到httdp.conf文件,
加入如下内容:


Options Indexes FollowSymLinks
AllowOverride None
Order  deny,allow
Deny from 192.168.1.99

解释如下:
1、
,这里“你的网站根目录”是在这个httdp.conf文件里,
使用
DocumentRoot “你的网站根目录” 语句定义的 双引号 “……” 里的值,比如说/var/www/html之类的。
2、AllowOverride None
# AllowOverride 这个属性有两个值,None和All
当 AllowOverride 的值为All时,网站根目录里面的 .htaccess文件才能生效。
至于什么是.htaccess文件,请自己Google。
3、

Order deny,allow
Deny from 192.168.1.99

使用这个命令来达到屏蔽IP的作用,类似的用法还有:

#  允许所有主机访问
Order deny,allow
Allow from All
#  禁止所有主机访问
Order deny,allow
Deny from All

把上面的All改成指定的IP即可达到屏蔽某个IP的效果。

屏蔽IP端也一样,比如说屏蔽192.168.1.123这个IP所在的192.168.1这个IP段,只需要这样写:

#  禁止192.168.1这个IP段访问
Order deny,allow
Deny from 192.168.1.123/24

另注:

当书写为:

Order deny,allow
Deny from All
Allow from 192.168.1.100

此时是禁止除了192.168.1.100这个IP之外的所有IP访问,也就是Deny,Allow这两个命令,在最后一个命令完成时才确定允许那些IP,禁止哪些IP。

请举一反三:

Order deny,allow
Allow from All
Deny from 192.168.1.100

没错,这段的意思是 允许除了192.168.1.100之外的所有IP访问。

iftop CentOS流量监控工具

安装方法1编译安装

如果采用编译安装可以到iftop官网下载最新的源码包。

安装前需要已经安装好基本的编译所需的环境,比如make、gcc、autoconf等。安装iftop还需要安装libpcap和libcurses。

CentOS上安装所需依赖包:

yum install flex byacc  libpcap ncurses ncurses-devel libpcap-devel

下载iftop

wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz

tar zxvf iftop-0.17.tar.gz

cd iftop-0.17

./configure

make && make install

安装方法2:yum安装

直接省略上面的步骤

yum install flex byacc  libpcap ncurses ncurses-devel

wget ftp://fr2.rpmfind.net/linux/dag/redhat/el5/en/i386/dag/RPMS/iftop-0.17-1.el5.rf.i386.rpm

rpm -ivh iftop-0.17-1.el5.rf.i386.rpm

四、运行iftop

直接运行: iftop

效果如下图:

17436A17-9C44-46BC-AC17-07FE7715C932

五、相关参数及说明

1iftop界面相关说明

界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。

中间的<= =>这两个左右箭头,表示的是流量的方向。

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

2iftop相关参数

常用的参数

-i设定监测的网卡,如:# iftop -i eth1

-B 以bytes为单位显示流量(默认是bits),如:# iftop -B

-n使host信息默认直接都显示IP,如:# iftop -n

-N使端口信息默认直接都显示端口号,如: # iftop -N

-F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0

-h(display this message),帮助,显示参数信息

-p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;

-b使流量图形条默认就显示;

-f这个暂时还不太会用,过滤计算包用的;

-P使host信息及端口信息默认就都显示;

-m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

进入iftop画面后的一些操作命令(注意大小写)

按h切换是否显示帮助;

按n切换显示本机的IP或主机名;

按s切换是否显示本机的host信息;

按d切换是否显示远端目标主机的host信息;

按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;

按N切换显示端口号或端口服务名称;

按S切换是否显示本机的端口信息;

按D切换是否显示远端目标主机的端口信息;

按p切换是否显示端口信息;

按P切换暂停/继续显示;

按b切换是否显示平均流量图形条;

按B切换计算2秒或10秒或40秒内的平均流量;

按T切换是否显示每个连接的总流量;

按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;

按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;

按j或按k可以向上或向下滚动屏幕显示的连接记录;

按1或2或3可以根据右侧显示的三列流量数据进行排序;

按<根据左边的本机名或IP排序;

按>根据远端目标主机的主机名或IP排序;

按o切换是否固定只显示当前的连接;

按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!

按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!

按q退出监控。

六、常见问题

1、make: yacc: Command not found
make: *** [grammar.c] Error 127

解决方法:apt-get install byacc   /   yum install byacc

2、configure: error: Curses! Foiled again!
(Can’t find a curses library supporting mvchgat.)
Consider installing ncurses.

解决方法:apt-get install libncurses5-dev  /    yum  install ncurses-deve

Centos PPTP VPN yum安装配置

通过 yum 方式安装的好处是便于管理,可以通过 yum update 命令来升级程序版本。
安装 ppp 和 iptalbes
yum install ppp iptables
安装 pptpd
加入 yum 源
rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm
安装 pptpd
yum install pptpd
——————————— 设置 ————————————
开启路由转发
vim  /etc/sysctl.conf
修改
net.ipv4.ip_forward = 1
执行:
/sbin/sysctl -p 让修改的内核参数生效
配置
vim /etc/ppp/options.pptpd
修改:
ms-dns 4.2.2.1 当地能用的dns
ms-dns 4.2.2.2
vim  /etc/pptpd.conf
修改 :
localip 10.8.8.1 为vpn管道的ip (VPN主机IP)
remoteip 10.8.8.2-245 为给客户端连接分配的ip地址范围
开机启动、运行
chkconfig pptpd on
service pptpd start
添加账号
echo -e ‘vpntest * vpntestpassword *’ >> /etc/ppp/chap-secrets
注:chap-secrets保存的信息客户端连接信息依次是:用户名,服务名,密码,允许的ip。服务名在options.pptpd的name定义,默认为pptpd
iptables 配置
chkconfig iptables on
/sbin/iptables -A INPUT -p tcp –dport 1723 -j ACCEPT
/sbin/iptables -A INPUT -p tcp –dport 47 -j ACCEPT
/sbin/iptables -A INPUT -p gre -j ACCEPT
iptables -A POSTROUTING -t nat -s 10.10.10.0/24 -o eth0 -j MASQUERADE
service iptables start

 

Linux 根据进程(PID)查看文件路径

在Linux 底下,使用 top 命令可以监控系统的进程情况,但是很多时候,我们需要根据进程的PID来找到对应的文件路径,例如图中的 29310 这个进程,如何知道 httpd 这个进程的文件路径呢?

ls -l /proc/29310/cwd    列出29310 就是httpd 这个进程的工作目录

ls -l /proce/29310/exe    列出29310 这个进程的文件路径

pwdx 29310    可以直接获得该进程的工作目录

thum-4a7a9004c068615d2de5c30d0da635b520100306091818

转自:http://www.ofme.cn/post-39.html