批量修改MySQL表前缀

在数据库设计中,对于某个特定的项目,一般对其所有的数据表指定相同的表前缀,如WordPress的数据表都是以wp_开头的,Discuz的数据表都是以dz_开头的。这样不但便于区分,更重要的作用在于可以避免将多个项目部署到同一个数据库时可能出现的表同名冲突。

那么,有如下这种情况时:

用户A和用户B都使用wordpress程序,现在他们想将程序放在一起,但是主机上只分配了一个数据库给他们,意味着他们的数据需要存放在一个数据库,问题是他们先前已经创建好了wordpress的数据库,并且使用了相同的表前缀,都使用了wp_,那么,怎样批量修改表前缀呢。

通过PHP脚本显然可以做到,在MySQL中修改表名的语句为

RENAME TABLE oldname TO newname

这里,我尝试采用纯SQL语句来实现,捣鼓了一阵子,于是有了下面这个存储过程:

-- @author xueyu
-- @desc modify the prefix of table name in db
-- @example
--
-- use DBNAME;
-- show tables;
-- source ~/change_prefix.sql;
--
-- call change_prefix('old_', 'new_', 'DBNAME');
--
-- show tables;
-- drop procedure if exists change_prefix;
--

delimiter //
DROP procedure IF EXISTS change_prefix //

CREATE procedure change_prefix(IN oldpre VARCHAR(200), IN newpre VARCHAR(200), IN dbname VARCHAR(200))
begin
  declare done INT DEFAULT 0;
  declare oldname VARCHAR(200);
  declare cur CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema= dbname AND table_name LIKE concat(oldpre,'%');
  declare continue handler FOR NOT found SET done = 1;
  open cur;

  repeat
    fetch cur INTO oldname;
    IF NOT done then
        SET @newname = concat(newpre, trim(LEADING oldpre FROM oldname));
        SET @sql = concat('rename table ',oldname,' to ',@newname);
        prepare tmpstmt FROM @sql;
        execute tmpstmt;
        deallocate prepare tmpstmt;
    end IF;
  until done end repeat;

  close cur;
end //

delimiter ;

使用方法很简单,直接导入这个脚本,然后运行

call change_prefix('old_', 'new_', 'DB_NAME');

即可,注意,脚本有删除change_prefix这句,如果你有同样命名的存储过程,注意去掉。用完之后,可以将这个存储过程删除掉。
我们可以批量给数据库里的所有表加上同样的前缀,第一个参数留即可

call change_prefix('', 'added_', 'DB_NAME');

同理,第二个参数留空可以去掉指定的表前缀。

CentOS 5/6 修改主机名(hostname)

需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常。首先切换到root用户。

/etc/sysconfig/network

用任一款你喜爱的编辑器打开该文件,里面有一行 HOSTNAME=localhost.localdomain (如果是默认的话),修改 localhost.localdomain 为你的主机名。

/etc/hosts

打开该文件,会有一行 127.0.0.1 localhost.localdomain localhost 。其中 127.0.0.1 是本地环路地址, localhost.localdomain 是主机名(hostname),也就是你待修改的。localhost 是主机名的别名(alias),它会出现在Konsole的提示符下。将第二项修改为你的主机名,第三项可选。

将上面两个文件修改完后,并不能立刻生效。如果要立刻生效的话,可以用 hostname your-hostname 作临时修改,它只是临时地修改主机名,系统重启后会恢复原样的。但修改上面两个文件是永久的,重启系统会得到新的主机名。

最后,重启后查看主机名 uname -n 。

andriod系统下sd卡各文件夹功能解析/清理SD卡必备!

