why not?

why not? 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

why not? 发布了文章 · 2月2日

详解Docker 容器基础系统镜像打包

因为容器本身是共享宿主操作系统内核,所以容器基础系统镜像包本身就是一个标准的 Linux rootfs + 用户自定义的工具。根据这个思路,我们就可以构建一个自己的容器基础系统镜像。

构建标准的 Linux rootfs 的方式有很多种方法,Redhat、Debian、SUSE等主流的发行版都有提供相应的工具支持。

大概的流程如下:

构建基础的 rootfs —> 配置基础系统参数 —> 部署用户自定义软件 —> 清理系统 —> 打包为容器镜像 —> 测试镜像 —> 发布仓库

以 Ubuntu 16.04.01 LTS 版为例,制作一个 Ubuntu 16.04 LTS 的 Docker 基础系统镜像:

1、安装 Debootstrap :

sudo apt install debootstrap

2、通过 Debootstrap 构建 Ubuntu 16.04 LTS 的 rootfs :

1)、创建 rootfs 存放的位置,如我们把新的 rootfs 存放在 /opt/new_os:

sudo mkdir -p /opt/new_os

2)、构建基础 Ubuntu 16.04 LTS 的 rootfs(Debootstrap 工具的参数使用 --help 查看):

sudo debootstrap --verbose --arch=amd64 xenial /opt/new_os http://mirrors.aliyun.com/ubuntu

3)、配置基础系统参数:

a、切换到新 rootfs :

sudo chroot /opt/new_os /bin/bash

 b、安装基础包(请根据实际需求安装):

apt -y update && apt -y upgrade && apt -y install vim locales

c、配置系统字符集(根据提示进行):

dpkg-reconfigure locales

d、配置时区:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 e、可选:配置第三方衍生系统版本信息(如:UbuntuKylin)

            tee /etc/ubuntukylin-release <<-‘EOF'            DISTRIB_ID=Ubuntu Kylin            DISTRIB_RELEASE=16.04            DISTRIB_CODENAME=xenial            DISTRIB_DESCRIPTION="Ubuntu Kylin 16.04"            EOF

f、清理系统:

