数据库入门

数据库是什么,从字面上理解,就是存储数据的系统。

日常学习工作生活中,经常会见到“数据库”这一概念,如,公安系统的居民身份证数据库,银行储户信息数据库,某某论文数据库,基因数据库,等等。这些例子里的数据库并非本文所要讲述的“数据库”的概念,它们是 依据一定的手段存储的、可以快速检索的海量数据。而本文中所讲的数据库,则是能够对数据实现方便存储、快速检索、易于更新维护的软件,注意了,我们所讲的数据库实际是计算机软件,而并不关心存储具体数据是银行存款、还是家庭收支账单、或者是邂逅美女的记录。严格的说,本文所讲的数据库,是“关系型数据库”,而不是当下在sns时代火爆的NoSQL数据库。

关系型数据库软件,有很多种,应用广泛的有MySQL, PostgreSQL, Oracle, DB2,MS sql server等。

数据拆分

数据库是对数据“格式化”存储的工具,这里的格式化,指的是对数据分类另,分条目,分栏目,按实际需求把数据拆分成小的单元,并存储在数据库中。

举个例子类比一下,以便对数据库有个初步理解。Excel文件(电子表格),大家应该都知道。

  1. 一个excel文件,它里面在可以存储多个工作表,新建一个excel文件默认会有Sheet1,Sheet2,Sheet3这三个工作表。
  2. 每个工作表,都是一个“表格”,可以有很多行。
  3. 每一行,都分为多列,每列是一个单元格,可以存储一定的内容。

[注] 工作表,对于excel本身,一般理解成一个工作表有行与列垂直交错形成格子,每个格式就是单元格。但为了类比理解数据库,不能这样理解,而是按html(超文本标记语言)里对表格(table)的划分,表格先分成行(<tr>.....</tr>),对每行再分列(<td>...</td>).

数据库可以与excle作类比,一个excel文件对应类比一个数据库,excel工作表类比数据库的表,工作表的行对应数据库里表的行。

数据库的数据一般正是拆分为这三个层次的,即表,行,字段 这三个层次。

数据表

数据库里的表,即数据表,简称表;可以与excel文件里的一个工作表类比。注意,这里说用来类比的excel表,是没有“合并单元格”存在的,不管是按行或是按列合并的。

通常,我们的excel表里,会有一个标题行。类似上图中所示,这是个简单的人员联系信息表,第一行,"name gender company address phone"那一行,它分为多列,每列都是对本列的说明、或者说是该列的名称,对于数据库列,也有这样的一列,称为列名,也称为字段名。不同的是,在excel表里,列名是占据一行的,而在数据库里,它并不占据任何一行;这一点,有点类似于excel里本身的列名的,如 列A、列B、列C... 这是固定的列名,不能修改的;而数据库里列名都是我们自己定义的。

多列数据,每列数据都放

行/记录

数据表里的数据是分为多行的,每行的格式都是一致的,如上图中所示,

本文内容原本是很久以前在公司里给非技术人员培训时的演示文稿。在草稿箱里放了几乎5年,最近整理博客看其更新时间为 2011年12月26日 @ 23:05,这么久都没有继续写,大概以后也不会续写,直接发出来算了(2016-10-10 15:29)

MySQL函数 GROUP_CONCAT,相当有用

一直想找这个函数,今天终于找到了,属于聚合函数,也正是猜测可能是个函数函数、才通过“MySQL 聚合函数” google到的。

使用过程中可能会遇到1260错误,如下:

#1260 - %d line(s) were cut by GROUP_CONCAT()

这是因为group_concat()有最大长度限制,该限制值默认为1024,可以从mysql环境变量里可以查看。如需修改该值,可以在mysql配置文件里指定:

group_concat_max_len = 102400

也可以在mysql运行时动态指定,执行语句:

SET GLOBAL group_concat_max_len=102400;

参考该链接http://www.fuchaoqun.com/2008/12/mysql-trap-of-group-concat/,或者mysql手册(推荐)。

centos 6 下编译安装 nginx

下载nginx源码包,可以到nginx官方的下载文件归档里 http://nginx.org/download/ 下载

下载pcre源码,并编译安装,从pcre官方下载  ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.zip