下面是我们文件夹里通常能见到的文件。也不是非常全面,而且SD卡用久了,也会出现许多没用的,大家完全可以对照本文把没用的删除掉。如果有什么没有照顾到的还希望大家一起研究研究。
  1、.android_secure 是官方app2sd的产物,删了之后装到sd卡中的软件就无法使用了。
  2、.Bluetooth 顾名思义,用蓝牙之后就会有这个。
  3、.mobo 顾名思义,Moboplayer的缓存文件。
  4、.QQ 顾名思义,QQ的缓存文件。
  5、.quickoffice 顾名思义,quickoffice的缓存文件。
  6、.switchpro 顾名思义,switchprowidget(多键开关)的缓存文件。
  7、.ucdlres 顾名思义,UC迅雷的缓存文件。
  8、albumart 音乐专辑封面的缓存文件夹。
  9、albums 相册缩略图的缓存文件夹。
  10、Android 比较重要的文件夹,里面是一些程序数据,比如google map的地图缓存。
  11、backups 一些备份文件,比如联系人导出到SD卡时会导入到此文件夹。
  12、baidu 顾名思义,掌上百度、百度输入法之类程序的缓存文件夹。
  13、bugtogo 系统出现问题的时候会形成一些报告文件,存放于此文件夹。
  14、cmp 个人初步判断是音乐的缓存文件夹。
  15、data 同样是缓存数据的文件夹,与Android性质类似。
  16、DCIM 相机的缓存文件夹。
  17、documents DocumentsTo Go的相关文件夹。
  18、etouch 易行的缓存文件夹。
  19、extracted androzip等解压缩软件默认的解压目录。
  20、gameloft 顾名思义,gameloft游戏数据包存放的文件夹。
  21、handcent 顾名思义handcent(超级短信)数据文件夹。
  22、handyCurrency 货币汇率相关的文件夹,装了handycalc(科学计算器)之后才会有。
  23、ireader 顾名思义,ireader的缓存文件夹。
  24、KingReader 顾名思义,开卷有益的缓存文件夹。
  25、LazyList Applanet(黑市场)的缓存目录,也许和其他程序也有关,暂时不太清楚。
26、LOST.DIR卡上丢失或出错的文件会跑这里,此目录无用,删了会自动生成。
  27、moji 顾名思义,墨迹天气的缓存目录。
  28、MusicFolders poweramp产生的缓存文件夹。
  29、openfeint 顾名思义,openfeint的缓存文件夹。
  30、Picstore 图片浏览软件建立的一个目录。
  31、Playlists 播放列表的缓存文件夹。
  32、renren 顾名思义,人人网客户端的缓存文件夹。
  33、screenshot 截屏图片保存的目录,screenshot这个软件的。
  34、ShootMe顾名思义,shootme截屏后图片文件保存的目录。
  35、SmartpixGames SmartpixGames出品游戏的缓存文件夹,比如Jewellust。
  36、sogou 顾名思义,搜狗拼音的缓存文件夹。
  37、SpeedSoftware RE文件管理器的缓存文件夹。
  38、SystemAppBackupSystemApp remove(深度卸载)备份系统文件后,备份文件保存的目录。
  39、TalkingFriends talkingtom(会说话的tom猫)录制的视频文件所保存的目录。
  40、Tencent 顾名思义,腾讯软件的缓存目录,比如QQ。(与上面的.QQ文件夹并不相同)
  41、TitaniumBackup 顾名思义,钛备份备份的程序所保存的目录。
  42、TunnyBrowser 感觉是海豚浏览器的缓存目录,但不知道为什么叫这个名字,金枪鱼浏览器…..
  43、UCDLFiles UC迅雷下载文件的保存目录。
  44、UCDownloads UC浏览器下载文件的保存目录。
  45、VIE Vignette(晕影相机)的缓存目录。
  46、yd_historys Youdao 有道词典搜索历史的缓存目录。
  47、yd_speech 有道词典单词发音的缓存目录。
  48、youmicache 删掉后还会自动生成,悠米广告的缓存目录,广告程序内嵌在其他程序中。
  49、.新建文件夹 检查下是不是你自己放什么图的文件夹。。
  50、 sina 新浪微博
  51、playnow 索尼爱立信的在线商店playnow
  52、PlayerPro 好评最多的音乐播放器
  53、Mcdonalds 手机里的Mcdonalds软件的缓存,删除后,软件要重新联网下载才能使用。不建议删除
  54、mhc 手机里装了**软件后,**后的文件就在这里。
  55、sgsupdate 三国杀 的升级文件的安装包就在这
  56、 bluetooth手机蓝牙接收的文件默认在这里

NGINX自动切割日志的脚本

#! /bin/bash