rm -Rf /tmp/* && apt clean

g、 退出当前 rootfs

exit

4)、打包并创建 Docker 镜像(前置条件:当前系统已经配置了 Docker 运行时环境):

sudo tar -C /opt/new_os/ -c . | sudo docker import - new_os

 5)、测试

sudo docker run new_os cat /etc/lsb-release

3、发布远程桌面到仓库(以发布到官方仓库为例,私有仓库请自行上传)

sudo docker login shibingli@yeah.net……sudo docker tag new_os shibingli/new_ossudo docker push shibingli/new_os

4、完成。

5、补充,如果要把当前的系统环境打包为容器基础镜像,主要是 rootfs 的处理,可以参考以下命令:

tar --numeric-owner --exclude=/proc --exclude=/sys -cvf new_os.tar /

cat new_os.tar | docker import - new_os

sudo tar --numeric-owner --exclude=/proc --exclude=/sys -C / -c . | sudo docker import - new_os

以上就是本文的全部内容,希望对大家的学习有所帮助

查看原文

赞 0 收藏 0 评论 0

why not? 发布了文章 · 2月2日

mysql双机热备份的实现步骤

设置 MySql 数据同步
摘要
  mysql从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能。
  数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是my.cnf)
  在unix环境下在/etc/mysql/my.cnf 或者在mysql用户的home目录下面的my.cnf。
  window环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf 命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。
设置方法:
设置范例环境:
  操作系统:window2000 professional
  mysql:4.0.4-beta-max-nt-log
  A ip:10.10.10.22
  B ip:10.10.10.53
A:设置
  1.增加一个用户最为同步的用户帐号:
GRANT FILE ON . TO backup@'10.10.10.53' IDENTIFIED BY ‘1234'
  2.增加一个数据库作为同步数据库:
create database backup
B:设置
  1.增加一个用户最为同步的用户帐号:
GRANT FILE ON . TO backup@'10.10.10.22' IDENTIFIED BY ‘1234'
  2.增加一个远程桌面

s: in �����<数据库作为同步数据库:
create database backup
  主从模式:A->B
  A为master
  修改A mysql的my.ini文件。在mysqld配置项中加入下面配置:
server-id=1
log-bin

设置需要记录log 可以设置log-bin=c:mysqlbakmysqllog 设置日志文件的目录,

其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。

binlog-do-db=backup #指定需要日志的数据库
  重起数据库服务。
  用show master status 命令看日志情况。
  B为slave
  修改B mysql的my.ini文件。在mysqld配置项中加入下面配置:
server-id=2
master-host=10.10.10.22
master-user=backup #同步用户帐号
master-password=1234
master-port=3306
master-connect-retry=60 预设重试间隔60秒
replicate-do-db=backup 告诉slave只做backup数据库的更新
  重起数据库
  用show slave status看同步配置情况。
  注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info
  所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。
  双机互备模式。
  如果在A加入slave设置,在B加入master设置,则可以做B->A的同步。
  在A的配置文件中 mysqld 配置项加入以下设置:
master-host=10.10.10.53
master-user=backup
master-password=1234
replicate-do-db=backup
master-connect-retry=10
  在B的配置文件中 mysqld 配置项加入以下设置:
log-bin=c:mysqllogmysqllog
binlog-do-db=backup
  注意:当有错误产生时*.err日志文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slave start
  重起AB机器,则可以实现双向的热备。
  测试:
  向B批量插入大数据量表AA(1872000)条
  A数据库每秒钟可以更新2500条数据。

查看原文

赞 0 收藏 0 评论 0

why not? 发布了文章 · 2月1日

win7中VMware安装CentOs7搭建Linux环境教程

最近在空闲时间学习Linux环境中各种服务的安装与配置,都属于入门级别的,这里把所有的学习过程记录下来,和大家一起分享。

我的电脑系统是win7,所以我需要在win7上安装一个虚拟机-VMware,然后在虚拟机中安装CentOs7,搭建我需要的Linux环境。

linux环境搭建参考文档:http://www.jb51.net/article/1...

一、VMware和CentOs简介

1.VMware是一个虚拟PC的软件,可以在现有的操纵系统上虚拟出一个新的硬件环境,相当于模拟出一台新的PC,以此来实现在一台机器上真正同时运行两个独立的操作系统。

VMware的主要特点

不需要区分或重新开机就能在同一台PC上使用两种以上的操作系统;

本机系统可以与虚拟机系统网络通信;

可以设定并且随时修改虚拟机操作系统的硬件环境。

官网下载地址:http://www.vmware.com/product...

2.CentOS(Community ENTerprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。

二、安装环境介绍

虚拟机版本:VMware Workstation_12.1.1 build-3770994

物理机版本:Win7 旗舰版 64位

下面,废话不多说,开始搭建Linux环境。

三、linux环境搭建

1、安装VMware

VMware安装版本:VMware-workstation_full_12.1.1.6932.exe

序列号:5A02H-AU243-TZJ49-GTC7K-3C61N

可以去站长博客官网下载,也可以百度自行搜索下载。下载完成,按照提示下一步安装即可。

2、安装CentOS

第一步,创建虚拟机

1)启动虚拟机后,首先,点击创建新的虚拟机。出现下图所示,选择典型类型的配置,点击下一步:

2)此处选择稍后安装操作系统。然后点击下一步。

3)如下图,选择Linux后,点击下一步。

4)设置好名称和位置,这个位置就是你以后再次打开虚拟机时,所需要用到的地址,所以请记牢。点击下一步。

5)默认20G即可,点击下一步。

查看原文

赞 0 收藏 0 评论 0

why not? 发布了文章 · 2月1日

Windows 2003服务器权限详细配置方案第1/9页

1、服务器安全设置之--硬盘权限篇

这里着重谈需要的权限,也就是最终文件夹或硬盘需要的权限,可以防御各种木马入侵,提权攻击,跨站攻击等。本实例经过多次试验,安全性能很好,服务器基本没有被木马威胁的担忧了。
硬盘或文件夹: C:\

 D:\
 E:\
 F:\ 类推  

主要权限部分: 其他权限部分:
Administrators
完全控制 无
如果安装了其他运行环境,比如PHP等,则根据PHP的环境功能要求来设置硬盘权限,一般是安装目录加上users读取运行权限就足够了,比如c:php的话,就在根目录权限继承的情况下加上users读取运行权限,需要写入数据的比如tmp文件夹,则把users的写删权限加上,运行权限不要,然后把虚拟主机用户的读权限拒绝即可。如果是mysql的话,用一个独立用户运行MYSQL会更安全,下面会有介绍。如果是winwebmail,则最好建立独立的应用程序池和独立IIS用户,然后整个安装目录有users用户的读/运行/写/权限,IIS用户则相同,这个IIS用户就只用在winwebmail的WEB访问中,其他IIS站点切勿使用,安装了winwebmail的服务器硬盘权限设置后面举例
该文件夹,子文件夹及文件
<不是继承的>
CREATOR OWNER
完全控制
只有子文件夹及文件
<不是继承的>
SYSTEM
完全控制
该文件夹,子文件夹及文件
<不是继承的>
硬盘或文件夹: C:Inetpub\
主要权限部分: 其他权限部分:
Administrators
完全控制 无
该文件夹,子文件夹及文件
<继承于c:>
CREATOR OWNER
完全控制
只有子文件夹及文件
<继承于c:>
SYSTEM
完全控制
该文件夹,子文件夹及文件
<继承于c:>
硬盘或文件夹: C:InetpubAdminScripts
主要权限部分: 其他权限部分:
Administrators
完全控制 无
该文件夹,子文件夹及文件
<不是继承的>
SYSTEM
完全控制
该文件夹,子文件夹及文件
<不是继承的>
硬盘或文件夹: C:Inetpubwwwroot
主要权限部分: 其他权限部分:
Administrators
完全控制 IIS_WPG
读取运行/列出文件夹目录/读取
该文件夹,子文件夹及文件 该文件夹,子文件夹及文件
<不是继承的> <不是继承的>
SYSTEM
完全控制 Users
读取运行/列出文件夹目录/读取
该文件夹,子文件夹及文件 该文件夹,子文件夹及文件
<不是继承的> <不是继承的>
这里可以把站长博客虚拟主机用户组加上
同Internet 来宾帐户一样的权限
拒绝权限
Internet 来宾帐户
创建文件/写入数据/:拒绝
创建文件夹/附加数据/:拒绝
写入属性/:拒绝
写入扩展属性/:拒绝
删除子文件夹及文件/:拒绝
删除/:拒绝
该文件夹,子文件夹及文件
<不是继承的>

查看原文

赞 0 收藏 0 评论 0

why not? 发布了文章 · 2月1日

pv是什么的真正含义?

现在国内的站点都号称自己能统计pv,不过听我讲完pv到底是什么,估计所有的站长都要笑了。 pv的意思,就是一个访问者在24小时(0点到24点)内到底看了你网站几个页面。
不过在国内,由于站长普遍素质不高,理解的是五花八门。有的是认为就是刷一次算一次,有的认为是cookies记录一次,有的认为是cookies记录每个页面一次。国内计数器采用第一种理解的比较多,第二种就相当少了,第三种虽然也是错误理解,但毕竟和正确结果有些相紧,但是总比完全错误强。不过及时是第三种的记录方法,由于他的cookies记录需要相当的技术水平来编写,还没有采用这种方法的。
真正的pv是怎么计算的呢,就是当一个访问这个网站的时候,记录他所访问的页面和对应的ip,然后确定这个ip今天访问了这个页面没有,由于涉及的元素有两个就比单纯记录ip要多一列。具体的比对方法比较复杂,我这里就不更深入说了,仅从数据库的量上来描述一下吧,如果到了23点,单纯ip有60万条的话,每个访问者平均访问了3个页面,那么pv表的记录就要有180万条,每来一个访问者除了比对那60万ip外,还要继续比对这180万的pv表,大家就站长博客可以想象这种运算量了。所以说,国内现在不仅记录24小时独立ip的统计寥寥可数(一些付费统计还是记录24小时独立的),记录pv的更是根本没有,我在服务器负载低的时候曾经常识过统计pv,但是很快就被运算量难住了,再cpu和相关设备性能提升十倍以前,我都不准备提供此项服务.

查看原文

赞 0 收藏 0 评论 0

why not? 发布了文章 · 1月31日

CentOS下编译安装nginx及配置缩略图插件的方法教程

相信大家都知道利用yum安装nginx 非常方便,但是有些插件并不会默认安装,比如 http_image_filter_module, 因此我们需要编译安装 nginx,已达到我们的目的。下面来看看详细的方法吧。

安装依赖

yum install -y pcre-devel libmxl2-devel libxslt-devel gd-devel

安装 nginx

wget -xzvf nginx-1.9.1.tar.gzcd nginx-1.9.1./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_sub_module --with-http_auth_request_module --with-http_stub_status_module --with-http_gzip_static_module make make install

安装站长博客完成后,可以使用如下命令来查看 nginx 安装的模块

[root@linux001 ~]# /usr/local/nginx/sbin/nginx -Vnginx version: nginx/1.9.1built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013TLS SNI support enabledconfigure arguments: --user=nginx --group=nginx --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_sub_module --with-http_auth_request_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_image_filter_module

增加启动脚本

新建文件 /etc/init.d/nginx , 内容如下:

#!/bin/sh## nginx - this script starts and stops the nginx daemon## chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse # proxy and IMAP/POP3 proxy server# processname: nginx# config: /etc/nginx/nginx.conf# config: /usr/local/nginx/conf/nginx.conf# pidfile: /usr/local/nginx/logs/nginx.pid # Source function library.. /etc/rc.d/init.d/functions # Source networking configuration.. /etc/sysconfig/network # Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/local/nginx/sbin/nginx"prog=$(basename $nginx) NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=([^ ]*).*/1/g' - if [ -z "grep $user /etc/passwd" ]; then useradd -M -s /bin/nologin $user fi options=$nginx -V 2>&1 | grep 'configure arguments:' for opt in $options; do if [ echo $opt | grep '.*-temp-path' ]; then value=echo $opt | cut -d "=" -f 2 if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done} start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval} stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval} restart() { #configtest || return $? stop sleep 1 start} reload() { #configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo} force_reload() { restart} configtest() { $nginx -t -c $NGINX_CONF_FILE} rh_status() { status $prog} rh_status_q() { rh_status >/dev/null 2>&1} case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2esac

