﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-星星点灯</title><link>http://www.cppblog.com/hongsion/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:41:12 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:41:12 GMT</pubDate><ttl>60</ttl><item><title>这个是FireFox 3.0 rc2 的bug吗？ </title><link>http://www.cppblog.com/hongsion/archive/2008/06/08/52562.html</link><dc:creator>hongsion</dc:creator><author>hongsion</author><pubDate>Sun, 08 Jun 2008 10:19:00 GMT</pubDate><guid>http://www.cppblog.com/hongsion/archive/2008/06/08/52562.html</guid><wfw:comment>http://www.cppblog.com/hongsion/comments/52562.html</wfw:comment><comments>http://www.cppblog.com/hongsion/archive/2008/06/08/52562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/hongsion/comments/commentRss/52562.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hongsion/services/trackbacks/52562.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firefox 3.0 的声势浩大，final版本还没出，但是各种测试早已多如牛毛。我也一直支持firefox，今天更新到3.0 rc2，但是使用后发现了一个问题，不能确定是不是3.0 rc2的bug。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我如果用fireforx 3.0 rc2同时打开新浪的这两个网页，<a href="http://www.sina.com.cn/">http://www.sina.com.cn</a>和<a href="http://sports.sina.com.cn/nba">http://sports.sina.com.cn/nba</a>，则会发现整个机器的cpu会被firefox耗光，如果只打开其中的一个，那至少也是50%的cpu被firefox消耗掉。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新浪的网页我发现flash特别多，难道是因为firefox中flash的插件有问题。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;于此同时我又打开了IE7.0试了试，发现IE7.0却不会这样，两个网页打开之后稳定下来，大概只消耗40%的cpu。<br>
<img src ="http://www.cppblog.com/hongsion/aggbug/52562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hongsion/" target="_blank">hongsion</a> 2008-06-08 18:19 <a href="http://www.cppblog.com/hongsion/archive/2008/06/08/52562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql 双向备份</title><link>http://www.cppblog.com/hongsion/archive/2008/06/03/52047.html</link><dc:creator>hongsion</dc:creator><author>hongsion</author><pubDate>Tue, 03 Jun 2008 09:08:00 GMT</pubDate><guid>http://www.cppblog.com/hongsion/archive/2008/06/03/52047.html</guid><wfw:comment>http://www.cppblog.com/hongsion/comments/52047.html</wfw:comment><comments>http://www.cppblog.com/hongsion/archive/2008/06/03/52047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/hongsion/comments/commentRss/52047.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hongsion/services/trackbacks/52047.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql的双向备份可以实现一个简单的数据库cluster，从而提高数据的可靠性和访问性能。&nbsp; 以下是用mysql5.0.51b实现双向备份的一些记录。<br>&nbsp;&nbsp;&nbsp;&nbsp;
<p><span>（</span><span>1</span><span>）从网上下载了一个非安装的版本</span><span>mysql-5.0.51b</span><span>，然后在</span><span>192.168.1.10</span><span>机器上解压在</span><span>E:\mysql</span><span>目录下。</span></p>
<p>&nbsp;</p>
<p><span>（</span><span>2</span><span>）在</span><span>E:\mysql</span><span>下创建一个</span><span>my.ini</span><span>文件，内容是从该目录下面的其他</span><span>ini</span><span>复制而来，然后修改里面的内容，主要是设置路径。因为</span><span>mysql</span><span>安装在</span><span>E:/mysql</span><span>下，所以修改如下：</span></p>
<p><span>[mysqld]</span></p>
<p><span>basedir="E:/mysql/"</span></p>
<p><span>datadir="E:/mysql/Data/"</span></p>
<p>&nbsp;</p>
<p><span>（</span><span>3</span><span>）修改端口</span></p>
<p><span>为了让</span><span>mysql</span><span>以服务的形式在</span><span>windows</span><span>中运行，同时不和其他已安装的</span><span>mysql</span><span>发生冲突，所以要修改</span><span>msyql</span><span>服务运行的端口，主要修改如下：</span></p>
<p><span>[mysqld]</span></p>
<p><span>port=5306</span></p>
<p>&nbsp;</p>
<p><span>（</span><span>4</span><span>）安装服务</span></p>
<p><span>windows</span><span>键</span><span>+R</span><span>，输入&#8220;</span><span>cmd</span><span>&#8221;，回车，进入</span><span>window</span><span>中控制台窗口，然后切换到</span><span>E:\mysql\bin</span><span>目录下，运行</span><span>mysqld-nt --install replDb</span><span>，这样服务安装完成。</span></p>
<p>&nbsp;</p>
<p><span>（</span><span>5</span><span>）设置</span><span>master</span></p>
<p><span>设置</span><span>master</span><span>的目的主要让</span><span>msyql</span><span>数据库程序运行起来的时候在本地产生</span><span>bin-log</span><span>，以备</span><span>slave</span><span>可以从该</span><span>log</span><span>中读取</span><span>sql</span><span>操作，从而保持和</span><span>master</span><span>的数据同步。主要设置如下：</span></p>
<p><span>[mysqld]</span></p>
<p><span>log-bin=mysql-bin</span></p>
<p><span>server-id=1</span></p>
<p><span>log-bin</span><span>设置的是本地产生的</span><span>bin-log</span><span>文件的名字，</span><span>mysql</span><span>还会自动产生扩展名。</span><span>server-id</span><span>用来标识本数据库服务器。只所以需要配置</span><span>server-id</span><span>是为了区分</span><span>bin-log</span><span>中那些数据的来源。这样就可以防止在一个</span><span>loop</span><span>的备份环境中，数据被循环复制。比如：</span><span>A</span><span><span>&#224;</span></span><span>B, B</span><span><span>&#224;</span></span><span>C, C</span><span><span>&#224;</span></span><span>A</span><span>。假如没有这个</span><span>server-id</span><span>，</span><span>A</span><span>在从</span><span>C</span><span>复制数据的时候，就不知道这些数据是</span><span>C</span><span>产生的，还是</span><span>B</span><span>产生的，还是</span><span>A</span><span>自己产生的。如果是</span><span>B</span><span>和</span><span>C</span><span>产生的，</span><span>A</span><span>当然需要复制，如果是</span><span>A</span><span>自己产生的，当然就不需要再复制了，不然就无限循环下去了。</span></p>
<p><span>&nbsp;</span><span>保存</span><span>my.ini</span><span>文件，这个时候运行</span><span> net start replDb</span><span>。就会发现</span><span>mysql</span><span>数据库程序运行之后，会在</span><span>E:/mysql/Data/</span><span>目录下产生</span><span>mysql-bin.xxxxxx</span><span>的日志文件，以备</span><span>slave</span><span>访问。</span></p>
<p>&nbsp;</p>
<p><span>（</span><span>6</span><span>）创建</span><span>slave</span><span>帐户和权限</span></p>
<p><span>&nbsp;net start replDb </span><span>就会启动</span><span>replDb</span><span>。</span></p>
<p><span>在</span><span>slave</span><span>复制</span><span>bin-log</span><span>内容的时候，需要相应的帐号和访问权限，因此如下命令：</span></p>
<p><span>Mysql &#8211;uroot &#8211;port=5306</span></p>
<p><span>由于初始没有密码，因此该命令直接可以访问数据库，如果为了安全起见，应该设置</span><span>root</span><span>密码，如下：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Grant all on *.* to &#8216;root&#8217;@&#8217;localhost&#8217; identified by &#8216;root&#8217;</span><span>；</span></p>
<p><span>这样</span><span>root</span><span>用户只能在本机以</span><span>&#8217;root&#8217;</span><span>密码访问。然后创建</span><span>slave</span><span>可以访问的帐户，运行如下语句：</span></p>
<p><span>Grant replication slave on *.* to &#8216;repl&#8217;@&#8217;192.168.1.11&#8217; identified by &#8216;slavepass&#8217;;</span></p>
<p><span>这样</span><span>192.168.1.11</span><span>这台机器上的</span><span>mysql slave</span><span>就可以以</span><span>repl</span><span>用户名和</span><span>&#8217;slavepass&#8217;</span><span>密码来复制本机（</span><span>192.168.1.10</span><span>）的</span><span>bin-log</span><span>中的内容了。</span></p>
<p>&nbsp;</p>
<p><span>（</span><span>7</span><span>）安装</span><span>slave</span></p>
<p><span>在</span><span>192.168.1.11</span><span>机器上重复上面的（</span><span>1</span><span>），（</span><span>2</span><span>），（</span><span>3</span><span>），（</span><span>4</span><span>），（</span><span>5</span><span>），（</span><span>6</span><span>）步骤。</span></p>
<p><span>但是在第（</span><span>5</span><span>）步中</span><span>server-id</span><span>应该设置成和</span><span>192.168.1.10</span><span>机器不同的值，如下：</span></p>
<p><span>[mysqld]</span></p>
<p><span>log-bin=mysql-bin</span></p>
<p><span>server-id=2</span></p>
<p><span>同时在第（</span><span>6</span><span>）步创建</span><span>slave</span><span>帐户的时候，</span><span>ip</span><span>有所改变，如下：</span></p>
<p><span>Grant replication slave on *.* to &#8216;repl&#8217;@&#8217;192.168.1.10&#8217; identified by &#8216;slavepass&#8217;;</span></p>
<p>&nbsp;</p>
<p><span>（</span><span>8</span><span>）设置</span><span>slave</span><span>选项</span></p>
<p><span>在</span><span>192.168.1.10</span><span>的</span><span>my.ini</span><span>文件中，加入如下内容：</span></p>
<p><span>[mysqld]</span></p>
<p><span>master-host=192.168.1.11</span></p>
<p><span>master-port=5306</span></p>
<p><span>master-user=repl</span></p>
<p><span>master-password=slavepass</span></p>
<p>&nbsp;</p>
<p><span>这个设置是告诉</span><span>192.168.1.10</span><span>上的</span><span>mysql</span><span>服务器把</span><span>192.168.1.11:5306</span><span>作为</span><span>master</span><span>，以用户名</span><span>repl</span><span>和密码</span><span>slavepass</span><span>去访问。同样的在</span><span>192.168.1.11</span><span>上如下设置：</span></p>
<p><span>[mysqld]</span></p>
<p><span>master-host=192.168.1.10</span></p>
<p><span>master-port=5306</span></p>
<p><span>master-user=repl</span></p>
<p><span>master-password=slavepass</span></p>
<p>&nbsp;</p>
<p><span>然后在</span><span>192.168.1.10</span><span>和</span><span>192.168.1.11</span><span>机器上都运行如下命令</span></p>
<p><span>Net stop replDb</span></p>
<p><span>Net start replDb</span></p>
<p><span>如果不出问题，两台机器上的</span><span>mysql</span><span>数据应该就已经处于相互备份的状态下了。</span></p>
<p><span>那么如何检验是否连接成功呢，主要通过以下命令：</span></p>
<p><span>在</span><span>192.168.1.10</span><span>机器上运行</span><span> mysql &#8211;u root &#8211;p &#8211;port=5306</span><span>，输入密码</span><span>&#8217;root&#8217;</span><span>之后，进入</span><span>mysql</span><span>操作界面。</span></p>
<p><span>然后输入</span><span>show slave status\G </span><span>语句</span></p>
<p><span>会输出如下：</span></p>
&nbsp;&nbsp;&nbsp;<span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">&nbsp;
<pre class=programlisting>mysql&gt; SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master1
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 931
Relay_Log_File: slave1-relay-bin.000056
Relay_Log_Pos: 950
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 931
Relay_Log_Space: 1365
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.01 sec)</pre>
<v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></span>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意其中的</span><span lang=EN-US> Slave_IO_Running </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: IT">和</span><span lang=EN-US> Slave_SQL_Running</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这两个指标如果是</span><span lang=EN-US>yes</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示</span><span lang=EN-US>slave</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经在工作了，然后再看</span><span lang=EN-US>Last_Error</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如果是空的表示一切正常，还有最后一个</span><span lang=EN-US>Seconds_Behind_Master</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这个指标表示</span><span lang=EN-US>slave</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">读的速度落后原始数据多少，正常当然是越小越好，太大就表示</span><span lang=EN-US>slave</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来不及复制</span><span lang=EN-US>master</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数据了。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">到此，设置运行完毕，在测试的过程中，我发现还可以这样安装，比如在上面第（</span><span lang=EN-US>6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）步结束之后，可以不用把</span><span lang=EN-US>slave</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的配置写到文件中，而是可以在不重新启动</span><span lang=EN-US>mysql</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库的情况下直接通过运行语句来完成：</span></p>
mysql&gt; <strong class=userinput><code>CHANGE MASTER TO</code></strong><br>&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp;&nbsp;&nbsp; <strong class=userinput><code>MASTER_HOST='192.168.1.10',</code></strong><br>&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp;&nbsp;&nbsp; <strong class=userinput><code>MASTER_USER='repl<em class=replaceable><code>'</code></em>,</code></strong><br>&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp;&nbsp;&nbsp; <strong class=userinput><code>MASTER_PASSWORD='<em class=replaceable><code>slavepass'</code></em>,<br>&nbsp;&nbsp;-&gt;&nbsp;&nbsp;MASTER_PORT=5306;<br></code></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><br>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">即先</span><span lang=EN-US><font face="Times New Roman">change master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，然后运行</span><span lang=EN-US><font face="Times New Roman">start slave</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后再运行</span><span lang=EN-US><font face="Times New Roman">show slave status\G</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，应该也是</span><span lang=EN-US><font face="Times New Roman">OK</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有一点需要说明的是，这里安装的时候是直接用两个完全新的数据库，如果在已经有数据在数据库中，并且该数据库是</span><span lang=EN-US><font face="Times New Roman">master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这个时候想不关闭</span><span lang=EN-US><font face="Times New Roman">master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的情况下，加入一个</span><span lang=EN-US><font face="Times New Roman">slave</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进来的话，就需要参考</span><span lang=EN-US><font face="Times New Roman">mysql</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US><font face="Times New Roman">replication</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一章中的内容，其基本过程是这样：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman">（1）<span style="FONT: 7pt 'Times New Roman'"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">先锁定</span><span lang=EN-US><font face="Times New Roman">master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的数据库，并把数据写到硬盘。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 15pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN style="mso-ansi-language: EN"><font face="Times New Roman">mysql&gt; FLUSH TABLES WITH READ LOCK;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman">（2）<span style="FONT: 7pt 'Times New Roman'"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后再数据锁定的情况下，用</span><span lang=EN-US><font face="Times New Roman">show master status</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查看</span><span lang=EN-US><font face="Times New Roman">bin-log</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的位置，并记下参数，并备份</span><span lang=EN-US><font face="Times New Roman">master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的内容。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman">（3）<span style="FONT: 7pt 'Times New Roman'"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解锁</span><span lang=EN-US><font face="Times New Roman">master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman">（4）<span style="FONT: 7pt 'Times New Roman'"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把备份好的数据倒到</span><span lang=EN-US><font face="Times New Roman">slave</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman">（5）<span style="FONT: 7pt 'Times New Roman'"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang=EN-US><font face="Times New Roman">slave</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库中运行用</span><span lang=EN-US><font face="Times New Roman">change master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句，该语句需要加上</span><span lang=EN-US><font face="Times New Roman">master_log_file</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang=EN-US><font face="Times New Roman">master_log_pos</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数。这两个参数就是在（</span><span lang=EN-US><font face="Times New Roman">2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）中记下的</span><span lang=EN-US><font face="Times New Roman">bin-log</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">参数。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><span lang=EN-US style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman">（6）<span style="FONT: 7pt 'Times New Roman'"><font size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang=EN-US><font face="Times New Roman">slave </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中运行</span><span lang=EN-US><font face="Times New Roman"> start slave</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。然后就</span><span lang=EN-US><font face="Times New Roman">ok</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p><font face="Times New Roman">&nbsp;</font></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过上面的阐述可以发现，有两种方式配置备份，一个是通过</span><span lang=EN-US><font face="Times New Roman">my.ini</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，还有一个是通过</span><span lang=EN-US><font face="Times New Roman">change master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句。其实当数据库运行的时候，如果发现</span><span lang=EN-US><font face="Times New Roman">my.ini</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有</span><span lang=EN-US><font face="Times New Roman">master_host</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等参数，数据库就把这些信息写到</span><span lang=EN-US><font face="Times New Roman">data</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下的</span><span lang=EN-US><font face="Times New Roman">master.info</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中，然后</span><span lang=EN-US><font face="Times New Roman">slave</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">启动的时候就直接从这个</span><span lang=EN-US><font face="Times New Roman">master.info</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中读取</span><span lang=EN-US><font face="Times New Roman">master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的信息。而在</span><span lang=EN-US><font face="Times New Roman">slave</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库中运行</span><span lang=EN-US><font face="Times New Roman">change master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句的时候，数据库程序是把那些参数直接写入</span><span lang=EN-US><font face="Times New Roman">master.info</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang=EN-US><font face="Times New Roman">mysql</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库中，处理逻辑是这样的，当</span><span lang=EN-US><font face="Times New Roman">mysql</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库程序启动的时候，如果它发现有</span><span lang=EN-US><font face="Times New Roman">master.info</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据文件存在，那么它不会去读</span><span lang=EN-US><font face="Times New Roman">my.ini</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的相关配置，而是直接用</span><span lang=EN-US><font face="Times New Roman">master.info</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的内容。如果没有</span><span lang=EN-US><font face="Times New Roman">master.info</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">存在，它才去读</span><span lang=EN-US><font face="Times New Roman">my.ini</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的相关配置，并且产生一个</span><span lang=EN-US><font face="Times New Roman">master.info</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。所以如果想通过</span><span lang=EN-US><font face="Times New Roman">my.ini</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来更改已有的</span><span lang=EN-US><font face="Times New Roman">master</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">信息，必须先关掉</span><span lang=EN-US><font face="Times New Roman">mysql</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据库，然后删除</span><span lang=EN-US><font face="Times New Roman">master.info</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，然后重新启动。</span></p>
</span><br>
<pre class=programlisting><code><strong><br><br><br></strong></code>&nbsp;</pre>
<img src ="http://www.cppblog.com/hongsion/aggbug/52047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hongsion/" target="_blank">hongsion</a> 2008-06-03 17:08 <a href="http://www.cppblog.com/hongsion/archive/2008/06/03/52047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件工程师年纪大了怎么办？</title><link>http://www.cppblog.com/hongsion/archive/2008/05/27/51316.html</link><dc:creator>hongsion</dc:creator><author>hongsion</author><pubDate>Tue, 27 May 2008 11:00:00 GMT</pubDate><guid>http://www.cppblog.com/hongsion/archive/2008/05/27/51316.html</guid><wfw:comment>http://www.cppblog.com/hongsion/comments/51316.html</wfw:comment><comments>http://www.cppblog.com/hongsion/archive/2008/05/27/51316.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/hongsion/comments/commentRss/51316.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hongsion/services/trackbacks/51316.html</trackback:ping><description><![CDATA[最近看了很多关于软件工程师过了35岁该怎么办的文章，这些文章都是冲着一个很严峻的问题来的，那就是软件工程师过了35岁是不是就没有价值了，是不是就应该考虑换行了？。毕竟岁月无情，谁能不老啊，看了这些文章后，我有些疑问，苦思不得其解。<br><br>1） 很多人认为，软件开发人员大了，学习能力不如年轻人，而IT知识层出不穷，因此必将被年轻人所淘汰。<br>&nbsp;&nbsp;&nbsp;&nbsp; 这个观点我很反对，因为根据我的体会，我做软件开发的时间越长，我的学习能力越强，刚工作时学习新的语言好几个月还不得要领，现在学习新的语言，两三个星期基本就能掌握个大概，剩下的只要做做项目很快就能熟练，最难得的是有了经验和基础之后，能触类旁通。其实软件技术再变化其基础都是不会变的，无非就是操作系统，算法，数据结构等等，无论什么语言出现，始终离不开这些，变化的无非就是一些格式而已，基本的开发思想始终不会变，模式，耦合，面向对象这些都不会变。因此有了经验之后，学习起来更快。体会最深的就是学了3年c++之后，再学java，一看到垃圾自动收集，脑子里马上就想到c++的智能指针和引用，然后很快就能推想出来垃圾收集器的大概原理。回想当初还没学c++的时候，也看过thinging in java，学了2个月一点感觉都没有。<br><br>2）很多人认为软件开发人员过了35岁就应该转行，要么做架构，要么做管理。<br>&nbsp;&nbsp;&nbsp;&nbsp; 这一点我也很疑惑，因为架构和管理毕竟数目比较少，就以1：5的概率来算，也只有20%的人能做，那剩下的80%的人干什么去，总不可能都去做管理和架构吧，那难道他们就要失业？如果真是那样的话，将会出现严重的社会问题。毕竟每年都有大批的软件专业的学生从学校里毕业，那就是说同样的数字的80%也会在10年后出现，而且即将失业，那还不是一个严峻的社会问题，毕竟这个年龄大都成家，大都上有老下有小，还可能在还贷款，唉搞不懂。<br><br>3）很多公司不招过了35岁的软件工程师。<br>&nbsp;&nbsp;&nbsp;&nbsp; 这一点我也觉得很奇怪，很多人认为软件工程师老了，成家了，不能加班了，因此不能再要了。而我的体会是，软件工程师老了，效率高了，代码质量高了，项目的维护成本少了，创新能力更强了，因为知识，理论，经验开始沉淀而出现更多灵感，反而能在更短的时间创造出更多的价值。所以我的直觉是，随着社会的发展，软件工程师应该是越老越抢手才对。<br><br>&nbsp;&nbsp;&nbsp;但残酷的现实也许就是让人搞不懂，不过我还是不相信会一直这样。
<img src ="http://www.cppblog.com/hongsion/aggbug/51316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hongsion/" target="_blank">hongsion</a> 2008-05-27 19:00 <a href="http://www.cppblog.com/hongsion/archive/2008/05/27/51316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于windows、线程、消息的一点体会</title><link>http://www.cppblog.com/hongsion/archive/2008/01/02/40260.html</link><dc:creator>hongsion</dc:creator><author>hongsion</author><pubDate>Wed, 02 Jan 2008 11:35:00 GMT</pubDate><guid>http://www.cppblog.com/hongsion/archive/2008/01/02/40260.html</guid><wfw:comment>http://www.cppblog.com/hongsion/comments/40260.html</wfw:comment><comments>http://www.cppblog.com/hongsion/archive/2008/01/02/40260.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/hongsion/comments/commentRss/40260.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hongsion/services/trackbacks/40260.html</trackback:ping><description><![CDATA[<p>以下内容完全把window 操作系统当作一个黑盒，因此所有内容只能作为对其内部的一个猜测。<br><br>1. windows操作系统内部在创建一个线程的时候，会自动为它创建一个消息队列。<br><br>2.每当一个线程创建一个窗口的时候，操作系统内部都会把该窗口的Handle和线程相关联。很有可能在操作系统内部会维护一个窗口handle到线程的map. 还有一种可能就是窗口的成员变量里面有一个指针，指向创建它的线程。<br><br>3.窗口本身并没有消息队列，所有发到窗口的消息，都会自动被发到创建该窗口的线程的消息队列中。<br><br>4.每个线程只能处理自己线程队列里面的消息，不能处理其他线程消息队列里面的消息。<br>所以PeekMessage(LPMSG lpMsg, HWND hWnd, UINT,UINT,UINT)函数中，如果hWnd不是本线程创建的窗口，则该函数调用失败。<br><br>5.由于在线程消息队列里面的消息会包含有窗口句柄，所以PeekMessage可以专门处理某个特殊窗口的消息。</p>
<br>6. 曾经有疑问线程是不是只有创建了窗口才具有消息队列，但又觉得应该不是这样,因为在windows的API里面有个函数叫PostThreadMessage，可以直接把消息投递到线程的消息队列里面，而不需要任何窗口句柄。后来在MSDN里面有这么一段描述，觉得解释的很详细：<br>&#8220;The system maintains a single system message queue and one thread-specific message queue for each graphical user interface (GUI) thread. To avoid the overhead of creating a message queue for non&#8211;GUI threads, all threads are created initially without a message queue. The system creates a thread-specific message queue only when the thread makes its first call to one of the User or Windows Graphics Device Interface (GDI) functions".<br>&nbsp;这里唯一的疑问我想应该是&#8221;makes its first call to one of the User or Windows Graphics Device Interface (GDI) functions", 这句话的意思是不是等同于创建一个窗口呢？ 
<img src ="http://www.cppblog.com/hongsion/aggbug/40260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hongsion/" target="_blank">hongsion</a> 2008-01-02 19:35 <a href="http://www.cppblog.com/hongsion/archive/2008/01/02/40260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>