nginx=/usr/local/nginx/sbin/nginx #NGINX的位置
Date=$(date -d -1day +"%Y%m%d") #获取昨天日期
logs_dir=/var/logs/ #log目录
bak_dir=/var/logs/$Date #log备份目录

#创建今日备份目录
mkdir $bak_dir

#先把现有的log文件挪到备份目录临时存放
cd $logs_dir
echo "moving logs"
/bin/mv *.log $bak_dir
sleep 3

#重建nginx log
echo "rebuild logs"
echo "nginx -s reopen"
$nginx -s reopen

Linux批量修改文件中内容

在Linux系统下修改一个文件中某段内容,如果想修改的内容只有一段或者几段的话我们手动就可以修改了,但是如果我们需要修改的内容在文件中大批量的出现,我们还是靠手动修改的话将会耗费大量的时间和精力。下面将介绍一种大批量修改文件的方法。希望对有这种需求的朋友有所帮助。

命令结构如下:

find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'

Nginx+iptables屏蔽访问Web页面过于频繁的IP(防DDOS,恶意访问,采集器)

通过分析nginx的日志来过滤出访问过于频繁的IP地址,然后添加到nginx的blockip.conf,并重启nginx

脚本如下:

#!/bin/sh
nginx_home = /Data/app_1/nginx
log_path = /Data/logs

/usr/bin/tail -n50000 $log_path/access.log \
|awk '$8 ~/aspx/{print $2,$13}' \
|grep -i -v -E "google|yahoo|baidu|msnbot|FeedSky|sogou" \
|awk '{print $1}'|sort|uniq -c |sort -rn \
|awk '{if($1>150)print "deny "$2";"}'> $nginx_home/conf/vhosts/blockip.conf

/bin/kill -HUP `cat $nginx_home/nginx.pid`

也可以通过分析nginx日志过滤出频繁访问IP,直接用iptables屏蔽这个IP,就用不着重启nginx了,并且屏蔽效果更好。

单个IP的命令是

iptables -I INPUT -s 124.115.0.199 -j DROP

封IP段的命令是

iptables -I INPUT -s 124.115.0.0/16 -j DROP

封整个段的命令是

iptables -I INPUT -s 194.42.0.0/8 -j DROP

封几个段的命令是

iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP

刚才不小心搞的自己都连不上了-_-!!!

iptables -I INPUT -p tcp –dport 80 -s 124.115.0.0/24 -j DROP

以后用这种只封80端口就行了,不会出问题!

iptables -I INPUT -p tcp –dport 80 -s 124.115.0.0/24 -j DROP

iptables -I INPUT -s 61.37.81.0/24 -j DROP

解封

iptables -F

清空

iptables -D INPUT [编号]

 

Linux下文件权限的解读

三位数字代表9位的权限,分成3部分,第一部分3位表示所有者的权限,第二部分3位表示同组用户权限,第三部分3位表示其他用户权限,r代表读取权限等于4,w代表写入权限等于2,x代表执行权限等于1
比如777,第一位7等于4+2+1,所以就是rwx,所有者有读取、写入、执行的权限,第二位7也是4+2+1,rwx,同组用户具有读取、写入、执行权限,第三位7,代表其他用户有读取、写入、执行的权限。
比如744,第一位7等于4+2+1,rwx,所有者具有读取、写入、执行权限,第二位4等于4+0+0,r–,同组用户只有读取权限、第三位4,也是r–,其他用户只有读取权限。

444  r--r--r--
600  rw-------
644  rw-r--r--
666  rw-rw-rw-
700  rwx------
744  rwxr--r--
755  rwxr-xr-x
777  rwxrwxrwx

 

Linux下使用iptables禁止IP

1、安装iptables防火墙
CentOS执行:yum install iptables
Debian/Ubuntu执行:apt-get install iptables

2、清除已有iptables规则

iptables -F
iptables -X
iptables -Z

3、开放指定的端口

#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#如果有其他端口的话,规则也类似,稍微修改上述语句就行
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

4、屏蔽IP

#如果只是想屏蔽IP的话3、“开放指定的端口”可以直接跳过。
#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP
#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
#封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP

4、查看已添加的iptables规则
iptables -L -n
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示IP地址和端口号,不将ip解析为域名

5、删除已添加的iptables规则
将所有iptables以序号标记显示,执行:
iptables -L -n –line-numbers
比如要删除INPUT里序号为1的规则,执行:
iptables -D INPUT 1

6、iptables的开机启动及规则保存
chkconfig –level 345 iptables on
CentOS上可以执行:service iptables save保存规则
linux下使用iptables封ip段的一些常见命令:
封单个IP的命令是:

iptables -I INPUT -s 211.1.0.0 -j DROP

封IP段的命令是:

iptables -I INPUT -s 211.1.0.0/16 -j DROP
iptables -I INPUT -s 211.2.0.0/16 -j DROP
iptables -I INPUT -s 211.3.0.0/16 -j DROP

封整个段的命令是:

iptables -I INPUT -s 211.0.0.0/8 -j DROP

封几个段的命令是:

iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP

解封的话:
iptables -D INPUT -s IP地址 -j REJECT
iptables -F 全清掉了

关闭: /etc/rc.d/init.d/iptables stop
启动: /etc/rc.d/init.d/iptables start
重启: /etc/rc.d/init.d/iptables restart

1、重启后生效
开启:chkconfig iptables on
关闭:chkconfig iptables off
2、即时生效,重启后失效
开启:service iptables start
关闭:service iptables stop

Linux计划任务入门详解

Linux操作系统定时任务系统 Cron 入门
  cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
  /sbin/service crond start //启动服务
  /sbin/service crond stop //关闭服务
  /sbin/service crond restart //重启服务
  /sbin/service crond reload //重新载入配置
  你也可以将这个服务在系统启动的时候自动启动:
  在/etc/rc.d/rc.local这个脚本的末尾加上:
  /sbin/service crond start
  现在Cron这个服务已经在进程里面了,我们就可以用这个服务了,Cron服务提供以下几种接口供大家使用:
  1.直接用crontab命令编辑
  cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
  crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
  crontab -l //列出某个用户cron服务的详细内容
  crontab -r //删除没个用户的cron服务
  crontab -e //编辑某个用户的cron服务
  比如说root查看自己的cron设置:crontab -u root -l
  再例如,root想删除fred的cron设置:crontab -u fred -r
  在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
  进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
任务调度的crond常驻命令
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
1、linux任务调度的工作主要分为以下两类:
*系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
*个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置。
2.crontab命令选项:
-u指定一个用户,
-l列出某个用户的任务计划,
-r删除某个用户的任务,
-e编辑某个用户的任务
3.cron文件语法:
分 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值范围,0表示周日一般一行对应一个任务)
4.记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-“代表从某个数字到某个数字,
“,”分开几个离散的数字
一、任务调度设置文件的写法
可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
具体格式如下:
Minute Hour Day Month Dayofweek command
分钟 小时 天 月 天每星期 命令
每个字段代表的含义如下:
Minute 每个小时的第几分钟执行该任务
Hour 每天的第几个小时执行该任务
Day 每月的第几天执行该任务
Month 每年的第几个月执行该任务
DayOfWeek 每周的第几天执行该任务
Command 指定要执行的程序
在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。
举例如下:
5 * * * * ls 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]
每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件
50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]
二、新增调度任务
新增调度任务可用两种方法:
1、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
2、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。
三、查看调度任务
crontab -l //列出当前的所有调度任务
crontab -l -u jp //列出用户jp的所有调度任务
四、删除任务调度工作
crontab -r //删除所有任务调度工作
五、任务调度执行结果的转向
例1:每天5:30执行ls命令,并把结果输出到/jp/test文件中
30 5 * * * ls >/jp/test 2>&1
注:2>&1 表示执行结果及错误信息。
编辑/etc/crontab 文件配置cron
  cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:
  SHELL=/bin/bash
  PATH=/sbin:/bin:/usr/sbin:/usr/bin
  MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
  HOME=/ //使用者运行的路径,这里是根目录
  # run-parts
  01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
  02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
  22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
  42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本
  大家注意”run-parts”这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了
例如: 1、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
2、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务
11 2 21 10 * rm -rf /mnt/fb