简单命令对mysql数据库的备份与还原

使用phpMyAdmin备份mysql数据库

备份mysql的最简单方法是的使用phpMyAdmin的“导出”功能,导出成sql文件,不用管其它选项,只管导出就可以,这就是mysql标准的备份文件。

导出时,一般不要勾选压缩选项。因为如果备份文件大到一定程度,就会因为php分配不到足够内存而死掉;经验是50M以上的表,就不要压缩了。这是个蛋疼的事情:小文件不值得压缩,大了反而压缩不动。所以不压缩就是了。

还原mysql数据库

要还原mysql数据库时,使用phpMyAdmin是个简单的方法,但更容易因为备份文件过大而超过php内存限制而死掉,这时你会有种痛不欲生的感觉。

推荐使用命令行连接mysql,以source命令导入还原,这个导入过程是件愉悦的事情。

不幸的是如果你在windows下,会比较啰嗦:

把你的mysql备份文件放到一个比较浅的目录里,比如放在 E:\120507.sql ,你要还原的数据库叫mydata

找到你的mysql安装在哪里,假如你的mysql安装在D:\Program Files\MySQL\MySQL Server 5.0 ,那么你的mysql命令行客户端将位于D:\Program Files\MySQL\MySQL Server 5.0\bin ,按着按下面的步骤来:

  • 1. 开始-运行,输入cmd,确定,你将进入命令行界面
  • 2. 输入 d: 然后回车,进入D盘
  • 3. 输入cd "D:\Program Files\MySQL\MySQL Server 5.0\bin" 再回车(注意,如果路径中有空格,那引号是必须的)
  • 4. 输入mysql -uroot -p123456 --default-character-set=utf8 --max_allowed_packet=16777216 --net_buffer_length=16384 回车(假设你的mysql的root用户密码是123456, 注意,这里u与p后面带不带空格都可以,我习惯不带; 你只需改这行命令里的密码部分,其它不需要改变,照用即可)
  • 你将看到

    注意到光标闪烁处的mysql> ,这就说明已经成功连接到本机的mysql数据库。
  • 输入use mydata 回车 ,进入mydata数据库
  • 输入source E:\120507.sql 回车,你将看到一行行快速滚动的信息。滚动完毕就导入完成了。
  • 输入exit驾车即可。回到phpmyadmin里看导入的结果吧.

核心回顾

mysql备份,使用phpMyAdmin,导出需要的表,或整个数据库,注意最好不要勾选压缩

还原,使用命令行客户端连上mysql服务器,mysql -uroot -p123456 --default-character-set=utf8 --max_allowed_packet=16777216 --net_buffer_length=16384,然后use mydata进入需要还原的数据库,运行source x:\bakup_file.sql 导入备份。

linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)

linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,acl是一个好东西,有了它可以很完美且优雅的控制目录权限。acl的基础知识,这里不再详述,有兴趣可以参看此文(通过实践学习linux ACL基本用法/Linux ACL 体验)

一个很可能遇到的实际问题:

linux下的web站点,该站点开启ftp上传下载;web与ftp以不同的用户运行,分别是web, ftp.

该目录 ./html 结构大致如下

(shell当前目录为/var/www/html, 下同)

$ls
drwxr-xr-x 2 root root 4.0K May  7 07:51 admin
drwxr-xr-x 2 root root 4.0K May  7 07:51 image
drwxr-xr-x 2 root root 4.0K May  7 07:51 lib
drwxrwxrwx 2 root root 4.0K May  7 07:51 upload
-rw-r--r-- 1 root root    0 May  7 07:52 index.php
-rw-r--r-- 1 root root    0 May  7 07:52 config.inc.php

为了web的安全其见,其中

upload目录为web后台上传文件的目录,权限为777;其它文件(目录)权限755(这里使用555也是可以的)

这样web是安全了,但问题也来了

ftp用户就没有写入权限了,将无法通过ftp修改web程序。

如果能实现以下这样的功能就好了:

web用户还是以上权限,不多赋权;但ftp用户可以对这里的所有目录、子目录(及其中文件)都有完全的权限

这种情况下,就要派acl上场了。

对于web用户的权限,保持不变。而针对ftp用户设置几条acl规则:

setfacl -R -m u:ftp:rwx .

大意是,对当前目录 . 递归设置acl规则 u:ftp:rwx ,
u:ftp:rwx这条规则是针对指定用户设定的(u);该用户名为ftp; 权限规则是rwx

