且行善举,莫问前程。

0%

当开发当中遇到一个问题,有个数据库中有50多张表,表名不规则,要删除所有的表.当时想写shell是一个办法. 但是mysql支持删除数据库中所有的表的

我们可以利用information_schema库. 连接information_schema库

1
2
>USE information_schema
>select concat('drop table ',table_name,';') from TABLES where table_schema='database_name';

管理多台服务器一定是自动化运维,因为只有一台服务器,所以用虚拟机创建了3台Ubuntu-Server. 开始选择的VirtualBox,因为NAT网络的缘故,主机无法和虚拟机ping通,但是VMware不同, 他会虚拟出一个网卡,和虚拟机联通,这样使用NAT更为方便。用VirtualBox,自建虚拟网卡没成功。

还有个方法就是,一个虚拟机使用桥接,虚拟机连入NAT网络中的其他虚拟机, 主机通过桥接的虚拟机SSH反向代理连入其他虚拟机。学习个Ansible搞那么麻烦,直接安装VMware吧。

进入Ansible

在google查的资料上说,Ansible通过ssh协议连接服务器,有验证过程。 百台服务器以内使用Ansible效率很好,但是千台以上就不适合了。那就需要saltstack了。

安装

我是在Python虚拟环境下安装。直接 pip install ansible。

创建 /etc/ansible/hosts 文件

1
2
3
172.16.75.130:22
172.16.75.129:22
172.16.75.128:22

如果分组,则

1
2
3
4
5
[vm1]    # 组名
172.16.75.130:22 # 主机:指定
172.16.75.129:22
[vm2]
172.16.75.128:22

如果没有使用公钥,使用密码可以这样

1
2
3
4
[vm]
vm1 ansible_ssh_user=root ansible_ssh_host=172.16.75.130 ansible_ssh_pass="test"
vm2 ansible_ssh_user=root ansible_ssh_host=172.16.75.129 ansible_ssh_pass="test"
vm3 ansible_ssh_user=root ansible_ssh_host=172.16.75.128 ansible_ssh_pass="test"

也可以使用通配符 s[001:003].whnzy.com

简单使用

常用参数

1
2
3
4
5
-u username          指定ssh连接的用户名,即执行后面命令的用户
-i inventory_file 指定所使用的inventory文件的位置,默认为/etc/ansible/hosts
-m module 指定使用的模块,默认为command,shell模块可以使用管道,而command则不可以
-f 10 指定并发数,并发量大的时候,提高该值
--sudo [-k] 当需要root权限执行的化,-k参数用来输入root密码,需要安装sshpass(apt-get)

Instance:

第一次连接就会上传公钥

1
2
ansible -i /etc/ansible/hosts all -m command -a 'who' -u haining
ansible -i /etc/ansible/hosts all -m command -a 'who' -u haining

后记

本地没有用root,想用root取执行总是验证失败,而且需要sudo权限的, -k参数也无任何作用。已配置好 本地hosts,config。可以ssh s001 直接登录了。

百度ip定位的接口

1
http://api.map.baidu.com/location/ip?ak=F454f8a5efe5e577997931cc01de3974&ip=202.198.16.3

正好有百度地图的appkey,上面的ak不是本人的。

后来又有查到新浪的ip地址库。

1
2
http://int.dpool.sina.com.cn/iplookup/iplookup.php
http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=123.123.123.123

还有haoservice的库

1
http://www.haoservice.com/docs/5

打开了访客评论,又出现了很多垃圾评论,上次还有个臭名昭著的ip访问站点。

使用 nginx 的 ngx_http_access_module 模块可以封配置内的ip或者ip段。

建立配置文件 blockips.conf ,添加一下内容

1
2
3
4
allow 10.42.0.25;
allow 10.0.43.0/25;
deny 10.0.42.0/25;
# allow all; or deny all;

并且在主配置文件中引入该文件。重启nginx,再次访问403错误。

因为下载了一份JAVA程序源码,在Ubuntu上全是乱码,我想也是用了GBK编码,所以打算用Python处理下。代码写的乱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# coding = utf-8
import os

def convert(root, target_filePath, from_encode='gbk', to_encode='utf-8'):
if os.path.exists(root) and os.path.exists(target_filePath):
if os.path.isabs(root):
list_dir = os.listdir(root)
for l in list_dir:
if os.path.isdir(os.path.join(root, l)):
if not os.path.exists(os.path.join(target_filePath, l)):
os.mkdir(os.path.join(target_filePath, l))
convert(os.path.join(root, l), os.path.join(target_filePath, l), from_encode, to_encode)
else:
with open(os.path.join(target_filePath, l), 'w') as f:
for i in open(os.path.join(root, l), 'r'):
f.write(i.decode(from_encode).encode(to_encode))
else:
file_pteh = os.path.join(os.getcwd(), root)
convert(file_pteh, target_filePath, from_encode, to_encode)
else:
print 'fuck!'

root = '/home/haining/bbs'
tar = '/home/haining/tmp'
convert(root, tar)

可以实现将一个目录下的所有文件,转换成指定编码,并且保证目录结构.

GET_ICON(获取网站favicon.ico图标)

在cblog中添加了获取网站icon的功能,并且开放出来接口,bug略多,正在优化当中。并且这个接口今后有其他的打算。

接口使用方法

Ver = 2.0 / 2015-05-01

碰上服务器的那种 Bug 我也是没有办法,接口就是接口,规定下使用方法。

1
2
3
4
接口地址:http://www.whnzy.com/tools/get_icon/
添加参数:
http://www.whnzy.com/tools/get_icon/www.cnblogs.com/
http://www.whnzy.com/tools/get_icon/www.baidu.com/?schema=https://

修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1,聚合接口代码。
2,去掉schema,使用get参数传递scheme,默认为 http
3,修改正则获取方式。 #百度因为首页有个奇葩的 .ico 的css 类,目前有bug。
> 影响范围www.baidu.com
> baidu.com无影响
V = 2.1
1,除火狐浏览器外都会下载文件。
2,修复403错误

4,下一版本修改:
> 添加cdn库,无需每次都去请求(服务器,或者OSS缓存)。正则。添加icon错误反馈。
> 修复有些网站403错误,防止爬虫请求。
> 修复跳转连接无法获取icon
> 因为大多网站图像大小规格不正规,加入图像处理。
> 除火狐浏览器外都会下载文件。
> = - = 有人依然会添加schema
> 无icon,使用默认图标

如果站点想要调用接口,请联系ci_knight@msn.cnci_knight@msn.cn

Ver = 1.0 / 2015-04-28

1
2
3
4
接口地址:http://www.whnzy.com/tools/get_icon/
添加参数:
http://www.whnzy.com/tools/get_icon/http://www.cnblogs.com/
http://www.whnzy.com/tools/get_icon/www.cnblogs.com/

出错几率比较高。有些网站页面无添加favicon,浏览器会默认去访问 根目录下的该文件,百度,网易云音乐都是如此,功能正在开发中。

该功能可用于友情链接的icon使用. 项目地址

如果你有一台国外的服务器,你就可以直接通过它来翻墙了.小心为好,还是会被GFW ban掉.

连接前可以先做以下简单配置

在家目录的.ssh中创建config,然后做以下配置

1
2
3
4
Host remote-host
HostName 10.0.0.2 #你的ip
User root
Port 22

生成你的公钥私钥对

1
ssh-keygen

上传你的公钥,需要输入登录密码

1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@remote-host

建立连接

1
ssh -D 7878 -f -C -q -N remote-host

之后你就可以通过浏览器代理使用socks5进行连接了.