﻿<?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>语源科技BlogJava-howard-he</title><link>http://www.blogjava.net/howard-he/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 17 Apr 2026 21:12:29 GMT</lastBuildDate><pubDate>Fri, 17 Apr 2026 21:12:29 GMT</pubDate><ttl>60</ttl><item><title>JVM内存管理-----堆内存</title><link>http://www.blogjava.net/howard-he/archive/2011/05/21/jvm-heap.html</link><dc:creator>贺斌</dc:creator><author>贺斌</author><pubDate>Sat, 21 May 2011 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/howard-he/archive/2011/05/21/jvm-heap.html</guid><wfw:comment>http://www.blogjava.net/howard-he/comments/350725.html</wfw:comment><comments>http://www.blogjava.net/howard-he/archive/2011/05/21/jvm-heap.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/howard-he/comments/commentRss/350725.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/howard-he/services/trackbacks/350725.html</trackback:ping><description><![CDATA[<div>Heap堆内存理解<br /><br />一个JVM实例只有一个堆内存，堆内存的大小是可以调节的。类加载器读取类文件后，需要把类文件、方法、常量放入到堆内存中，以便执行器执行，堆内存分为三部分：<br /><br />1. Permanent Space 永久存储区
<p>永久存储区是一个常驻内存区域，用于存放<span>JDK自身所携带的Class,Interface的元数据，也就是说它存储的是运行环境必须的类信息，被装载进此区域的数据是不会被垃圾回收器回收掉的，关闭JVM才会释放此区域所占用的内存。</span><br />2.Young Generation Space 新生区<br /><span>新生区是类的诞生、成长、消亡的区域，一个类在这里产生，应用，最后被垃圾回收器收集，结束生命。<br />新生区又分为两部分：伊甸区（<span lang="EN-US">Eden space</span>）和幸存者区（<span lang="EN-US">Survivor pace</span>）。<br />所有的类都是在伊甸区被<span lang="EN-US">new</span>出来的。幸存区有两个：<span lang="EN-US"> 0</span>区（<span lang="EN-US">Survivor 0 space</span>）和<span lang="EN-US">1</span>区（<span lang="EN-US">Survivor 1 space</span>）。当伊甸园的空间用完时，程序又需要创建对象，<span lang="EN-US">JVM</span>的垃圾回收器将对伊甸园区进行垃圾回收，将伊甸园区中的不再被其他对象所引用的对象进行销毁。然后将伊甸园中的剩余对象移动到幸存<span lang="EN-US">0</span>区。若幸存<span lang="EN-US">0</span>区也满了，再对该区进行垃圾回收，然后移动到<span lang="EN-US">1</span>区。那如果<span lang="EN-US">1</span>区也满了呢？再移动到养老区。</span><br />3. Tenure Generation Space 养老区<br /><span>养老区用于保存从新生区筛选出来的<span lang="EN-US">JAVA</span>对象，一般池对象都在这个区域活跃。<span lang="EN-US"><span> </span></span>三个区的示意图如下：</span><br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/howard-he/e1476bc8-85c2-36ba-9e47-77d34361f097.jpg" width="450" height="346" /><br /><br /></p></div><img src ="http://www.blogjava.net/howard-he/aggbug/350725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/howard-he/" target="_blank">贺斌</a> 2011-05-21 09:42 <a href="http://www.blogjava.net/howard-he/archive/2011/05/21/jvm-heap.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JVM内存管理------栈内存</title><link>http://www.blogjava.net/howard-he/archive/2011/05/20/jvm-stack.html</link><dc:creator>贺斌</dc:creator><author>贺斌</author><pubDate>Fri, 20 May 2011 14:14:00 GMT</pubDate><guid>http://www.blogjava.net/howard-he/archive/2011/05/20/jvm-stack.html</guid><wfw:comment>http://www.blogjava.net/howard-he/comments/350712.html</wfw:comment><comments>http://www.blogjava.net/howard-he/archive/2011/05/20/jvm-stack.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/howard-he/comments/commentRss/350712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/howard-he/services/trackbacks/350712.html</trackback:ping><description><![CDATA[<div>本篇学习栈内存基本知识,附上JAVA代码
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.howard.jvm;<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_24_490_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_490_Open_Text.style.display='none'; Codehighlighter1_24_490_Closed_Image.style.display='inline'; Codehighlighter1_24_490_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_24_490_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_24_490_Closed_Text.style.display='none'; Codehighlighter1_24_490_Open_Image.style.display='inline'; Codehighlighter1_24_490_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_24_490_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_24_490_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;JAVA的内存管理&nbsp;（一）&nbsp;栈内存<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;Stack栈&nbsp;栈内存&nbsp;&nbsp;JAVA程序的运行区。&nbsp;是在线程创建时创建,它的生命周期是跟随线程的生命周期，线程结束栈内存也就释放，对于栈来说不存在垃圾回收问题<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;只要线程一结束，该栈就Over。<br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;栈中的数据都是以栈帧（Stack&nbsp;Frame）的格式存在，栈帧是一个内存区块，是一个数据集，是一个有关方法（Method)和运行期数据的数据集，当一个方法<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;A被调用时就产生了一个栈帧F1，并压入到栈中，A方法又调用B方法，于是产生栈帧F2也被压入栈，执行完毕后，先弹出F2栈帧，然后再弹出F1栈帧，遵循&#8220;<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;后进先出&#8221;的原则。<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;栈帧中主要保存3类数据：<br /></span><span style="color: #008080">10</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;1.&nbsp;本地变量（local&nbsp;Variables），包括输入参数和输出参数以及方法内变量；<br /></span><span style="color: #008080">11</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;2.&nbsp;栈操作（Operand&nbsp;Stack），记录入栈和出栈操作；<br /></span><span style="color: #008080">12</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;3.&nbsp;栈帧数据（Frame&nbsp;Data），包括类文件、方法等等。<br /></span><span style="color: #008080">13</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*<br /></span><span style="color: #008080">14</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Administrator<br /></span><span style="color: #008080">15</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*<br /></span><span style="color: #008080">16</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /></span><span style="color: #008080">17</span><span style="color: #000000"><img id="Codehighlighter1_517_985_Open_Image" onclick="this.style.display='none'; Codehighlighter1_517_985_Open_Text.style.display='none'; Codehighlighter1_517_985_Closed_Image.style.display='inline'; Codehighlighter1_517_985_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_517_985_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_517_985_Closed_Text.style.display='none'; Codehighlighter1_517_985_Open_Image.style.display='inline'; Codehighlighter1_517_985_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;StackMemory&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_517_985_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_517_985_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">19</span><span style="color: #000000"><img id="Codehighlighter1_543_693_Open_Image" onclick="this.style.display='none'; Codehighlighter1_543_693_Open_Text.style.display='none'; Codehighlighter1_543_693_Closed_Image.style.display='inline'; Codehighlighter1_543_693_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_543_693_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_543_693_Closed_Text.style.display='none'; Codehighlighter1_543_693_Open_Image.style.display='inline'; Codehighlighter1_543_693_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;methodA()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_543_693_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_543_693_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">产生一个栈帧F1</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">22</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">变量i&nbsp;放入到栈帧F1中</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">23</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">准备产生一个栈帧F2</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">24</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;methodB(</span><span style="color: #000000">"</span><span style="color: #000000">hello&nbsp;world</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">25</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">26</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">27</span><span style="color: #000000"><img id="Codehighlighter1_731_830_Open_Image" onclick="this.style.display='none'; Codehighlighter1_731_830_Open_Text.style.display='none'; Codehighlighter1_731_830_Closed_Image.style.display='inline'; Codehighlighter1_731_830_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_731_830_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_731_830_Closed_Text.style.display='none'; Codehighlighter1_731_830_Open_Image.style.display='inline'; Codehighlighter1_731_830_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;methodB(String&nbsp;arg)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_731_830_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_731_830_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">28</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">产生一个栈帧F2</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">29</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">参数arg&nbsp;和&nbsp;方法返回值&nbsp;放入到栈帧F2中</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">30</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;arg;<br /></span><span style="color: #008080">31</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">32</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">33</span><span style="color: #000000"><img id="Codehighlighter1_873_982_Open_Image" onclick="this.style.display='none'; Codehighlighter1_873_982_Open_Text.style.display='none'; Codehighlighter1_873_982_Closed_Image.style.display='inline'; Codehighlighter1_873_982_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_873_982_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_873_982_Closed_Text.style.display='none'; Codehighlighter1_873_982_Open_Image.style.display='inline'; Codehighlighter1_873_982_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_873_982_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_873_982_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080">34</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StackMemory&nbsp;sm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StackMemory();<br /></span><span style="color: #008080">35</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">准备产生一个栈帧F1,因为将要调用methodA方法</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">36</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sm.methodA();<br /></span><span style="color: #008080">37</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">38</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /></span><span style="color: #008080">39</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /></span><span style="color: #008080">40</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><br /><br /></div><img src ="http://www.blogjava.net/howard-he/aggbug/350712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/howard-he/" target="_blank">贺斌</a> 2011-05-20 22:14 <a href="http://www.blogjava.net/howard-he/archive/2011/05/20/jvm-stack.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql 集群 jdbc配置</title><link>http://www.blogjava.net/howard-he/archive/2011/05/17/mysql--jdbc.html</link><dc:creator>贺斌</dc:creator><author>贺斌</author><pubDate>Tue, 17 May 2011 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/howard-he/archive/2011/05/17/mysql--jdbc.html</guid><wfw:comment>http://www.blogjava.net/howard-he/comments/350390.html</wfw:comment><comments>http://www.blogjava.net/howard-he/archive/2011/05/17/mysql--jdbc.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/howard-he/comments/commentRss/350390.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/howard-he/services/trackbacks/350390.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: mysql jdbc&nbsp;&nbsp;<a href='http://www.blogjava.net/howard-he/archive/2011/05/17/mysql--jdbc.html'>阅读全文</a><img src ="http://www.blogjava.net/howard-he/aggbug/350390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/howard-he/" target="_blank">贺斌</a> 2011-05-17 13:19 <a href="http://www.blogjava.net/howard-he/archive/2011/05/17/mysql--jdbc.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql 主从复制 读写分离配置</title><link>http://www.blogjava.net/howard-he/archive/2011/05/17/mysql.html</link><dc:creator>贺斌</dc:creator><author>贺斌</author><pubDate>Tue, 17 May 2011 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/howard-he/archive/2011/05/17/mysql.html</guid><wfw:comment>http://www.blogjava.net/howard-he/comments/350380.html</wfw:comment><comments>http://www.blogjava.net/howard-he/archive/2011/05/17/mysql.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/howard-he/comments/commentRss/350380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/howard-he/services/trackbacks/350380.html</trackback:ping><description><![CDATA[<div>口水：第一次写博客，欢迎大家来拍砖。<br />最近项目中用mysql主从复制主要是为了实现读写分离、数据库备份、故障转移的需要，采用的是一主一从，配置比较简单。<br />自已在本机做测试<br />测试环境如下：<br />OS：win7<br />mysql: 安装两个版本的mysql ，一个是5.5.x(高版本做主） 一个是5.1.x.(从）<br /><br />
<p>配置文件 win下my.ini&nbsp; linux下：my.conf<br /><br />1. 配置主库</p>
<p>#配置主从数据库<br />server-id=1<br />#主从复制是通过二进制文件来进行，所以要开启日志功能<br />log-bin=mysql-bin<br />#主机，读写都可以<br />read-only=0<br />#需要备份数据，多个写多行<br />binlog-do-db=core<br />#不需要备份的数据库，多个写多行<br />binlog-ignore-db=test<br />binlog-ignore-db=mysql</p>
<p>2. 配置从库</p>
<p>#主从配置<br />server-id=2<br />log-bin=mysql-bin<br />#主机地址<br />master-host=127.0.0.1<br />master-user=slave1<br />master-password=slave1<br />master-port=3309<br />#如果从服务器发现主服务器断掉，重新连接的时间差(秒)<br />master-connect-retry=60<br />#只复制某个库<br />replicate-do-db=core <br />#不复制某个库<br />replicate-ignore-db=mysql</p>
<p>3. 设置权限<br />给主数据库授予一个可以进行复制的用户<br />GRANT replication slave ON *.* TO <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#115;&#108;&#97;&#118;&#101;&#49;&#39;&#64;&#39;&#37;&#39;">'slave1'@'%'</a> IDENTIFIED BY 'slave1';</p>
<p>4. 启动从库复制<br />mysql&gt;slave start;<br />myslq&gt;slave stop;</p>
<p>5. 查看复制状态<br />主库：mysql&gt;show master status\G(注意，不用加分号<img border="0" alt="" src="http://www.blogjava.net/Emoticons/QQ/shifty.gif" width="20" height="20" />)<br />从库：mysql&gt;show slave status\G</p>
<p>从库设置主库信息<br />change master to <br />&gt; master_host='master_ip',<br />&gt; master_user='user', <br />&gt; master_password='pwd', <br />&gt; master_port=3307, <br />&gt; master_log_file='mysql-bin.000020', <br />&gt; master_log_pos=135617781;</p>
<p>6. 解决未同步的可能出现的问题</p>
<p>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1</p>
<p>出现过的问题：<br />a. character 的问题 是mysql client的问题，需要把客户端的character设置和server 一样<br /><br />7. 如果出现复制错误，从服务器的错误日志（HOSTNAME.err）中也会出现错误消息。<br /><br /></p>以上配置测试通过，有问题欢迎一起来讨论<br /></div><img src ="http://www.blogjava.net/howard-he/aggbug/350380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/howard-he/" target="_blank">贺斌</a> 2011-05-17 11:02 <a href="http://www.blogjava.net/howard-he/archive/2011/05/17/mysql.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>