翻译成人类语言就是说:给当前目录及其子目录、文件设置acl规则,让用户ftp拥有完全权限。

太简单了,这样就完成搞定了!

差不多了,不过这里还有一个问题,对于以后新建的目录里,ftp用户可能并没有rwx权限,这是为什么呢?因为对于新建目录,它并没有相应的acl规则,而是沿用022的默认umask, 结果就是新文件的755权限。

这里就要用默认acl来实现,简单说来,就是让新建的目录,都自动继承一个默认的acl规则,让ftp用户拥有rwx权限。

setfacl -R -d --set u:ftp:rwx .

还是一条设置acl的命令(setacl); -R 是递归执行,这很简单。重点在 -d --set u:ftp:rwx 上。 -d,指后面是一条default acl规则,规则是  --set u:ftp:rwx, 对当前目录 . 设置规则

用人类的语言讲,就是让所有新建目录都对ftp用户设置rwx的默认权限。

就这样,设置完了。相当简单吧?

回过头来,再看看上面对upload目录设置777的权限,似乎也不并不怎么完美,是不是也可能通过acl规则让web用户拥有rwx的权限?当然可以,其实更好,因为这里的文件是web用户自己创建的,里面的文件所有者应该是web用户,777权限似乎高了点;而且如果这是从其它服务器上迁移过来的站点的话,这些文件的所有者可能还会比较乱。

另外,默认acl,只对以后的新建目录有效,而对已有文件,它并不改变其acl,所以,要同时使用上面所述的两个命令,对已有文件(setfacl -R -m u:ftp:rwx .)和以后的新建目录(setfacl -R -d --set u:ftp:rwx .)设置acl.

上面的acl是针对一个用户web设定的,还可以对一个用户组来设置 g:group_name:rwx , 这样对多用户协作状态下会比较有用。

一段apache虚拟主机的配置代码

一段apache虚拟主机的配置代码,包括了对部分目录禁用php解析,apache日志目录等

### Section 3: Virtual Hosts
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80
#
# NOTE: NameVirtualHost cannot be used without a port specifier
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
#

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /var/www/html/defsite
#    ServerName unknown-host.example.com
ErrorLog logs/defsite-host.example.com-error_log
CustomLog logs/defsit-host.example.com-access_log common

#    <IfModule mod_php5.c>
#        php_admin_value open_basedir "/var/www/html/vhosts/testsite/html/:/tmp"
#    </IfModule>
#
#    <IfModule suexec.c>
#        SuexecUserGroup web_testsite web_testsite
#    </IfModule>
</VirtualHost>

<VirtualHost *:80>
ServerAdmin tech@mysite.com
DocumentRoot "/var/www/html/vhosts/testsite/html"
ServerName www.testsite.com
ServerAlias job.mysite.com
ErrorLog "logs/testsite-error.log"
CustomLog "logs/testsite-access.log" common
<IfModule mod_php5.c>
php_admin_value open_basedir "/var/www/html/vhosts/testsite/html/:/tmp"
</IfModule>
RewriteLog "/var/www/html/vhosts/testsite/log/rewritelog.log"
</VirtualHost>
<Directory "/var/www/html/vhosts/testsite/html">
AllowOverride All
Options FollowSymLinks
Order allow,deny
Allow from all

#AllowOverride AuthConfig  #this line and below is required to auth,
#  AllowOverride has been configured above, no need to re configure
#    AuthName web_testsite
#    AuthType Basic
#    AuthUserFile /var/www/htpasswd/testsite.htpasswd
#    require valid-user
</Directory>
<Directory "/var/www/html/vhosts/testsite/html/images">
AllowOverride None
Options FollowSymLinks
Order allow,deny
php_admin_flag engine off
Allow from all
</Directory>
<Directory "/var/www/html/vhosts/testsite/html/css">
AllowOverride None
php_admin_flag engine off
</Directory>
<Directory "/var/www/html/vhosts/testsite/html/data">
AllowOverride None
php_admin_flag engine off
</Directory>
<Directory "/var/www/html/vhosts/testsite/html/js">
AllowOverride None
php_admin_flag engine off
</Directory>

<VirtualHost *:80>
ServerAdmin tech@mysite.com
DocumentRoot "/var/www/html/vhosts/www2.mysite.com/html"
ServerName www2.mysite.com
ServerAlias job2.mysite.com
ErrorLog "logs/www2.mysite.com-error.log"
CustomLog "logs/www2.mysite.com-access.log" common
</VirtualHost>
<Directory "/var/www/html/vhosts/www2.mysite.com/html">
AllowOverride All
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>