查看原文

赞 0 收藏 0 评论 0

why not? 发布了文章 · 1月31日

Nginx 禁止IP访问如何实现

Nginx 禁止IP访问

我们在使用的时候会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了。下面我们就先看看Nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时候生效最关键的一点是,在server的设置里面添加这一行:

listen 80 default;

后面的default参数表示这个是默认虚拟主机。

Nginx 禁止IP访问这个设置非常有用。

比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500.目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。就可以这样设置:

server { listen 80 default; return 500; }

也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置就可以:

server { listen 80 default; rewrite ^(.*) http://www.mydomain.com permanent; }

按照如上设置后,确实不能通过IP访问服务器了,但是在应该用中出现当server_name后跟多个域名时,其中一个域名怎么都无法访问,设置如下:

server { listen 80; server_name www.abc.com abc.com }

没更改之前,通过server_name 中的www.abc.com abc.com均可访问服务器,加入Nginx 禁止IP访问的设置后,通过abc.com无法访问服务器了,www.abc.com可以访问,用 Nginx -t 检测配置文件会提示warning:

最后站长博客通过在listen 80 default;后再加server_name _;解决,形式如下:

#禁止IP访问 server { listen 80 default; server_name _; server_name www.abc.com abc.com return 500; }

这样,通过abc.com就能访问服务器了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

查看原文

赞 0 收藏 0 评论 0

why not? 发布了文章 · 1月30日

Caddy 一个用Go实现的Web Server

这是一个Web Server的时代,apache2与nginx共舞,在追求极致性能的路上,没有最高,只有更高。但这又是一个追求个性化的时代,有些Web Server并没有去挤“Performance提升”这一独木桥,而是有着自己的定位,Caddy就是这样一个开源Web Server。

Caddy的作者Matt Holt在caddy官网以及FAQ中对caddy的目标阐释如下: 其他Web Server为Web而设计,Caddy为human设计。功能定位上,与经常充当最前端反向代理的nginx不同,caddy致力于成为一个易用的静态 文件Web Server。可以看出Caddy主打易用性,使用配置简单。并且得益于Go的跨平台特性,caddy很容易的支持了三大主流平台:Windows、 Linux、Mac。在Caddy开发者文档中,我们可以看到caddy还可以在Android(linux arm)上运行。caddy目前版本为0.7.1,还不稳定,且后续版本可能变化较大,甚至与前期版本不兼容,因此作者目前不推荐caddy在生产环境被 重度使用。

关注caddy,是因为caddy填补了go在通用web server这块的空白(也许有其他,但我还不知道),同时Web server in go也“响应”了近期Golang去C化的趋势(Go 1.5中C is gone!),即便caddy作者提到caddy的目标并非如nginx那样。但未来谁知道呢?一旦Go性能足够高时,一旦caddy足够稳定时,自然而 然的就会有人将其用在某些应用的生产环境中替代nginx或apache2了。一套全Go的系统,在部署、运维方面也是有优势的。

一、安装和运行caddy

和诸多go应用一样,我们可以直接从caddy的github.com releases页中找到最新发布版(目前是0.7.1)的二进制包。这里使用的是caddy_darwin_amd64.zip。

下载解压后,进入目录,直接执行./caddy即可将caddy运行起来。

$caddy
0.0.0.0:2015

在浏览器里访问localhost:2015,页面上没有预期显示的类似"caddy works!”之类的默认Welcome页面,而是“404 Not Found"。虽然这说明caddy已经work了,但没有一个default welcome page毕竟对于caddy beginer来说并不友好。这里已经向作者提了一个sugguestion issue。

二、caddy原理

Go的net/http标准库已经提供了http server的实现,大多数场合这个http server都能满足你的需要,无论是功能还是性能。Caddy实质上也是一个Go web app,它也import net/http,嵌入*http.Server,并通过handler的ServeHTTP方法为每个请求提供服务。caddy使用 http.FileServer作为处理 静态文件的基础。caddy的诱人之处在于其middleware,将诸多middleware串成一个middleware chain以提供了灵活的web服务。另外caddy中的middleware还可以独立于caddy之外使用。

caddy从当前目录的Caddyfile(默认)文件中读取配置,当然你也可以通过-conf指定配置文件路径。Caddyfile的配置格式 的确非常easy,这也符合caddy的目标。

Caddyfile总是以站点的Addr开始的。

单一站点的Caddyfile样例如下:

//Caddyfile
localhost:2015
gzip
log ./2015.log

Caddy也支持配置多个站点,类似virtualhost的 配置(80端口多路复用):

//Caddyfile
foo.com:80 {
log ./foo.log
gzip
}

bar.com:80 {
log ./bar.log
gzip
}

为了实现风格上的统一,单一站点也最好配置为如下这种格式(代码内部称之为 Server Block):

localhost:2015 {
gzip
log ./2015.log
}

这样Caddyfile的配置文件模板样式类似于下面这样:

host1:port {
middleware1
middleware2 {
… …
}
… …
}

host2:port {
middleware1
middleware2 {
… …
}
… …
}
… …

关于middleware,在caddy文档中有较为详细的站长博客说明和例子。对于caddy这样一个年轻的开源项目而言,其文档还算是相对较全的,虽 然现在还不能和nginx、 apache比。

查看原文

赞 0 收藏 0 评论 0

why not? 发布了文章 · 1月30日

C#如何控制IIS动态添加删除网站详解

我的目的是在Winform程序里面,可以直接启动一个HTTP服务端,给下游客户连接使用。

查找相关技术,有两种方法:

1.使用C#动态添加网站应用到IIS中,借用IIS的管理能力来提供HTTP接口。本文即对此做说明

2.在Winform程序中实现Web服务器逻辑,自己监听和管理客户端请求;

利用IIS7自带类库管理IIS现在变的更强大更方便,而完全可以不需要用DirecotryEntry这个类了(乐博网中很多.net管理iis6.0的文章都用到了DirecotryEntry这个类 ),Microsoft.Web.Administration.dll位于IIS的目录(%WinDir%System32InetSrv)下,使用时需要引用,它基本上可以站长博客管理IIS7的各项配置。

这个类库的主体结构如下:

建立站点

string SiteName="乐博网"; //站点名称
string BindArgs="*:80:"; //绑定参数,注意格式
string apl="http"; //类型
string path="e:乐博网"; //网站路径
ServerManager sm = new ServerManager();
sm.Sites.Add(SiteName,apl,BindArgs,path);
sm.CommitChanges();

修改站点

Site site=sm.Sites["newsite"];
site.Name=SiteName;
site.Bindings[0].EndPoint.Port=9999;
site.Applications[0].VirtualDirectories[0].PhysicalPath=path;
sm.CommitChanges();

删除站点

Site site=sm.Sites["乐博网"];
sm.Sites.Remove(site);
sm.CommitChanges();

站点操作

方法一:

region CreateWebsite 添加网站

public string CreateWebSite(string serverID, string serverComment, string defaultVrootPath, string HostName, string IP, string Port)
{
try
{

ManagementObject oW3SVC = new ManagementObject (_scope, new ManagementPath(@"IIsWebService='W3SVC'"), null);
if (IsWebSiteExists (serverID))
{
 return "Site Already Exists...";
}

ManagementBaseObject inputParameters = oW3SVC.GetMethodParameters ("CreateNewSite");
ManagementBaseObject[] serverBinding = new ManagementBaseObject[1];

serverBinding[0] = CreateServerBinding(HostName, IP, Port);

inputParameters["ServerComment"] = serverComment;
inputParameters["ServerBindings"] = serverBinding;
inputParameters["PathOfRootVirtualDir"] = defaultVrootPath;
inputParameters["ServerId"] = serverID;

ManagementBaseObject outParameter = null;
outParameter = oW3SVC.InvokeMethod("CreateNewSite", inputParameters, null);

// 启动网站
string serverName = "W3SVC/" + serverID;
ManagementObject webSite = new ManagementObject(_scope, new ManagementPath(@"IIsWebServer='" + serverName + "'"), null);
webSite.InvokeMethod("Start", null);

return (string)outParameter.Properties["ReturnValue"].Value;

}
catch (Exception ex)
{

return ex.Message;

}

}

public ManagementObject CreateServerBinding(string HostName, string IP, string Port)
{
try
{

ManagementClass classBinding = new ManagementClass(_scope, new ManagementPath("ServerBinding"), null);

ManagementObject serverBinding = classBinding.CreateInstance();

serverBinding.Properties["Hostname"].Value = HostName;
serverBinding.Properties["IP"].Value = IP;
serverBinding.Properties["Port"].Value = Port;
serverBinding.Put();

return serverBinding;

}
catch
{

return null;

}
}

#endregion

#region 添加网站事件

protected void AddWebsite_Click(object sender, EventArgs e)
{
IISManager iis = new IISManager();

iis.Connect();

string serverID = "5556";
string serverComment = "Create Website";
string defaultVrootPath = @"D:web";
string HostName = "World";
string IP = "";
string Port = "9898";

ReturnMessage.Text = iis.CreateWebSite(serverID,serverComment,defaultVrootPath,HostName,IP,Port);
}

#endregion

#region DeleteSite 删除站点

public string DeleteSite(string serverID)
{
try
{

string serverName = "W3SVC/" + serverID;
ManagementObject webSite = new ManagementObject(_scope, new ManagementPath(@"IIsWebServer='" + serverName + "'"), null);
webSite.InvokeMethod("Stop", null);
webSite.Delete();
webSite = null;

return "Delete the site succesfully!";

}
catch (Exception deleteEx)
{

return deleteEx.Message;

}
}

#endregion

查看原文

赞 0 收藏 0 评论 0

why not? 发布了文章 · 1月30日

MySQL binlog 远程备份方法详解

以前备份binlog时,都是先在本地进行备份压缩,然后发送到远程服务器中。但是这其中还是有一定风险的,因为日志的备份都是周期性的,如果在某个周期中,服务器宕机了,硬盘损坏了,就可能导致这段时间的binlog就丢失了。

而且,以前用脚本对远程服务器进行备份的方式,有个缺点:无法对MySQL服务器当前正在写的二进制日志文件进行备份。所以,只能等到MySQL服务器全部写完才能进行备份。而写完一个binlog的时间并不固定,这就导致备份周期的不确定。

从MySQL5.6开始,mysqlbinlog支持将远程服务器上的binlog实时复制到本地服务器上。

mysqlbinlog的实时二进制复制功能并非简单的将远程服务器的日志复制过来,它是通过MySQL 5.6公布的Replication API实时获取二进制事件。本质上,就相当于MySQL的从服务器。与普通服务器类似,主服务器发生事件后,一般都会在0.5~1秒内进行备份。

备份命令

复制代码 代码如下:
mysqlbinlog --read-from-remote-server --raw --host=192.168.244.145 --port=3306 --user=repl --password=repl --stop-never mysql-bin.000001

解释如下:

--read-from-remote-server:用于备份远程服务器的binlog。如果不指定该选项,则会查找本地的binlog。

--raw:binlog日志会以二进制格式存储在磁盘中,如果不指定该选项,则会以文本形式保存。

--user:复制的MySQL用户,只需要授予REPLICATION SLAVE权限。

--stop-never:mysqlbinlog可以只从远程服务器获取指定的几个binlog,也可将不断生成的binlog保存到本地。指定此选项,代表只要远程服务器不关闭或者连接未断开,mysqlbinlog就会不断的复制远程服务器上的binlog。

mysql-bin.000001:代表从哪个binlog开始复制。

除了以上选项外,还有以下几个选项需要注意:

--stop-never-slave-server-id:在备份远程服务器的binlog时,mysqlbinlog本质上就相当于一个从服务器,该选项就是用来指定从服务器的server-id的。默认为-1。

--to-last-log:代表mysqlbinlog不仅能够获取指定的binlog,还能获取其后生成的binlog,获取完了,才终止。如果指定了--stop-never选项则会隐式打开--to-last-log选项。

--result-file:用于设置远程服务器的binlog,保存到本地的前缀。譬如对于mysql-bin.000001,如果指定--result-file=/test/backup-,则保存到本地后的文件名为/test/backup-mysql-bin.000001。注意:如果将--result-file设置为目录,则一定要带上目录分隔符“/”。譬如--result-file=/test/,而不是--result-file=/test,不然保存到本地的文件名为/testmysql-bin.000001。

不足:

这个方式有个问题,对于常规的主从复制来说,如果主从直接的连接断开了,则从会自动再次连接,而对于mysqlbinlog,如果断开了,并不会自动连接。

解决方案:

可通过脚本来弥补上述不足。

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 0 次点赞
  • 获得 1 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 1 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 1月22日
个人主页被 866 人浏览