解压缩 unzip pcre-8.21.zip

进入源码目录 cd pcre-8.21/

./configure

make

make install

全部使用默认,不必要指定目录,这样包容易被找到。

安装nginx

这里使用nginx 1.0.8为例。

下载源码包  wget http://nginx.org/download/nginx-1.0.8.tar.gz

解压缩 tar xvf nginx-1.0.8.tar.gz

进入源码目录 cd nginx-1.0.8/

查看配置参数 ./configure --help (此步可以省略)

简单配置 ./configure
(注:centos 6 默认安装pcre包的,但是其安装位置并不为nginx识别,而且即使手工指定好像也不行,编译过程中会提示找不到文件;所以才需要先安装pcre包)

不指定任何配置选项,应该可以成功通过,得到如下的消息

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + md5: using system crypto library
  + sha1: using system crypto library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

然后就是 make

应该不会出问题,接着make install 就安装好了。

先测试一下是否可以运行,执行 /usr/local/nginx/sbin/nginx 没有消息提示,通过浏览器打开nginx所在的ip地址,应该可以看到

 

Welcome to nginx!

 

这样的一个简单页面,证明nginx可以工作。

接下来的工作就是配置nginx了,其配置文件为/usr/local/nginx/conf/nginx.conf

linux服务器阻止恶意的暴力ssh登录

可以使用 DenyHosts 或 pam_tally2.so 实现

DenyHosts是Python语言编写的程序,主动分析登录日志文件/var/log/secure,对于多次连续的重复错误登录ip,加入/etc/hosts.deny,从而阻止这些暴力登录。

详细参看:linux下使用denyhosts防止ssh暴力破解

pam_tally2,则是使用pam模块,对于连续N次登录错误的用户,自动禁止登录若干时间。

详细参看:使用pam模块pam_tally2设置Linux用户连续N次输入错误密码自动锁定X分钟

fedora16通过命令行配置无线,并开机自动连接

装在上网本上用来折腾的一个fedora 13系统,没有图形界面,但还是花了整整一夜加半天时间从13升级到16,已经是最新的版本了;并把自动连接无线的命令写到一个脚本文件里,开机自动运行。

以前一直不能通过命令行启用无线,后来才发现是因为NetworkManager服务的原因,禁止该服务后可以通过命令行配置无线正常连网。最好把rpm -e NetworkManager 卸载掉这个NM包,以免它的干扰。

无线使用最简单的wep加密,在路由器上限制了允许mac地址,因此无线安全不是大问题。

无线配置命令非常简单
iwconfig wlan0 essid "[无线AP名称]" key s:[无线密码]
ifconfig wlan up
dhclient wlan0

将写入一个文件,保存为/root/script/start-wlan.sh,也可以保存到其它目录里。

在文件/etc/rc.d/rc.local 里加入一行

.  /root/script/start-wlan.sh

即可

 

[转]让你提升命令行效率的 Bash 快捷键

生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率。

编辑命令

  • Ctrl + a :移到命令行首
  • Ctrl + e :移到命令行尾
  • Ctrl + f :按字符前移(右向)
  • Ctrl + b :按字符后移(左向)
  • Alt + f :按单词前移(右向)
  • Alt + b :按单词后移(左向)
  • Ctrl + xx:在命令行首和光标之间移动
  • Ctrl + u :从光标处删除至命令行首
  • Ctrl + k :从光标处删除至命令行尾
  • Ctrl + w :从光标处删除至字首
  • Alt + d :从光标处删除至字尾
  • Ctrl + d :删除光标处的字符
  • Ctrl + h :删除光标前的字符
  • Ctrl + y :粘贴至光标后
  • Alt + c :从光标处更改为首字母大写的单词
  • Alt + u :从光标处更改为全部大写的单词
  • Alt + l :从光标处更改为全部小写的单词
  • Ctrl + t :交换光标处和之前的字符
  • Alt + t :交换光标处和之前的单词
  • Alt + Backspace:与 Ctrl + w 类似,分隔符有些差别

重新执行命令

  • Ctrl + r:逆向搜索命令历史
  • Ctrl + g:从历史搜索模式退出
  • Ctrl + p:历史中的上一条命令
  • Ctrl + n:历史中的下一条命令
  • Alt + .:使用上一条命令的最后一个参数