<VirtualHost *:80>
ServerAdmin tech@mysite.com
DocumentRoot "/var/www/html/vhosts/z.mysite.com/html"
ServerName z.mysite.com
ErrorLog "logs/z.mysite.com-error.log"
CustomLog "logs/z.mysite.com-access.log" common
</VirtualHost>
<Directory "/var/www/html/vhosts/z.mysite.com/html">
AllowOverride All
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>

<VirtualHost *:80>
ServerAdmin tech@mysite.com
DocumentRoot "/var/www/html/vhosts/bbs.mysite.net/html"
ServerName bbs.mysite.com
ErrorLog "logs/bbs.mysite.net-error.log"
CustomLog "logs/bbs.mysite.net-access.log" common
</VirtualHost>
<Directory "/var/www/html/vhosts/bbs.mysite.net/html">
AllowOverride All
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>

centos 6.x下的empathy安装包/rpm

直接上安装包

empathy-2.30_rpm_for_centos_f13

fedora13的二进制包,可以在centos 6.2下成功安装,并正常使用。这些包之间解决了包信赖,应该不再需要其它包;如果真的缺少了某个包,请通过yum 安装。

如果你的centos6安装有pidgin,推荐卸载掉,因为有个rpm包与centos6带的pidgin有冲突。

对于使用QQ的朋友,推荐下载安装这个 https://code.google.com/p/libqq-pidgin/ ,empathy/pidgin自带的QQ协议老了,而不再被tx支持。

centOS 6下通过yum安装php-mssql以使php支持microsoft sql server连接

centos 6下,安装fedoraproject的epel-release源,即可以安装php的mssql模块。

注:epel是fedora开发组为centos开发的附加软件yum源,可以弥补centos上游redhat里缺少的软件包。epel的质量还是相当之高的。

[root@c12 html]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
[root@c12 html]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
[root@c12 html]# yum install php-mssql
[root@c12 html]# /etc/init.d/httpd graceful

完成。

phpinfo中可以看到mssql的信息

mssql模块实际还是FreeTDS,其功能主要是在Liunx下能够访问Sybase及MS SQL,官方网站是:http://www.freetds.org/ 。当然也可以手工编译mssql模块到php中,不过通过yum更简单一点。

关于epel源,参看这里 http://fedoraproject.org/wiki/EPEL/zh-cn

