<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I am LAZY bones ?</title>
	<atom:link href="http://luy.li/feed/" rel="self" type="application/rss+xml" />
	<link>http://luy.li</link>
	<description>all linux</description>
	<lastBuildDate>Fri, 21 Oct 2011 03:38:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>找回丢失的磁盘空间</title>
		<link>http://luy.li/2011/09/25/lost_disk_usage/</link>
		<comments>http://luy.li/2011/09/25/lost_disk_usage/#comments</comments>
		<pubDate>Sun, 25 Sep 2011 13:37:54 +0000</pubDate>
		<dc:creator>bones7456</dc:creator>
				<category><![CDATA[经验技巧]]></category>

		<guid isPermaLink="false">http://luy.li/?p=1818</guid>
		<description><![CDATA[经常接触linux，尤其是多人共用的服务器上的linux的朋友，也许会经常遇到这样的问题： 收到一个磁盘告警，说某某分区已经满了，然后登录服务器 df 一看，发现磁盘确实快满了，然后你就想找到具体是哪个目录满了，于是 du -s * 一看，却发现所有子目录的大小总和却和df显示的总已使用磁盘空间对不上，有时候甚至还相差很多，于是就纳闷了：我的磁盘空间去哪了呢？ 这里就列一下我所知的3种情况： 隐藏文件 linux系统把文件名以.(点号)开头的文件视为隐藏文件，而类似bash里*这样的操作符是不会匹配隐藏文件的，所以如果根目录下有个较大的隐藏文件的话，是不会被du -sh * 统计到的，解决办法就是： du -sh .[^.]* 。 非空目录被mount 一般挂载其他分区的时候都是建议mount到一个空目录的，那么如果mount到一个非空的目录，情况会怎么样呢？比如/mnt目录本来里面是有文件的，然后执行了sudo mount /dev/sda6 /mnt。其实这个mount命令完全能正常执行，被mount的分区也能正常访问，只是原先在/mnt里的文件，现在已经访问不到了，包括du也看不到大小了，但是磁盘空间却还是被占着，因为如果你 umount /mnt 以后，原来的文件都还会回来的。 空洞文件 一个文件的大小和所占磁盘空间也不一定完全一致，比如某个程序一直打开着一个叫log的文件在写，而中间有人用 > log 命令清除了log的内容，就会产生这样的文件。这里有这种文件的介绍。 上面3种是我所知的，应该还有其他情况，欢迎留言补充。]]></description>
			<content:encoded><![CDATA[<p>经常接触linux，尤其是多人共用的服务器上的linux的朋友，也许会经常遇到这样的问题：<br />
收到一个磁盘告警，说某某分区已经满了，然后登录服务器 <code>df</code> 一看，发现磁盘确实快满了，然后你就想找到具体是哪个目录满了，于是 <code>du -s *</code> 一看，却发现所有子目录的大小总和却和df显示的总已使用磁盘空间对不上，有时候甚至还相差很多，于是就纳闷了：我的磁盘空间去哪了呢？</p>
<p>这里就列一下我所知的3种情况：</p>
<ol>
<li>隐藏文件</li>
<p>linux系统把文件名以<code>.</code>(点号)开头的文件视为隐藏文件，而类似bash里*这样的操作符是不会匹配隐藏文件的，所以如果根目录下有个较大的隐藏文件的话，是不会被du -sh * 统计到的，解决办法就是： <code>du -sh .[^.]*</code> 。</p>
<li>非空目录被mount</li>
<p>一般挂载其他分区的时候都是建议mount到一个空目录的，那么如果mount到一个非空的目录，情况会怎么样呢？比如/mnt目录本来里面是有文件的，然后执行了<code>sudo mount /dev/sda6 /mnt</code>。其实这个mount命令完全能正常执行，被mount的分区也能正常访问，只是原先在/mnt里的文件，现在已经访问不到了，包括du也看不到大小了，但是磁盘空间却还是被占着，因为如果你 <code>umount /mnt</code> 以后，原来的文件都还会回来的。</p>
<li>空洞文件</li>
<p>一个文件的大小和所占磁盘空间也不一定完全一致，比如某个程序一直打开着一个叫log的文件在写，而中间有人用 <code>> log</code> 命令清除了log的内容，就会产生这样的文件。<a href="http://luy.li/2008/12/02/ls_du/">这里</a>有这种文件的介绍。
</ol>
<p>上面3种是我所知的，应该还有其他情况，欢迎留言补充。</p>
]]></content:encoded>
			<wfw:commentRss>http://luy.li/2011/09/25/lost_disk_usage/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>用RG100A实现ADSL拨号</title>
		<link>http://luy.li/2011/06/10/rg100a_adsl/</link>
		<comments>http://luy.li/2011/06/10/rg100a_adsl/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 14:04:27 +0000</pubDate>
		<dc:creator>bones7456</dc:creator>
				<category><![CDATA[经验技巧]]></category>

		<guid isPermaLink="false">http://luy.li/?p=1805</guid>
		<description><![CDATA[最近又搬家了，需要重新办理宽带。问了下电信和网通的价格，虽然华数网通便宜很多，但是那句“一分钱，一分货”还真是一点都没错，之前用过才知道网通不是一般的垃圾，详见我以前的牢骚，所以还是办理了电信宽带。 这电信的入户方式和网通不一样，是电话线入户的，也就是说局端接过来的是一个RJ11的水晶头，然后电信会给一个modem，一般的上网方式就是在modem后面接一个无线路由，再用路由拨号。 但是这样显然不够方便，因为我的路由器是淘宝上淘的RG100A-AA，上面是有RJ11接口的，如果能用路由器直接拨号，就可以抛开电信给的modem了，这样会环保很多（至少modem的电源就不需要了）。 然而，我的路由器默认刷的是OpenWRT的固件，这固件是完全开源的，功能非常强大，什么电驴、BT、samba、FTP、print server统统支持，但是唯独不支持adsl拨号。。。查其原因，据说是BCM系列芯片的adsl驱动是dlink享有版权的，并且不开源。想要用adsl功能必须给路由器刷上基于dlink的固件。 了解到这个信息以后，就开始搜索靠谱的dlink固件，最后我用的是这里下载（需注册）的，这个版本有web界面（英文）、有ssh。基本就可以玩了。 下载后在原来的OpenWRT的web界面里直接上传文件，再重启就刷好固件了，这步真是超乎想象的简单。 再次登录，就是dlink的界面了，默认的用户名和密码都是admin，进去以后，就可以进行一堆设置了，诸如wifi的ssid、密码之类的，都是大同小异，唯一值得一提的是ADSL拨号的设置： 要先在&#8217;Advanced Setup&#8217;里选择&#8217;Layer2 Interface&#8217;，就是OSI7层模型里的第二层了，下面有个&#8217;ATM Interface&#8217;，需要add一条记录，add的时候，会让你填两个数值，就是 VPI 和 VCI ，这两个值各地的运营商都会不一样，比如我这里是杭州余杭电信，这两个值是8/35，具体的值可以到网上查或者是打10000询问电信（不知道电信会不会告诉你）。关于ATM层的更多介绍详见这里。 &#8216;ATM Interface&#8217; 设置好以后，就可以设置&#8217;WAN Service&#8217;了，这里需要选择刚刚设置好的ATM设备，比如我这是 ATM0/0_8_35 ，然后下一步就是填个账号和密码之类的，保存就会自动拨上ADSL了，整个过程还是蛮有趣的，还可以顺便学习一下底层的网络知识。 另外，据说已经有人把dlink的adsl模块二进制地移植到了OpenWRT了，并且已经可用了，说不定哪天我就回OpenWRT了，哈哈。]]></description>
			<content:encoded><![CDATA[<p>最近又搬家了，需要重新办理宽带。问了下电信和网通的价格，虽然华数网通便宜很多，但是那句“一分钱，一分货”还真是一点都没错，之前用过才知道网通不是一般的垃圾，详见<a href="http://luy.li/2010/09/05/mynet/">我以前的牢骚</a>，所以还是办理了电信宽带。<br />
这电信的入户方式和网通不一样，是电话线入户的，也就是说局端接过来的是一个<a href="http://en.wikipedia.org/wiki/RJ11#RJ11">RJ11</a>的水晶头，然后电信会给一个modem，一般的上网方式就是在modem后面接一个无线路由，再用路由拨号。<br />
但是这样显然不够方便，因为我的路由器是淘宝上淘的RG100A-AA，上面是有RJ11接口的，如果能用路由器直接拨号，就可以抛开电信给的modem了，这样会环保很多（至少modem的电源就不需要了）。<br />
然而，我的路由器默认刷的是OpenWRT的固件，这固件是完全开源的，功能非常强大，什么电驴、BT、samba、FTP、print server统统支持，但是唯独不支持adsl拨号。。。查其原因，据说是BCM系列芯片的adsl驱动是dlink享有版权的，并且不开源。想要用adsl功能必须给路由器刷上基于dlink的固件。<br />
了解到这个信息以后，就开始搜索靠谱的dlink固件，最后我用的是<a href="http://www.chinadsl.net/thread-50681-1-1.html">这里下载</a>（需注册）的，这个版本有web界面（英文）、有ssh。基本就可以玩了。<br />
下载后在原来的OpenWRT的web界面里直接上传文件，再重启就刷好固件了，这步真是超乎想象的简单。<br />
再次登录，就是dlink的界面了，默认的用户名和密码都是<code>admin</code>，进去以后，就可以进行一堆设置了，诸如wifi的ssid、密码之类的，都是大同小异，唯一值得一提的是ADSL拨号的设置：<br />
要先在&#8217;Advanced Setup&#8217;里选择&#8217;Layer2 Interface&#8217;，就是OSI7层模型里的第二层了，下面有个&#8217;ATM Interface&#8217;，需要add一条记录，add的时候，会让你填两个数值，就是 VPI 和 VCI ，这两个值各地的运营商都会不一样，比如我这里是杭州余杭电信，这两个值是8/35，具体的值可以到网上查或者是打10000询问电信（不知道电信会不会告诉你）。关于ATM层的更多介绍详见<a href="http://en.wikipedia.org/wiki/Asynchronous_Transfer_Mode">这里</a>。<br />
&#8216;ATM Interface&#8217; 设置好以后，就可以设置&#8217;WAN Service&#8217;了，这里需要选择刚刚设置好的ATM设备，比如我这是 <code>ATM0/0_8_35</code> ，然后下一步就是填个账号和密码之类的，保存就会自动拨上ADSL了，整个过程还是蛮有趣的，还可以顺便学习一下底层的网络知识。</p>
<p>另外，据说已经有人把dlink的adsl模块二进制地移植到了OpenWRT了，并且已经可用了，说不定哪天我就回OpenWRT了，哈哈。</p>
]]></content:encoded>
			<wfw:commentRss>http://luy.li/2011/06/10/rg100a_adsl/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>一个dump DVD到mp4的脚本</title>
		<link>http://luy.li/2011/05/15/dump_dvd/</link>
		<comments>http://luy.li/2011/05/15/dump_dvd/#comments</comments>
		<pubDate>Sun, 15 May 2011 13:34:37 +0000</pubDate>
		<dc:creator>bones7456</dc:creator>
				<category><![CDATA[CLI软件]]></category>

		<guid isPermaLink="false">http://luy.li/?p=1795</guid>
		<description><![CDATA[注意：此脚本只是一个对我来说刚刚够用的脚本，并不是一个通用的方案，如果你的源DVD里有多语言、多字幕之类的，很可能需要修改参数才能正常运行，另外输出文件的码率、画面长宽、声音采样率等，也需要按实际情况修改。 给儿子买了12张巧虎的DVD，但是这年头，已经很少见DVD播放器了，电视机都是直接插U盘的，所以打算把DVD里的内容dump到U盘里（mp4格式），再进行播放。我的盘是按故事分段的，所以我也按段分成不同的mp4文件，一个盘的内容放在一个目录里。 用到的几个命令： lsdvd命令可以取得DVD的标题、语言、字幕、分段等信息。 mencoder是个强大得一塌糊涂的视频/音频编码工具。 eject命令可以弹出光盘，放在脚本最后最合适了。 上脚本： #!/bin/sh &#160; DIR=&#34;/media/sda1/qiaohu&#34; DVD=`lsdvd` title=&#34;`echo &#34;$DVD&#34; &#124; grep &#34;^Disc Title:&#34; &#124; cut -d &#34;:&#34; -f2-`&#34; title=${title:1} chapters=&#34;`echo &#34;$DVD&#34; &#124; grep &#34;^Title&#34; &#124; awk -F&#34;[ ,]+&#34; '{print $6}'`&#34; echo &#34;$title &#124; $chapters&#34; T=&#34;$DIR/$title&#34; if &#91; -d &#34;$T&#34; &#93; ; then i=1 while &#91; -d &#34;$T$i&#34; &#93; ; do &#40;&#40;i++&#41;&#41; [...]]]></description>
			<content:encoded><![CDATA[<p>注意：此脚本只是一个对我来说刚刚够用的脚本，并<strong>不是</strong>一个通用的方案，如果你的源DVD里有多语言、多字幕之类的，很可能需要修改参数才能正常运行，另外输出文件的码率、画面长宽、声音采样率等，也需要按实际情况修改。</p>
<p>给儿子买了12张巧虎的DVD，但是这年头，已经很少见DVD播放器了，电视机都是直接插U盘的，所以打算把DVD里的内容dump到U盘里（mp4格式），再进行播放。我的盘是按故事分段的，所以我也按段分成不同的mp4文件，一个盘的内容放在一个目录里。</p>
<p>用到的几个命令：</p>
<ul>
<li><code>lsdvd</code>命令可以取得DVD的标题、语言、字幕、分段等信息。</li>
<li><code>mencoder</code>是个强大得一塌糊涂的视频/音频编码工具。</li>
<li><code>eject</code>命令可以弹出光盘，放在脚本最后最合适了。</li>
</ul>
<p>上脚本：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #007800;">DIR</span>=<span style="color: #ff0000;">&quot;/media/sda1/qiaohu&quot;</span>
<span style="color: #007800;">DVD</span>=<span style="color: #000000; font-weight: bold;">`</span>lsdvd<span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #007800;">title</span>=<span style="color: #ff0000;">&quot;<span style="color: #780078;">`echo &quot;$DVD&quot; | grep &quot;^Disc Title:&quot; | cut -d &quot;:&quot; -f2-`</span>&quot;</span>
<span style="color: #007800;">title</span>=<span style="color: #800000;">${title:1}</span>
<span style="color: #007800;">chapters</span>=<span style="color: #ff0000;">&quot;<span style="color: #780078;">`echo &quot;$DVD&quot; | grep &quot;^Title&quot; | awk -F&quot;[ ,]+&quot; '{print $6}'`</span>&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$title</span> | <span style="color: #007800;">$chapters</span>&quot;</span>
<span style="color: #007800;">T</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$DIR</span>/<span style="color: #007800;">$title</span>&quot;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$T</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #007800;">i</span>=<span style="color: #000000;">1</span>
	<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$T</span><span style="color: #007800;">$i</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">do</span>
		<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>i++<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">done</span>
	<span style="color: #007800;">T</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$T</span><span style="color: #007800;">$i</span>&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$T</span>&quot;</span>
<span style="color: #007800;">i</span>=<span style="color: #000000;">1</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$i</span> <span style="color: #660033;">-le</span> <span style="color: #007800;">$chapters</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$T</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$i</span>.mp4
	mencoder <span style="color: #660033;">-of</span> lavf <span style="color: #660033;">-lavfopts</span> <span style="color: #007800;">format</span>=mp4 <span style="color: #660033;">-oac</span> lavc <span style="color: #660033;">-ovc</span> lavc <span style="color: #660033;">-lavcopts</span> <span style="color: #007800;">aglobal</span>=<span style="color: #000000;">1</span>:<span style="color: #007800;">vglobal</span>=<span style="color: #000000;">1</span>:<span style="color: #007800;">vcodec</span>=mpeg4:<span style="color: #007800;">vbitrate</span>=<span style="color: #000000;">800</span>:<span style="color: #007800;">acodec</span>=libfaac:<span style="color: #007800;">abitrate</span>=<span style="color: #000000;">96</span> <span style="color: #660033;">-af</span> <span style="color: #007800;">lavcresample</span>=<span style="color: #000000;">48000</span> <span style="color: #660033;">-vf</span> <span style="color: #007800;">dsize</span>=<span style="color: #000000;">720</span>:<span style="color: #000000;">540</span>:<span style="color: #000000;">0</span>,<span style="color: #007800;">scale</span>=<span style="color: #000000;">0</span>:<span style="color: #000000;">0</span>,<span style="color: #007800;">expand</span>=<span style="color: #000000;">720</span>:<span style="color: #000000;">540</span>,harddup <span style="color: #660033;">-ofps</span> <span style="color: #000000;">29.970</span> <span style="color: #660033;">-srate</span> <span style="color: #000000;">48000</span> <span style="color: #660033;">-o</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$T</span>/<span style="color: #007800;">$i</span>.mp4&quot;</span> dvd:<span style="color: #000000; font-weight: bold;">//</span><span style="color: #000000;">1</span> <span style="color: #660033;">-chapter</span> <span style="color: #007800;">$i</span>-<span style="color: #007800;">$i</span>
	<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>i++<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
eject</pre></div></div>

<p>突然又觉得这事儿挺折腾的，呵呵，而且不知道这样做（自己dump、自己看）算不算侵犯版权呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://luy.li/2011/05/15/dump_dvd/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>mysql主备部署笔记</title>
		<link>http://luy.li/2011/05/11/mysql_replication/</link>
		<comments>http://luy.li/2011/05/11/mysql_replication/#comments</comments>
		<pubDate>Wed, 11 May 2011 11:48:20 +0000</pubDate>
		<dc:creator>bones7456</dc:creator>
				<category><![CDATA[备忘]]></category>

		<guid isPermaLink="false">http://luy.li/?p=1787</guid>
		<description><![CDATA[本文说的mysql主备是指单向、异步的数据复制。可以是一个主、多个备。 这样做的好处显而易见：有利于健壮性、速度和系统管理。备用数据库可以做为只读查询和备份的机器，减轻主用数据库的负担。 实施前提： 主用数据库的配置里至少有： &#91;mysqld&#93; log-bin=mysql-bin server-id=1 建议主备的数据库版本一致。 我所知道的最简单的实施方式（不需要停主库，甚至不需要长时间地禁止主库写入）： 主库操作： 在主库里建一个复制用的用户： grant replication slave on *.* TO 'replication'@'备库地址' identified by 'replication'; 导出主库的数据，并记下当然日志文件和偏移： mysqldump --master-data=2 --single-transaction -uroot -p --all-databases &#62;dumpfile 这里是把数据以SQL的形式导出，并记下导出瞬间的日志文件和偏移(得益于--master-data=2参数)，出来的dumpfile的前面会有一行类似以下的注释信息，就是文件名和偏移值了： -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=1061553673; 对于这步，网络上一般采用的方法为： FLUSH TABLES WITH READ LOCK；--先把主库设置成只读，然后导出SQL或者直接复制数据文件 SHOW MASTER STATUS; --记下日志文件和偏移 UNLOCK TABLES; --恢复主库写入 这样，至少在复制数据的那段时间，主库是不可提供服务的。 备库操作： 复制主库的/etc/my.cnf和dumpfile。 把主库配置里的 server-id 改成2（或者3、4，多个备库保存互不相同），再加上 [...]]]></description>
			<content:encoded><![CDATA[<p>本文说的mysql主备是指单向、异步的数据复制。可以是一个主、多个备。<br />
这样做的好处显而易见：有利于健壮性、速度和系统管理。备用数据库可以做为只读查询和备份的机器，减轻主用数据库的负担。</p>
<p>实施前提：<br />
主用数据库的配置里至少有：</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>mysqld<span style="">&#93;</span></span>
<span style="color: #000099;">log-bin</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">mysql-bin</span>
<span style="color: #000099;">server-id</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">1</span></pre></div></div>

<p>建议主备的数据库版本一致。</p>
<p>我所知道的最简单的实施方式（不需要停主库，甚至不需要长时间地禁止主库写入）：</p>
<p><strong>主库操作：</strong><br />
在主库里建一个复制用的用户：</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">grant</span> replication slave <span style="color: #990099; font-weight: bold;">on</span> <span style="color: #CC0099;">*</span>.<span style="color: #CC0099;">*</span> <span style="color: #990099; font-weight: bold;">TO</span> <span style="color: #008000;">'replication'</span>@<span style="color: #008000;">'备库地址'</span> identified by <span style="color: #008000;">'replication'</span><span style="color: #000033;">;</span></pre></div></div>

<p>导出主库的数据，并记下当然日志文件和偏移：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">mysqldump <span style="color: #660033;">--master-data</span>=<span style="color: #000000;">2</span> <span style="color: #660033;">--single-transaction</span> <span style="color: #660033;">-uroot</span> <span style="color: #660033;">-p</span> <span style="color: #660033;">--all-databases</span> <span style="color: #000000; font-weight: bold;">&gt;</span>dumpfile</pre></div></div>

<p>这里是把数据以SQL的形式导出，并记下导出瞬间的日志文件和偏移(得益于<code>--master-data=2</code>参数)，出来的dumpfile的前面会有一行类似以下的注释信息，就是文件名和偏移值了：</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=1061553673;</span></pre></div></div>

<blockquote><p>对于这步，网络上一般采用的方法为：</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;">FLUSH <span style="color: #990099; font-weight: bold;">TABLES</span> <span style="color: #990099; font-weight: bold;">WITH</span> <span style="color: #990099; font-weight: bold;">READ</span> <span style="color: #990099; font-weight: bold;">LOCK</span>；<span style="color: #CC0099;">--</span>先把主库设置成只读，然后导出SQL或者直接复制数据文件
<span style="color: #990099; font-weight: bold;">SHOW</span> MASTER <span style="color: #990099; font-weight: bold;">STATUS</span><span style="color: #000033;">;</span> <span style="color: #CC0099;">--</span>记下日志文件和偏移
UNLOCK <span style="color: #990099; font-weight: bold;">TABLES</span><span style="color: #000033;">;</span>  <span style="color: #CC0099;">--</span>恢复主库写入</pre></div></div>

<p>这样，至少在复制数据的那段时间，主库是不可提供服务的。</p></blockquote>
<p><strong>备库操作：</strong><br />
复制主库的<code>/etc/my.cnf</code>和<code>dumpfile</code>。<br />
把主库配置里的 server-id  改成2（或者3、4，多个备库保存互不相同），再加上</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000099;">relay-log</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> slave-relay.log </span>
<span style="color: #000099;">relay-log-index</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> slave-relay-log.index</span></pre></div></div>

<p>导入数据：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> mysql <span style="color: #000000; font-weight: bold;">&lt;</span>dumpfile</pre></div></div>

<p>进入mysql命令行执行：</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;">SLAVE STOP<span style="color: #000033;">;</span>
CHANGE MASTER <span style="color: #990099; font-weight: bold;">TO</span>
MASTER_HOST<span style="color: #CC0099;">=</span><span style="color: #008000;">'主库地址'</span><span style="color: #000033;">,</span>
MASTER_PORT<span style="color: #CC0099;">=</span><span style="color: #008080;">3306</span><span style="color: #000033;">,</span>
MASTER_USER<span style="color: #CC0099;">=</span><span style="color: #008000;">'replication'</span><span style="color: #000033;">,</span>
MASTER_PASSWORD<span style="color: #CC0099;">=</span><span style="color: #008000;">'密码'</span><span style="color: #000033;">,</span>
MASTER_LOG_FILE<span style="color: #CC0099;">=</span><span style="color: #008000;">'mysql-bin.000011'</span><span style="color: #000033;">,</span>
MASTER_LOG_POS<span style="color: #CC0099;">=</span><span style="color: #008080;">1061553673</span><span style="color: #000033;">;</span>
SLAVE <span style="color: #990099; font-weight: bold;">START</span><span style="color: #000033;">;</span></pre></div></div>

<p>然后，就搞定了，可以在备库执行</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;"><span style="color: #990099; font-weight: bold;">SHOW</span> PROCESSLIST<span style="color: #000033;">;</span></pre></div></div>

<p>查看同步的状态，如果此命令的输出里有两个“system user”的进程，并且Command都是“Connect”的话，就差不多OK了，此时，任何对主库的修改，都能准实时地从备库里查询出来。</p>
<p>参考文章：<a href="http://dev.mysql.com/doc/refman/5.1/zh/replication.html">mysql官方中文手册</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luy.li/2011/05/11/mysql_replication/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>IPv6路由错误引起的怪异问题</title>
		<link>http://luy.li/2011/02/10/ipv6_route_error/</link>
		<comments>http://luy.li/2011/02/10/ipv6_route_error/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 09:50:08 +0000</pubDate>
		<dc:creator>bones7456</dc:creator>
				<category><![CDATA[故障分析]]></category>

		<guid isPermaLink="false">http://luy.li/?p=1781</guid>
		<description><![CDATA[我那Ubuntu源服务器（u.srt.cn），最近出现了一些很诡异的错误。 比如：之前设置的crontab同步linux.deepin.org的iso镜像，已经有一段时间没有成功过了，手工执行rsync，却发现连的似乎是自己，因为banner都出来“Thanks for using SRT ubuntu mirror.”了，但是ping linux.deepin.org 却又能得到正确的结果。 再比如之前我设置了用公钥可以ssh登录另外一台机器，但是现在却提示我输入密码。 排查了许久之后，发现了一个问题，很多（但不是全部）公网的域名虽然ping的时候对应了正确的ip，但是正在使用（比如上面的rsync或ssh）的时候，好像都指到本地了。 再后来，无意之中，发现用ping6 去ping那些有问题的域名，返回的都是 localhost（::1），于是终于知道怎么回事了：系统用IPv6去访问那些域名了，而那些域名的IPv6解析不正确。 为了验证这点，只需要把系统的IPv6彻底禁用再试试就成了，但是服务器也是ubuntu，而ubuntu最新的版本都已经把IPv6编译进内核了，不能通过rmmod来禁用IPv6了，要完全禁用需要修改grub的配置，给内核传参数才行（方法见这里）。 这显然太麻烦了，其实暂时禁用一下还是有方便的办法的，就是这样： echo 1 &#124; sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6 执行完以后，可以执行 ip a &#124; grep inet6 来确认已经禁用成功了，如果这命令没有输出就OK了。 然后现在再用ping6的话，会提示connect: Network is unreachable。 再去试试之前的rsync和ssh，果然都正常了。 现在我担心的是：IPv4地址不都已经枯竭了吗？接下来改怎么办呢？]]></description>
			<content:encoded><![CDATA[<p>我那Ubuntu源服务器（u.srt.cn），最近出现了一些很诡异的错误。<br />
比如：之前设置的crontab同步linux.deepin.org的iso镜像，已经有一段时间没有成功过了，手工执行rsync，却发现连的似乎是自己，因为banner都出来“Thanks for using SRT ubuntu mirror.”了，但是ping linux.deepin.org 却又能得到正确的结果。<br />
再比如之前我设置了用公钥可以ssh登录另外一台机器，但是现在却提示我输入密码。<br />
排查了许久之后，发现了一个问题，很多（但不是全部）公网的域名虽然ping的时候对应了正确的ip，但是正在使用（比如上面的rsync或ssh）的时候，好像都指到本地了。<br />
再后来，无意之中，发现用ping6 去ping那些有问题的域名，返回的都是 localhost（::1），于是终于知道怎么回事了：系统用IPv6去访问那些域名了，而那些域名的IPv6解析不正确。<br />
为了验证这点，只需要把系统的IPv6彻底禁用再试试就成了，但是服务器也是ubuntu，而ubuntu最新的版本都已经把IPv6编译进内核了，不能通过rmmod来禁用IPv6了，要完全禁用需要修改grub的配置，给内核传参数才行（方法见<a href="http://wiki.ubuntu.org.cn/%E5%A6%82%E4%BD%95%E7%A6%81%E7%94%A8IPv6">这里</a>）。<br />
这显然太麻烦了，其实暂时禁用一下还是有方便的办法的，就是这样：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">tee</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>ipv6<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span>all<span style="color: #000000; font-weight: bold;">/</span>disable_ipv6</pre></div></div>

<p>执行完以后，可以执行</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ip a <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> inet6</pre></div></div>

<p>来确认已经禁用成功了，如果这命令没有输出就OK了。<br />
然后现在再用ping6的话，会提示<code>connect: Network is unreachable</code>。<br />
再去试试之前的rsync和ssh，果然都正常了。</p>
<p>现在我担心的是：IPv4地址不都已经枯竭了吗？接下来改怎么办呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://luy.li/2011/02/10/ipv6_route_error/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