控制命令

  • Ctrl + l:清屏
  • Ctrl + o:执行当前命令,并选择上一条命令
  • Ctrl + s:阻止屏幕输出
  • Ctrl + q:允许屏幕输出
  • Ctrl + c:终止命令
  • Ctrl + z:挂起命令

Bang (!) 命令

  • !!:执行上一条命令
  • !blah:执行最近的以 blah 开头的命令,如 !ls
  • !blah:p:仅打印输出,而不执行
  • !$:上一条命令的最后一个参数,与 Alt + . 相同
  • !$:p:打印输出 !$ 的内容
  • !*:上一条命令的所有参数
  • !*:p:打印输出 !* 的内容
  • ^blah:删除上一条命令中的 blah
  • ^blah^foo:将上一条命令中的 blah 替换为 foo
  • ^blah^foo^:将上一条命令中所有的 blah 都替换为 foo

友情提示:

  1. 以上介绍的大多数 Bash 快捷键仅当在 emacs 编辑模式时有效,若你将 Bash 配置为 vi 编辑模式,那将遵循 vi 的按键绑定。Bash 默认为 emacs 编辑模式。如果你的 Bash 不在 emacs 编辑模式,可通过 set -o emacs 设置。
  2. ^S、^Q、^C、^Z 是由终端设备处理的,可用 stty 命令设置。

原文:http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/

译文:http://linuxtoy.org/archives/bash-shortcuts.html

nginx下为wordpress配置重写规则/rewrite

nginx不能支持.htaccess的rewrite规则,所以使用nginx作web服务器,配置wordpress固定链接会比较麻烦一点,要自己写规则到nginx配置文件里。网上也看到一些配置规则,不过觉得怪怪的。

发现nginx官方网站上有个页面,关于wordpress重写规则的,http://wiki.nginx.org/WordPress里面有“cool”的规则,本站的nginx配置如下,其中一行 try_files $uri $uri/ /index.php; 就是这行,应该比网上有些文章里的规则更cool。

    server {
        server_name  blog.path8.net;
        root /var/www/vhost/blog;
        access_log  logs/vhost-blog.path8.net.log  main;

        location /favicon.ico {
                log_not_found off;
                access_log off;
        }
        location /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        location / {
                index  index.html index.htm index.php;
                # from nginx.org rewrite rule
                # This is cool because no php is touched for static 
 try_files $uri $uri/ /index.php;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/vhost/blog$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

archlinux安装桌面环境,startx:command not found/cannot execute "/usr/bin/sdm"

试用archlinux,根据http://www.ha97.com/3496.html(ArchLinux 2010.05安装及基本配置)操作。

但运行startx却得到command not found,在centos 6 上查startx,该文件位于/usr/bin/startx,属于xorg-x11-xinit包

[feng@fsc ~]$ whereis /usr/bin/startx
startx: /usr/bin/startx /usr/share/man/man1/startx.1.gz
[feng@fsc ~]$ rpm -qf /usr/bin/startx
xorg-x11-xinit-1.0.9-13.el6.i686

不幸的是pacman -S 却说没有这个包,经搜索得知在archlinux里,这个包包为xorg-xinit,感到不可理解的是,为什么这个包没有在安装xorg包时没在依赖检查里自动安装。

运行init 5进入gnome图形桌面时,出现INIT: cannot execute "/usr/bin/xdm",要修改

/etc/inittab

x:5:respawn:/usr/bin/xdm -nodaemon

一行修改为,

x:5:respawn:/usr/sbin/gdm -nodaemon

目前的archlinux 包里没有了xdm,而以gdm代替,但inittab文件里却没有相应的更新。

看来archlinux真的不是那么容易,没有一定的linux经验难度。

本文是很久以前操作手记文章,那时折腾archlinux桌面,文章里写的这一步好像是通过了,但后来还是没有成功,忘了卡在哪里,就放弃了,以后再没有搞archlinux,本文也就无限期搁置了。于是本文在草稿箱里放了5年多。最近整理博客看其更新时间为 2011年10月3日 @ 15:32,这么久都没有继续,大概以后也不会续写了,直接发出来算了(2016-10-10 18:06)