本方法来源于centOS 6更新yum以便可裝php-mssql (http://blog.hubin411.com/2011/10/13/centos-6%e6%9b%b4%e6%96%b0yum%e4%bb%a5%e4%be%bf%e5%8f%af%e8%a3%9dphp-mssql/) 阅读该页面请自备梯子。或参看如下转录的核心部分:

tep 1:
# wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm    //取得rpm檔案

step 2:
# rpm -ivh epel-release-6-5.noarch.rpm    //安裝取得的rpm檔案

step 3:
# yum update    //更新yum的資源庫

step 4:
# yum install php-mssql    //安裝php-mssql

step 5:
# service httpd restart    //重啟apache伺服器

mysql多表join联查语句错误:#1241 - Operand should contain 1 column(s)

对ecshop系统做一些改造,需要一个三表join的查询,但写出语句却报错了

#1241 - Operand should contain 1 column(s)

语句如下:

SELECT a . * , IFNULL( g.goods_thumb, '' ) AS goods_thumb, g.goods_name AS goods_name_from_goods, g.brand_id, b.brand_name
FROM `eb`.`ec_goods_activity` AS a
LEFT JOIN (`eb`.`ec_goods` AS g , `eb`.`ec_brand` AS b )
ON (a.goods_id = g.goods_id , b.brand_id = g.brand_id)
WHERE a.act_type = '5'
AND a.start_time <= '1333010119'
AND a.end_time >= '1333010119'
AND a.is_finished <2
ORDER BY a.act_id DESC
LIMIT 20

起初死活找不到错误,突然发现ON子句里把条件and错写成逗号了,改正后执行正确,问题解决。

SELECT a. * , IFNULL( g.goods_thumb, '' ) AS goods_thumb, g.goods_name AS goods_name_from_goods, g.brand_id, b.brand_name
FROM `eb`.`ec_goods_activity` AS a
LEFT JOIN (
`eb`.`ec_goods` AS g, `eb`.`ec_brand` AS b
) ON ( a.goods_id = g.goods_id AND b.brand_id = g.brand_id )
WHERE a.act_type = '5'
AND a.start_time = '1333010119'
AND a.is_finished ORDER BY a.act_id DESC
LIMIT 20

网络科普:教你识别钓鱼网站

本文是一篇很久以前只写了个标题的文章。在草稿箱里放了4年多,最近整理博客看其更新时间为 2012年3月19日 @ 22:00,这么久都没有继续写,大概以后也不会续写了,直接发出来算了(2016-10-10 17:20)

(【补记】事实上,本文被当作临时粘贴板用过一次,用来把一个网页上的表格复制成html格式,而帖在编辑器里,并且保存了草稿,应该是wordpress自动保存的,该草稿直到写这个后记之前还是;当然现在已经删除了)

centos 6.2 yum 升级时提示no module named yum

很怪的问题,同一个iso镜像,昨天安装好好的,这次安装后,运行yum update时,报错了 no module named yum

消息内容说是python的问题,看网上别人是使用过程中突然出现了 no module named yum 这样问题,而我是刚安装就被报 no module named yum,难道是人品问题?

参考网上的说法,把iso镜像挂上,到里面的rpm目录里,把rpm-xxxxxx.rpm的几个包重新安装一遍,rpm -ivh xxxxxxx,然后再运行yum update 就好了。

很是怪异的问题。

从最小化centos6.2下安装centos桌面系统gnome

一台旧电脑,比较老了一点,拿来用来做linux测试用,硬件有点问题,不能从U盘启动;也没有CentOS安装光盘,以前下载的centos6.0的DVD安装镜像似乎也有问题,于是整个安装过程相当麻烦;要先最小安装,然后在线安装gnome桌面环境。

从网易镜像站点http://mirrors.163.com/centos/6.2/isos/i386/上下载了一个minial的centos6.2安装上了,自然是没有图形界面的。接下来是安装图形界面等,直接在线yum安装,大概半个小时基本安装成功,这得益于10M的光纤,不然这个安装过程不知道要花多久。

下面是minial centos6.2安装后安装gnome桌面环境的主要过程:

1.添加一个普通用户,设置密码

useradd -Um feng
passwd feng

2. 查看网络状态并启用有线网络eth0,通过dhcp获取地址,并检查获取到的ip地址

ifconfig eth0
dhclient eth0
ifconfig eth0

3. 进行一次在线升级

yum update

4. 导出并查看yum组 grouplist (可选,只是为了方便查看需要哪些包/组)

yum grouplist > group.txt
less group.txt

5. 安装桌面系统

yum groupinstall Desktop
yum groupinstall "X Window System"

5. 安装中文支持

yum groupinstall "Chinese Support [zh]"
yum groupinstall chinese-support

6. 进入图形化桌面

[注意] 安装minial centos时,是使用的默认语言为中文,如果默认选择的是英文,则

修改/etc/sysconfig/i18n,将LANG修改为LANG="zh_CN.UTF-8" (网上说法,个人未证实)

init 5

7. 登录,设置用户家目录标准文件标准夹名

登录后,将出现用户家目录文件名改名的提示界面,推荐“不再问我” “保留旧名称”;当然看个人习惯,改成中文也可以。个人是习惯使用英文文件名。

8. 去掉一些gnome自动启用项

进入 系统 - 启用应用程序,取消对“用户文件夹更新”的勾选。另外的一些启用项目,也酌情取消。

9. 下面就可以在gnome终端里操作了。根据实际需要安装一些有用的组,当然也可以一个一个包的安装。

yum groupinstall "Desktop Platform"
yum groupinstall "Development tools"
yum groupinstall "Base" "Fonts" "Emacs" .....

按下来,加个第三方yum源吧,不然是没有多媒体应用程序的,推荐RPMforge, 很不错的centos RPM/yum源(参看 http://blog.path8.net/archives/4707.html)

enjoy your gnu/linux

bash shell下按文件夹快速合并文件

要求:很N个文件夹,每个文件夹下都是N个文本文件,要把每个文件夹下文件合并成一个文件。

如果windows下,除非使用第三方工具,否则这是个无法想像的工作。更不要说使用文本编辑工具打开、然后手工拼合了。在linux下,简单的使用命令,那是一件相当优雅的事情:如下

$ for f in `ls`; do cd $f; cat `ls` >../${f}.txt ;cd .. ; done

(注:行首的美元符$是bash命令提示符)

这条命令执行完,就把每个文件夹下的文件合并起来,文件名就是 文件夹的名字+.txt

 

Pages: Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 Next