September 26, 2011
show slave status\G中的Read_Master_Log_Pos和Relay_Log_Pos的(大小)关系
"\u003cp\u003eJust to clarify, there are three sets of file/position coordinates in SHOW SLAVE STATUS:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003eThe position, ON THE MASTER, from which the I/O thread is reading: Master_Log_File/Read_Master_Log_Pos. —–相对于主库,从库读取主库的二进制日志的位置,是IO线程\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe position, IN THE RELAY LOGS, at which the SQL thread is executing: Relay_Log_File/Relay_Log_Pos —-相对于从库,是从库的sql线程执行到的位置\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe position, ON THE MASTER, at which the SQL thread is executing: Relay_Master_Log_File/Exec_Master_Log_Pos —-相对于主库,是从库的sql线程执行到的位置\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eNumbers 2) …\u003c/p\u003e"
September 26, 2011
如何在windows下用bat脚本定时备份mysql
"\u003cp\u003e作/译者:叶金荣(Email: \u003cimg src=\"http://imysql.cn/files/pictures/email.gif\" alt=\"\"\u003e),来源:\u003ca href=\"http://imysql.cn/\"\u003ehttp://imysql.cn\u003c/a\u003e,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。\u003c/p\u003e\n\u003cp\u003e并不是所有MySQL都运行在Linux下,windows下也需要做例行备份,下面是用bat脚本做自动化备份的例子,大家可以参考下。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003erem\nrem C:\\Program Files\\WinRAR 需要放到 path 下,才能调用rar cli工具\nrem\nrem 跳转到工作目录下\nf:\ncd f:\\DBBAK\nrem 设置变量:备份文件名\nSET BAK_FILE=MY_DBBAK_%date:~0,-4%.sql\nrem 设置变量:日志文件名\nSET LOG_FILE=MY_DBBAK.log\nrem 记录日志\necho \u0026#34;%date%\u0026#34; \u0026gt;\u0026gt; %LOG_FILE%\nrem 开始做备份\nmysqldump --default-character-set=utf8 -hlocalhost -uroot -R --triggers --single-transaction -B mydb \u0026gt; %BAK_FILE%\nrem …\u003c/code\u003e\u003c/pre\u003e"
September 26, 2011
mysql主从复制原理
"\u003cp\u003e\u003cstrong\u003eReplication 线程\u003c/strong\u003e\nMysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端。\u003c/p\u003e\n\u003cp\u003e要实现 MySQL 的 Replication ,首先必须打开 Master 端的Binary Log(mysql-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全 顺序的执行日志中所记录的各种操作。打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用 “—log-bin” 参数选项,或者在 my.cnf 配置文件中的 mysqld 参数组([mysqld]标识后的参数部分)增加 “log-bin” 参数项。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMySQL 复制的基本过程如下:\u003c/strong\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003eSlave 上面的IO线 …\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e"
September 15, 2011
[git] Git 高级:Git Reset, Checkout, Diff, Stash
"\u003ch4 id=\"git-reset\"\u003e\u003cstrong\u003eGit Reset\u003c/strong\u003e\u003c/h4\u003e\n\u003cp\u003e有时候,你可能想要撤销 Git 操作。通常,git reset 就是你需要的命令。但是,使用 git reset 可能会非常复杂,取决于你的撤销操作。如果本文没有提到你需要的,查看 \u003ca href=\"http://www.kernel.org/pub/software/scm/git/docs/git-reset.html\"\u003egit reset 官方文档\u003c/a\u003e。\u003c/p\u003e\n\u003cp\u003e假设,你正在进行一个项目,想要取消所有的改变,返回到最近一次的提交,命令如下:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ git reset --hard HEAD\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e–hard flag 将指定提交(上例中,HEAD)中的任意内容放入工作目录和缓存区内。因为 HEAD 是最近一次提交,所以我们没有做任何改变。运行 git status,会看到提示没有需要提交的。\u003c/p\u003e\n\u003cp\u003e还有其它一些 git reset 使用的 flag。假设你想要回滚你的项目到多个提交之前,但是想要保存没有提交的改变,尝试下面的:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ git reset --soft 3ce072c72d948abfa\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e当然,替换为你自己需要的 hash。–soft flag 将保存你的改变在工作目录和缓存区。换句话来说,最新的提交将会是你选择的提交。\u003c/p\u003e\n\u003cp\u003e还有很多情况,你可以使用 git reset。如果你认为需要这个名利概念的功能,查看\u003ca href=\"http://www.kernel.org/pub/software/scm/git/docs/git-reset.html\"\u003e文档\u003c/a\u003e。 …\u003c/p\u003e"
September 14, 2011
Nginx作为反向代理时传递客户端IP
"\u003cp\u003e因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。同样适用于前端是 Squid 或者其他反向代理的情况。(通用的解决方案是直接取服务器的变量 HTTP_X_FORWARDED_FOR 的值即可取出客户端的真实ip地址)\u003c/p\u003e\n\u003cp\u003e首先前端的 Nginx 要做转发客户端 IP 的配置:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003elocation / {\u003c/p\u003e\n\u003cp\u003eproxy_pass http://localhost:8000;# Forward the user’s IP address to Rails\u003c/p\u003e\n\u003cp\u003eproxy_set_header X-Real-IP $remote_addr;\u003c/p\u003e\n\u003ch1 id=\"needed-for-https\"\u003eneeded for HTTPS\u003c/h1\u003e\n\u003ch1 id=\"proxy_set_header------x_forwarded_proto-https\"\u003e proxy_set_header X_FORWARDED_PROTO https;\u003c/h1\u003e\n\u003cp\u003eproxy_set_header X-Forwarded-For $remote_addr; …\u003c/p\u003e\u003c/blockquote\u003e"
September 13, 2011
(linux)nfs配置教程[原创]
"\u003cp\u003e转载请注明文本来源:\u003c/p\u003e\n\u003cp\u003e网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作。\u003c/p\u003e\n\u003cp\u003e操作环境为:Centos6.0\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、NFS服务端设置(192.168.0.100)\u003c/strong\u003e\n1.安装并启用相应的服务,将防火墙关闭\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#yum -y install nfs* portmap\n#启动端口映射\n#service portmap start\n#启动NFS 服务,此时NFS 会激活守护进程,然后就开始监听 Client 端的请求\n#service nfs start\n#关闭防火墙\n#service iptables stop\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e在这里可以对nfs进行一下验证\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#mount -t nfs 192.168.0.100:/data/nfs /mnt/nfs\n#本地验证\n#touch /mnt/nfs/server.txt\n#ls /mnt/nfs\n#ls /data/nfs\n\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e如果/mnt/nfs和/data/nfs两个目录里的内容一 …\u003c/code\u003e\u003c/pre\u003e"
September 12, 2011
php-fpm日志里出现[WARNING] fpm_children_bury()信息的解决办法
"\u003cp\u003e最近接手nginx+php的WEB环境维护,发现PHP-cgiCPU很好,也造成负载很高,于是在网上找了些资料,并且针对自己的错误,将问题收集再次,并且网上还给了解决方案,所以放在这里留作以后查询\u003c/p\u003e\n\u003cp\u003ean 11 08:54:01.164292 [NOTICE] fpm_children_make(), line 352: child 10088 (pool default) started\u003c/p\u003e\n\u003cp\u003eJan 11 08:54:01.164325 [WARNING] fpm_children_bury(), line 215: child 7985 (pool default) exited on signal 15 SIGTERM after 63.778601 seconds from start\u003c/p\u003e\n\u003cp\u003eJan 11 08:54:01.165485 [NOTICE] fpm_children_make(), line 352: child 10089 (pool default) started\u003c/p\u003e\n\u003cp\u003eJan 11 08:54:01.165514 [WARNING] fpm_children_bury(), …\u003c/p\u003e"
September 9, 2011
kickstart 语法详解
"\u003cp\u003e\u003cstrong\u003ekickstart 语法\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e接下来探讨ks.cfg 的相关参数,这些参数笔者将依上述ks,cfg 出现的先后顺序来讨论,有些参数并不是一定要设置。完整的kickstart 参数意义可参考下列网址。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.redhat.com/docs/manuals/enterprise/RHEL-3-Manual/sysadmin-guide/s1-kickstart2-options.html\"\u003ehttp://www.redhat.com/docs/manuals/enterprise/RHEL-3-Manual/sysadmin-guide/s1-kickstart2-options.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eks.cfg 文件由三个部份皆组成:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ecommand 区段—此部份包含了必要安装选项\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003epackages 区段—列出欲安装套件\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e%pre and %post 区段\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ecommand 区段\n■lang(必要):安装时所使用的语言\n例如:安装过程中选用中文语言,lang zh_TW.Big5\n■langsupport (必要):指定系统使用的语言。假如你安装一至多国语系,你必需使用默认选项去指定默认语言。语法为:\n例如:langsupport –default en_US.UTF-8 zh_TW.Big5 en_US.UTF-8\n■键盘(必要):设置系统键盘的种类。语法 …\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e"
September 9, 2011
redhat下使用dvd作为yum源
"\u003cp\u003e使用rpm包的最大问题就是安装依赖问题,yum就是为了解决这个问题而出现的,但是Redhat AS的更新是要收费的,所以在解决这个收费的问题之前你只能暂时用安装盘作为yum源,实际上,这也是可以做到的:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1、mount安装盘到/mnt/cdrom\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#mkdir /mnt/cdrom\n#mount -t auto /dev/cdrom /mnt/cdrom\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e2、创建/etc/yum.rep.d/rhel.repo,文件内容如下:\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[base]\nname=Red Hat Enterprise Linux $releasever – $basearch\nbaseurl=file:///mnt/cdrom/\nenabled=1\ngpgcheck=0\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release\u003c/p\u003e\u003c/blockquote\u003e"
September 9, 2011
kickstart安装教程[原创]
"\u003cp\u003e转载请注明本文来源: \u003ca href=\"http://blog.haohtml.com/archives/11341\"\u003ehttp://blog.haohtml.com/archives/11341\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e我们知道RH中的Kickstart可以实现RedHat光盘启动后的自动安装,如果把 ks.cfg及RPM安装文件考到一台HTTP或NFS服务器上,就可以实现网络自动安装,但还是需要RedHat的启动盘来启动机器,但加上DHCP、 TFTP和PXElinux及支持PXE的网卡,噢,那就可以实现远程启动了。也就是说,有了上面的条件,你只要给一台支持PXE的客户机上电,然后再打 入一个设置好的命令就可以安装好一RedHat台机器了。\n实现上面安装的过程是这样的:PXE网卡启动——DHCP服务器——获得IP——从TFTP上下载pxelinux.0、vmlinuz、initrd——启动系统——通过PEXlinux去HTTP下载ks.cfg文件—–跟据ks.cfg去HTTP下载RPM包及安装系统——完成安装。\u003c/p\u003e\n\u003cp\u003e下面的教程我们主要的工作目录在/tftpboot/目录里,/tftpboot/目录里是光盘安装包,可以将光盘内容全部复制到这里,也可以直接挂载到pub目录.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e基本介绍:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003elinux下的网络批量 …\u003c/p\u003e"
September 8, 2011
squid命中率(转)
"\u003cp\u003e察看命中率的shell\ncat access.log|gawk ‘{print $4}’|sort|uniq -c|sort -nr\u003c/p\u003e\n\u003cp\u003e重点观察下面三个内容\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTCP_MEM_HIT\u003c/li\u003e\n\u003cli\u003eTCP_IMS_HIT\u003c/li\u003e\n\u003cli\u003eTCP_REFRESH_HIT\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e1198559749.083 0 60.4.218.18 TCP_REFRESH_HIT/200 271 GET – FIRST_UP_PARENT/d text/html\n1198559813.186 1 218.106.61.11 TCP_IMS_HIT/304 233 GET – NONE/- text/html\n1198559829.358 0 218.106.61.11 TCP_IMS_HIT/304 224 GET – NONE/- text/html\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eTCP_IMS_HIT:NONE 客户端发送确认请求,Squid发现更近来的、新鲜的请求资源的拷贝。\nSquid发送更新的内容到客户端,而不联系原始服务器。(这指明Squid对本次请求,不会与任何其他服务器(邻居或原始服务器)通信。)\nTCP_MEM_HIT:NONE …\u003c/p\u003e"
September 7, 2011
RHEL6/CentOS6下root用户密码破解
"\u003cp\u003eRHEL升级到版本6以后,发现root用户密码破解和centos.5的不一样了;在单用户模式下输入passwd命令不再有效。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2011/09/centos-6-pass.png\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2011/09/centos-6-pass.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e这是由于在安装RHEL6(centos6)的过程中或者以前使用过程上,SELinux的默认级别为非0的缘故;\u003c/p\u003e\n\u003cp\u003e因此在进入单用户模式以后需要输入_setenforce 0_命令来将SELinux级别临时变为0以后,才可以使用passwd命令!\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2011/09/centos-reset-root-passwd.png\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2011/09/centos-reset-root-passwd.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e当然如果你在安装过程中,更改了SELinux的级别,那么就不会遇到上述问题了!\u003c/p\u003e\n\u003cp\u003e据称,这是RHEL6的一个bug……\u003c/p\u003e"
September 6, 2011
squid中HTTP/1.1 501 Method Not Implemented的解决办法
"\u003cp\u003e刚安装的squid,但在用squidclient清除缓存的时候,提示错误:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003efreebsd# ./squidclient -m PURGE -p 80 http://www.testsquid.com/index.html\nHTTP/1.1 501 Method Not Implemented\nDate: Tue, 28 Jun 2011 23:03:22 GMT\nServer: Apache/2.2.19 (FreeBSD) mod_ssl/2.2.19 OpenSSL/0.9.8k DAV/2\nAllow: GET,HEAD,POST,OPTIONS,TRACE\nContent-Length: 217\nConnection: close\nContent-Type: text/html; charset=iso-8859-1\n\n\u0026lt;!DOCTYPE HTML PUBLIC \u0026#34;-//IETF//DTD HTML 2.0//EN\u0026#34;\u0026gt;\n\u0026lt;html\u0026gt;\u0026lt;head\u0026gt;\n\u0026lt;title\u0026gt;501 Method Not …\u003c/code\u003e\u003c/pre\u003e"
September 6, 2011
杀死mysql指定的进程
"\u003cp\u003e在执行查询的时候,有时候用show processlist命令查看有过多的进程,造成mysql假死的状态,这个时候可以将一些僵死的进程杀掉.恢复正常状态\n找到语句的 thread id\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003emysqladmin -uroot -proot kill xxxxx\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e如果是系统里的mysql进程的话,可以参考:\u003c/p\u003e"
September 5, 2011
Linux下做软RAID
"\u003cp\u003eGUI:安装CentOS5.0过程中做软RAID:\u003c/p\u003e\n\u003cp\u003eCLI:Linux下做软raid: \u003ca href=\"http://docs.haohtml.com/download/linux/LINUX%c8%edRAID.pdf\"\u003ehttp://docs.haohtml.com/download/linux/LINUX%c8%edRAID.pdf\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e======== \u003cstrong\u003emdadm使用详解\u003c/strong\u003e======================\u003c/p\u003e\n\u003cp\u003e**\u003c/p\u003e\n\u003cp\u003e**\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e★mdadm简介\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我们可以使用man mdadm命令来查看mdadm的帮助信息:\u003c/p\u003e\n\u003cp\u003e[root@localhost mdadm-2.6.2]# man mdadm\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e☆mdadm用法\u003c/strong\u003e\n\u003cstrong\u003e基本语法\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003emdadm [mode] [options]\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e目前支持\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eLINEAR, RAID0(striping), RAID1(mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH和FAULTY\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e模式(7种):\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAssemble:加入一个以前定义的阵列\u003c/li\u003e\n\u003cli\u003eBuild:创建一个没有超级块的阵列\u003c/li\u003e\n\u003cli\u003eCreate:创建一个新的阵列,每个设备具有超级块\u003c/li\u003e\n\u003cli\u003eManage: 管理阵列(如添加和删除)\u003c/li\u003e\n\u003cli\u003eMisc:允许单独对阵列中的某个设备进行操作(如停止阵列)\u003c/li\u003e\n\u003cli\u003eFollow …\u003c/li\u003e\u003c/ul\u003e"