<?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>Fwolf's Blog &#187; innodb - Fwolf's Blog</title>
	<atom:link href="http://www.fwolf.com/blog/post/tag/innodb/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fwolf.com/blog</link>
	<description>随心·随意·随缘·努力～</description>
	<lastBuildDate>Sun, 29 Aug 2010 14:52:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>mysql的复制</title>
		<link>http://www.fwolf.com/blog/post/435</link>
		<comments>http://www.fwolf.com/blog/post/435#comments</comments>
		<pubDate>Sun, 15 Mar 2009 17:32:44 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[innodb]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[replication]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/?p=435</guid>
		<description><![CDATA[这篇算是我的学习笔记，主要内容都来自mysql官方文档，然后参考一些网上的文章自己实践了个例子，所以内容上前后也有些重复。 mysql支持从一个主服务器到多个从服务器的复制，并且复制是异步的，也就是说从服务器不用一直保持与主服务器的连接，这使得一些远程、临时性的节点也能进行同步。同时，还可以指定参与同步的数据库或者数据表。 同步目前主要用于以下几个方面： 架构扩容，一主写多从读的方式已经用得非常普遍了 数据安全，同步也是一种备份，而且还可以是实时的，多好啊 数据分析，大量的分析运算在从服务器上运行，不影响主系统的负载 远程数据发布，或者说远程备份 同步的基本设置 主服务器的my.cnf设置 同步是通过binlog来实现的，虽然主服务器不能决定哪些操作在binlog中记录（默认记录全部），但从服务器可以根据配置来有选择的执行。每个主、从服务器都要有一个唯一ID，从服务器还要记录主服务器的主机名、log文件名以及位置等信息（在master.info中），并保存一份收到的binlog，这样多台从服务器就可以有不同的同步状态或进度，并且下次连线的时候再以“续传”的方式继续同步进程。binlog的开启需要修改主服务器的my.cnf # 必须写在[mysqld]节里面 [mysqld] # mysql-bin是log文件的前缀，也可以使用其它的名字，比如服务器名 # 如果不带路径，会把log文件写到`/var/lib/mysql`下 log-bin=mysql-bin # serverid在一个同步体系中必须是唯一的，大于等于1且小于2^32-1的整数 server-id=1 如果使用InnoDb，为了保证稳定，还应设置如下两行： innodb_flush_log_at_trx_commit=1 sync_binlog=1 并且确保没有设置skip-networking，禁用网络自然无法同步。但是，innodb_flush_log_at_trx_commit=1在某些服务器上会导致写数据速度急剧下降，可尝试调整为2。 用户 每个从服务器都要使用标准的mysql用户来连接主服务器，对应的权限名称为REPLICATION SLAVE(这是一个和库无关的权限，属于服务器管理权限的一种)。虽然使用独立用户并不是必需的，但由于用户名和密码都将以明文方式存储在记录replication相关信息的master.info文件中，还是采用独立用户更安全一些。语法如下： mysql&#62; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.domain.tld' IDENTIFIED BY 'passwd'; 从服务器的my.cnf设置 server-id是必须设置的，binlog不用开。 获取主服务器的同步信息 从服务器必须知道要从主服务器binlog的哪个位置开始进行同步，相当于有一份数据、一份要执行的指令（binlog）以及一个当前执行哪一条指令，要获得这三个信息，必须临时暂停主服务器上的处理： mysql&#62; FLUSH TABLES WITH READ LOCK; （这个连InnoDB的commit都能停住），暂停状态下数据、指令就都不会变了，查询出当前记录的binlog的位置： mysql &#62; SHOW MASTER STATUS; [...]]]></description>
			<content:encoded><![CDATA[<p>这篇算是我的学习笔记，主要内容都来自<a href="http://dev.mysql.com/doc/refman/5.1/en/replication.html">mysql官方文档</a>，然后参考一些网上的文章自己实践了个例子，所以内容上前后也有些重复。</p>

<p>mysql支持从一个主服务器到多个从服务器的复制，并且复制是异步的，也就是说从服务器不用一直保持与主服务器的连接，这使得一些远程、临时性的节点也能进行同步。同时，还可以指定参与同步的数据库或者数据表。</p>

<p>同步目前主要用于以下几个方面：</p>

<ul>
<li>架构扩容，一主写多从读的方式已经用得非常普遍了</li>
<li>数据安全，同步也是一种备份，而且还可以是实时的，多好啊</li>
<li>数据分析，大量的分析运算在从服务器上运行，不影响主系统的负载</li>
<li>远程数据发布，或者说远程备份</li>
</ul>

<h2>同步的基本设置</h2>

<h3>主服务器的my.cnf设置</h3>

<p>同步是通过binlog来实现的，虽然主服务器不能决定哪些操作在binlog中记录（默认记录全部），但从服务器可以根据配置来有选择的执行。每个主、从服务器都要有一个唯一ID，从服务器还要记录主服务器的主机名、log文件名以及位置等信息（在master.info中），并保存一份收到的binlog，这样多台从服务器就可以有不同的同步状态或进度，并且下次连线的时候再以“续传”的方式继续同步进程。binlog的开启需要修改主服务器的<code>my.cnf</code></p>

<pre><code># 必须写在[mysqld]节里面
[mysqld]
# mysql-bin是log文件的前缀，也可以使用其它的名字，比如服务器名
# 如果不带路径，会把log文件写到`/var/lib/mysql`下
log-bin=mysql-bin
# serverid在一个同步体系中必须是唯一的，大于等于1且小于2^32-1的整数
server-id=1
</code></pre>

<p>如果使用InnoDb，为了保证稳定，还应设置如下两行：</p>

<pre><code>innodb_flush_log_at_trx_commit=1
sync_binlog=1
</code></pre>

<p>并且确保没有设置<code>skip-networking</code>，禁用网络自然无法同步。但是，<code>innodb_flush_log_at_trx_commit=1</code>在某些服务器上会导致写数据速度急剧下降，可尝试调整为2。</p>

<h3>用户</h3>

<p>每个从服务器都要使用标准的mysql用户来连接主服务器，对应的权限名称为<code>REPLICATION SLAVE</code>(这是一个和库无关的权限，属于服务器管理权限的一种)。虽然使用独立用户并不是必需的，但由于用户名和密码都将以明文方式存储在记录replication相关信息的<code>master.info</code>文件中，还是采用独立用户更安全一些。语法如下：</p>

<pre><code>mysql&gt; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.domain.tld' IDENTIFIED BY 'passwd';
</code></pre>

<h3>从服务器的my.cnf设置</h3>

<p><code>server-id</code>是必须设置的，binlog不用开。</p>

<h3>获取主服务器的同步信息</h3>

<p>从服务器必须知道要从主服务器binlog的哪个位置开始进行同步，相当于有一份数据、一份要执行的指令（binlog）以及一个当前执行哪一条指令，要获得这三个信息，必须临时暂停主服务器上的处理：</p>

<pre><code>mysql&gt; FLUSH TABLES WITH READ LOCK;
</code></pre>

<p>（这个连InnoDB的commit都能停住），暂停状态下数据、指令就都不会变了，查询出当前记录的binlog的位置：</p>

<pre><code>mysql &gt; SHOW MASTER STATUS;
</code></pre>

<p>得到的File列是当前的binlog记录文件名，Position就是日志记录，如果还没东西可记，File为空字符串而Position为4。后面设置从服务器的时候，<code>CHANGE MASTER TO</code>命令就要用到这些信息，比如：</p>

<pre><code>mysql&gt; CHANGE MASTER TO
    -&gt;     MASTER_HOST='master_hostname',
    -&gt;     MASTER_USER='repl_username',
    -&gt;     MASTER_PASSWORD='repl_password',
    -&gt;     MASTER_LOG_FILE='binlog_filename',
    -&gt;     MASTER_LOG_POS=binlog_position;
</code></pre>

<h3>复制主服务器的数据到从服务器</h3>

<p>保持主服务器的暂停处理状态，先把数据都弄到从服务器上去。导出可以用mysqldump：</p>

<pre><code>mysqldump -h db_host --add-drop-table --default-character-set=utf8 --user=root -pPASSWD --extended-insert=false db_name &gt; db_name.sql
</code></pre>

<p>带上<code>--all-databases</code>参数可以导出所有库，不过不想参与同步的库是没必要导的。如果带上<code>--master-data</code>参数，还能够把从服务器设置的一些sql一并导出来。</p>

<p>当然，直接拷贝数据库文件也是可以的，速度也更快，但如果在mysql服务启动的状态下拷贝，可能会存在缓存、日志不同步的情况，所以要停掉服务以后再拷贝，并且不要拷贝和目标库无关的日志等文件。</p>

<p>为了进一步保证数据的一致性，可以在导出数据前给所有数据加锁：</p>

<pre><code>mysql&gt; FLUSH TABLES WITH READ LOCK;
</code></pre>

<p>导出完成后再解开：</p>

<pre><code>mysql&gt; UNLOCK TABLES;
</code></pre>

<h2>同步的进阶说明</h2>

<h3>binlog的几种形式</h3>

<p>一种是记录所操作的“命令”（mysql 5.1.4前版本只能用这个），简称为命令复制SBR；另外一种是记录所有受影响的行，简称为行复制RBR。从mysql 5.1.8开始支持包含上述两种方式的混合型日志。命令复制的优点是：</p>

<ul>
<li>产生的日志小</li>
<li>不要求每个表都要有主键</li>
</ul>

<p>缺点是：</p>

<ul>
<li>某些函数的返回值是无法复制的（比如LOAD_FILE(), UUID(), UUID_SHORT(), USER(), FOUND_ROWS(), SYSDATE()，但RAND(), NOW()能正常复制）</li>
<li>写数据时用到的锁较多</li>
<li>主从服务器的表必须一样</li>
</ul>

<p>行复制的优点为：</p>

<ul>
<li>最安全，所有的操作都能记录和同步</li>
<li>写数据的时候使用到的锁较少</li>
</ul>

<p>缺点为：</p>

<ul>
<li>写大量数据时（比如全表UPDATE）日志里要写很多东西，日志锁定时间也相对更长，可能会带来一些并发问题</li>
<li>所有的表必须要有显式主键（一般情况下都会有主键的，除非超大数据量或特殊设计）</li>
<li>带有大文本的数据复制可能要慢一些，这个好理解，一个update操作，如果是行复制的话，肯定是更新了n行，复制传递的数据量就是n倍大小</li>
<li>查看更新传递和执行的进度不方便</li>
<li>无法用<code>WHERE @server_id &lt;&gt;  server-id</code>这个小技巧来临时指定只更新某台服务器</li>
</ul>

<p>在具体处理的时候，依然会有一些操作比如GRANT REVOKE之类是用命令方式同步的。总体来讲，经常要进行大量数据变更的情况下，命令复制似乎更合适一些。</p>

<h3>常用配置参数说明</h3>

<p>控制主服务器的：</p>

<ul>
<li>auto_increment_increment, auto_increment_offset 自增主键的跳号间隔和初始值，有什么用呢？有人作双向复制的时候，设置A服务器主键自增从1开始每次跳10，B服务器则从2开始每次跳10，这样双向复制的过程中就不会产生自增主键重号的问题了。这两个是全局而非针对某表的设置。不过我更倾向于用UUID实现。</li>
<li>slave_exec_mode 从服务器容错方式，5.1.24后版本才有。</li>
</ul>

<p>控制从服务器的：</p>

<ul>
<li>master.info中配置的优先级比my.cnf中的高。</li>
<li>log-slave-updates 从服务器的变更也记入日志，作链式复制时必须。</li>
<li>replicate-do-db=db_name 只复制指定数据库，可以写多行来指定复制多个库。注意在命令复制模式下mysql只认用<code>use db_name</code>选定的，不会从跨表操作的sql中自动判断；而行复制则是依照实际变更的数据属于哪个表来判断。</li>
<li>replicate-rewrite-db=&#8221;from_name->to_name&#8221; 主、从数据库名称不一样的时候，用此命令进行转换。</li>
</ul>

<p>控制日志的：</p>

<ul>
<li>binlog_format 日志类型，ROW或STATEMENT，新版中还可选MIXED。</li>
<li>log-bin[=base_name] 开启二进制日志（复制必须），可以指定日志文件名。</li>
<li>sync_binlog 什么时候写日志到磁盘，这个机制比较复杂，一般设为1相对较安全。</li>
</ul>

<h3>同步的管理</h3>

<p>有一些命令：</p>

<ul>
<li>SHOW SLAVE STATUS 在从服务器上查看状态。</li>
<li>SHOW SLAVE HOSTS 在主服务器上，启用了report-host以后，显式已连接的从服务器。</li>
<li>STOP/START SLAVE [IO_THREAD/SQL_THREAD] 在从服务器上，停止复制（的日志下载/SQL执行操作）。</li>
</ul>

<h2>同步实现实例</h2>

<p>复制还是在局域网内方便，尤其是双向复制，因为跨公网的话不光要连进去，还要从里面连出来。
综合考虑，M-M-Slaves的模式的一般适用性可能更强一些。下面以Master-Master简要举例：</p>

<p>首先分别修改M1/2的my.cnf：</p>

<pre><code>[mysqld]
# Replication
server-id=1/2
log-bin=/var/log/mysql/svr1/2
log-error=/var/log/mysql.err
relay-log=/var/log/mysql/svr1/2-relay
binlog_format='STATEMENT'
sync_binlog=1
log-slave-updates
innodb_flush_log_at_trx_commit=2
binlog-do-db=db_to_replicate

master-host=ip_of_M1/2
master-port=port_of_M1/2
master-user=rep
master-password=passwd
master-connect-retry = 60
replicate-do-db=db_to_replicate
</code></pre>

<p>然后在M1/2上创建同步用户：</p>

<pre><code>mysql&gt; grant replication slave on *.* to 'rep'@'%' identified by 'passwd';
</code></pre>

<p>重启M1/2的mysql服务,并停止slave：</p>

<pre><code>mysql&gt; stop slave;
</code></pre>

<p>下面，把数据从M1上复制到M2上，先在M1上：</p>

<pre><code>mysql&gt; use db_to_replicate;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql&gt; flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

mysql&gt; show master status;
+-------------+----------+--------------+------------------+
| File        | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------+----------+--------------+------------------+
| svr5.000002 |       98 | db_to_replicate   |                  | 
+-------------+----------+--------------+------------------+
1 row in set (0.00 sec)
</code></pre>

<p>目的是锁上M1上所有表（为只读状态），并记下当前binlog的记录位置。然后不要退出mysql，另外开一个session，导出数据：</p>

<pre><code>$ mysqldump -h 127.0.0.1 --add-drop-table --default-character-set=utf8 --user=root -p --extended-insert=false --skip-lock-tables db_to_replicate &gt; db_to_replicate.sql
</code></pre>

<p>mysqldump时用参数指定不再次加锁，也可以采用直接拷贝数据库文件的方式（导入时更快，也得更小心一点）。导出完成后可以解锁，让M1正常运行了：</p>

<pre><code>mysql&gt; unlock tables;
</code></pre>

<p>现在到M2上去，用刚才导出的数据把库建起来（如果采用直接执行sql的方式，记得先停掉binlog），然后进行比较重要的一步，让M2从M1刚才导出数据的时候开始恢复同步：</p>

<pre><code>mysql&gt; stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql&gt; CHANGE MASTER TO MASTER_HOST='ip_of_M1', MASTER_PORT=port_of_M1, MASTER_USER='rep', MASTER_PASSWORD='passwd', MASTER_LOG_FILE='svr5.000002', MASTER_LOG_POS=98;
Query OK, 0 rows affected (0.01 sec)

mysql&gt; start slave;
Query OK, 0 rows affected (0.01 sec)
</code></pre>

<p>最后两个参数就是刚才在M1上用<code>show master status;</code>得到的数值。</p>

<p>同理，在M1上也作一次<code>CHANGE MASTER TO</code>操作，指向M2，两边的双向主主复制基本上就算是完成。</p>

<p>另外注意以后切换MASTER的时候，直接修改my.cnf是不行的，因为都存到优先级更高的master.info文件中去了，还是用<code>CHANGE MASTER TO</code>来操作更靠谱。</p>

<h2>通过ssh进行远程同步的连接方法</h2>

<p>以M2远程登录M1的方式为例，M2 ssh到M1，以便M2作为slave能连接master M1，使用的是ssh隧道：</p>

<pre><code>M2 $  ssh -p 8022 -L 127.0.0.1:3307:ip_of_M1:3306 -CfNg user@domain.tld -o ControlPath=/tmp/ssh-mysql-3307-M1-3306
</code></pre>

<p>双向同步时，M1还要连接到M2才行，依然是从M2上来打洞：</p>

<pre><code>M2 $ ssh -p 8022 -R 0.0.0.0:3307:localhost:3306 user@domain.tld -fN -o ControlPath=/tmp/ssh-mysql-3307-local-3306
</code></pre>

<p>注意在建立这些ssh隧道的时候，一般不能使用<a href="385">ssh的连接共享</a>。</p>

<h4>Update @ 2009-03-16</h4>

<p>马上就遇到了innodb启用了<code>innodb_file_per_table</code>之后，直接拷贝<code>.ibd</code>文件过来不生效的问题，并且是在建立好M-M复制之后，如此这般（M1是旧服务器，M2上把文件拷贝过来导入的服务器）（补注：依然失败）：</p>

<ul>
<li>M1: 确认所有同步内容已经处理完毕。</li>
<li>M1: stop slave;</li>
<li>M2: flush tables with read lock;</li>
<li>M2: 备份mysql data目录下相应库的所有文件（就是拷贝过来的那些），并且删除掉（db.opt不要删）。</li>
<li>M2: unlock tables; 不然下面的操作无法进行。</li>
<li>M2: 使用其它手段重新创建所有表，数据不需要。</li>
<li>M2: show master status; 得到位置后面要用到。</li>
<li>M2: flush tables with read lock; 准备用拷贝过来的ibd覆盖刚才用sql重新创建的表，这样数据就有了。</li>
<li>M2: 复制/拷贝/恢复刚才备份的所有<code>.frm, .ibd</code>文件。</li>
<li>M2: unlock tables; M2恢复正常。</li>
<li>M1: CHANGE MASTER TO MASTER_HOST=&#8217;ip_of_M2&#8242;, MASTER_PORT=port_of_M2, MASTER_USER=&#8217;rep&#8217;, MASTER_PASSWORD=&#8217;passwd&#8217;, MASTER_LOG_FILE=&#8217;fwolf-office.000101&#8242;, MASTER_LOG_POS=57943; 目的是跳过刚才那些重新建表的处理。</li>
<li>M1: start slave; M1恢复正常。</li>
</ul>

<p>至于原因嘛，因为拷贝过来的都是ibd文件，而innodb的schema信息都存在系统表INFORMATION_SCHEMA里，偏偏这个系统表又是只读的，所以只能重新建一遍库了。</p>

<p>还遇到了特定名称的库无法创建的情况，会提示<code>.frm</code>无法创建之类的，可以这样处理：创建失败后，从其它库中建一个名称相同的，然后把<code>.frm, .ibd</code>文件拷贝过来，然后执行<code>drop table XXX</code>，然后就能正常创建、删除了。</p>

<p>&#8230;&#8230;慢，表都能看到了，可哪个里面都没有数据，还是不行，看来innodb迁移到其它服务器，尤其是配置不同、使用状态不同的情况下，还真不是一般的麻烦，我还是老老实实改用mysqldump得了，删库重建再导入，慢也就慢这一次而已。大体过程：</p>

<ul>
<li>M1: stop slave;</li>
<li>M1: dump all data:
mysqldump -h ip_of_M1 &#8211;add-drop-table &#8211;default-character-set=utf8 &#8211;user=root -p &#8211;extended-insert=true &#8211;net_buffer_length=600k&#8211;skip-lock-tables db_to_replicate > db_to_replicate.sql</li>
<li>M2: delete database &amp; recreate it</li>
<li>M2: 执行刚才的sql，导入数据，最好先关闭binlog</li>
<li>M2: stop slave;</li>
<li>M1/2上分别<code>change master to, start slave;</code></li>
</ul>

<p>如果遇到这样的错误：</p>

<pre><code>ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
</code></pre>

<p>可以在<code>CHANGE MASTER TO</code>之前先<code>RESET SLAVE;</code>。</p>

<h4>参考</h4>

<ul>
<li><a href="http://java.dzone.com/articles/better-mysql-replication">A Better MySQL Replication Heartbeat(利用SYSDATE和NOW在同步时不同的处理机制，实现主从服务器延迟的心跳检查)</a></li>
<li><a href="http://www.onlamp.com/pub/a/onlamp/2006/04/20/advanced-mysql-replication.html?page=1">Advanced MySQL Replication Techniques（环式多主复制）</a></li>
<li><a href="http://www.howtoforge.com/setting-up-master-master-replication-on-four-nodes-with-mysql-5-on-debian-etch">Setting Up Master-Master Replication On Four Nodes With MySQL 5 On Debian Etch</a></li>
<li><a href="http://www.xaprb.com/blog/2007/01/20/how-to-make-mysql-replication-reliable/">How to make MySQL replication reliable</a></li>
<li><a href="http://capttofu.livejournal.com/1752.html">MySQL Multi-Master Replication</a></li>
<li><a href="http://imysql.cn/node/314">[MySQL 5.1 体验]MySQL 复制</a></li>
<li><a href="http://www.howtoforge.com/mysql_master_master_replication">MySQL Master Master Repliction Tutorial </a></li>
<li><a href="http://imysql.cn/2008_12_17_migrate_innodb_tablespace_smoothly">InnoDB数据表空间文件平滑迁移</a></li>
<li><a href="http://www.chriscalender.com/?p=28">Recovering an InnoDB table from only an .ibd file.(介绍了手工修改ibd文件编号的方法，危险，我试了不成功)</a></li>
</ul>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/innodb" title="innodb" rel="tag">innodb</a>, <a href="http://www.fwolf.com/blog/post/tag/migration" title="migration" rel="tag">migration</a>, <a href="http://www.fwolf.com/blog/post/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.fwolf.com/blog/post/tag/replication" title="replication" rel="tag">replication</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/428" title="升级到Ubuntu Intrepid后感觉到的一些变化 (2009-01-06)">升级到Ubuntu Intrepid后感觉到的一些变化</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/404" title="忙碌的5月 (2008-06-13)">忙碌的5月</a> (10)</li>
	<li><a href="http://www.fwolf.com/blog/post/369" title="在无线网络中使用RADIUS服务器+mysql进行用户认证 (2007-11-15)">在无线网络中使用RADIUS服务器+mysql进行用户认证</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/383" title="[MediaTemple]虚拟主机内存优化的一点心得 (2008-02-19)">[MediaTemple]虚拟主机内存优化的一点心得</a> (2)</li>
	<li><a href="http://www.fwolf.com/blog/post/412" title="[MediaTemple]从(dv)3.0升级到3.5 (2008-07-13)">[MediaTemple]从(dv)3.0升级到3.5</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/435/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>升级到Ubuntu Intrepid后感觉到的一些变化</title>
		<link>http://www.fwolf.com/blog/post/428</link>
		<comments>http://www.fwolf.com/blog/post/428#comments</comments>
		<pubDate>Tue, 06 Jan 2009 15:43:05 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ATI]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[font]]></category>
		<category><![CDATA[innodb]]></category>
		<category><![CDATA[intrepid]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[nvidia]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[sysinfo]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[WenQuanYi]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/?p=428</guid>
		<description><![CDATA[第一，一台服务器，双网卡，配置两个ip地址，这两个ip地址同属一个网段，因此网关设置为相同。升级前一切正常，升级后只能让同网段的其它机器ping通，其它网段机器即使防火墙规则允许也ping不通，去掉其中一个ip地址的网关设置后就可以了。 第二是和mysql相关的怪怪的问题，以前mysql设置中都有一项： innodb_flush_log_at_trx_commit=1 升级后，一台P4 1.7 256M内存的机器insert数据正常，另外一台IBM x3650 双5160 3.0GHz cpu 4G内存机器的insert却极慢（10条数据要5秒），不光是比以前Feisty慢，比刚才那台P4机器都要慢很多倍。将此项值调整为2以后恢复正常，insert 1000条数据耗时0.25秒左右。P4机器也将此值调整为2后有改进，但不如x3650明显，insert 1000条数据耗时5秒多。 第三，登录后欢迎屏幕里的那个系统信息我很喜欢： System information as of Tue Jan 6 23:50:02 CST 2009 System load: 0.0 Memory usage: 77% Processes: 118 Usage of /home: 19.4% of 24.03GB Swap usage: 34% Users logged in: 3 如果没有出现，把landscape-common这个包装上，并且平时可以用landscape-sysinfo命令调出类似信息。 Update @ 2009-01-13 字体问题又出现了，网上有很多修改文泉驿字体的方法，我则是/etc/fonts/conf.avail下44-wqy-zenhei.conf和69-language-selector-zh-cn.conf中WenQuanYi Zen Hei或WenQuanYi Bitmap Song前面加上Simsun，字体倒是还是原样（默认宋体），但firefox和其它X程序有时候字体乱成一片，也有说像墨点或者重叠的，反正鼠标选中后就恢复了，有人说是驱动的问题，把nvidia-glx-96换成nvidia-glx-71干脆X就起不来了，其它的173 177 [...]]]></description>
			<content:encoded><![CDATA[<p>第一，一台服务器，双网卡，配置两个ip地址，这两个ip地址同属一个网段，因此网关设置为相同。升级前一切正常，升级后只能让同网段的其它机器ping通，其它网段机器即使防火墙规则允许也ping不通，去掉其中一个ip地址的网关设置后就可以了。</p>

<p>第二是和mysql相关的怪怪的问题，以前mysql设置中都有一项：</p>

<pre><code>innodb_flush_log_at_trx_commit=1
</code></pre>

<p>升级后，一台P4 1.7 256M内存的机器insert数据正常，另外一台IBM x3650 双5160 3.0GHz cpu 4G内存机器的insert却极慢（10条数据要5秒），不光是比以前Feisty慢，比刚才那台P4机器都要慢很多倍。将此项值调整为2以后恢复正常，insert 1000条数据耗时0.25秒左右。P4机器也将此值调整为2后有改进，但不如x3650明显，insert 1000条数据耗时5秒多。</p>

<p>第三，登录后欢迎屏幕里的那个系统信息我很喜欢：</p>

<pre><code>  System information as of Tue Jan  6 23:50:02 CST 2009

  System load:    0.0                Memory usage: 77%   Processes:       118
  Usage of /home: 19.4% of 24.03GB   Swap usage:   34%   Users logged in: 3
</code></pre>

<p>如果没有出现，把<code>landscape-common</code>这个包装上，并且平时可以用<code>landscape-sysinfo</code>命令调出类似信息。</p>

<h4>Update @ 2009-01-13</h4>

<p>字体问题又出现了，网上有很多修改文泉驿字体的方法，我则是<code>/etc/fonts/conf.avail</code>下<code>44-wqy-zenhei.conf</code>和<code>69-language-selector-zh-cn.conf</code>中<code>WenQuanYi Zen Hei</code>或<code>WenQuanYi Bitmap Song</code>前面加上<code>Simsun</code>，字体倒是还是原样（默认宋体），但firefox和其它X程序有时候字体乱成一片，也有说像墨点或者重叠的，反正鼠标选中后就恢复了，有人说是驱动的问题，把<code>nvidia-glx-96</code>换成<code>nvidia-glx-71</code>干脆X就起不来了，其它的173 177 180根本就不支持我的GForce4 MX440。</p>

<p>如果不换Simsun，用网上的方法调整一下文泉驿字体的处理方式，倒是不乱，但字体略显模糊，还能接受。但其它X程序依然有时文字是乱的。查到可能是显卡驱动的问题，只能等待了？</p>

<p>另外注意一点，<code>nvidia-glx-??</code>安装后必须重启系统，只重启X是不起作用的。</p>

<h4>Update @ 2009-01-16</h4>

<p>旧IBM本本，raedon9000的显卡，fglrx不支持，所以卸掉<code>xorg-driver-fglrx</code>后X能起来了，但登录界面无法输入，并且小红点失效，reinstall xserver-xorg-vesa后<code>dpkg-reconfigure xserver-xorg</code>后好了。总体来说反而比N卡好配。</p>

<h4>Update @ 2009-02-08</h4>

<p>如果安装nvidia显卡驱动时出现这样的错误：</p>

<pre><code>  dpkg-divert: `diversion of /usr/lib/xorg/modules/extensions/libGLcore.so to /usr/lib/nvidia/libGLcore.so.xlibmesa by nvidia-glx-96' clashes with `diversion of /usr/lib/xorg/modules/extensions/libGLcore.so to /usr/lib/nvidia/libGLcore.so.xlibmesa by nvidia-glx-71'
  dpkg: error processing /var/cache/apt/archives/nvidia-glx-96_96.43.09-0ubuntu1.1_i386.deb (--unpack):
   subprocess pre-installation script returned error exit status 2
  Errors were encountered while processing:
   /var/cache/apt/archives/nvidia-glx-96_96.43.09-0ubuntu1.1_i386.deb
  E: Sub-process /usr/bin/dpkg returned an error code (1)
</code></pre>

<p>可以试着用<code>dpkg-divert --list|grep GL</code>找到libGLcore.so相关的内容，可能会定义到另外一个包里了：</p>

<pre><code>$ dpkg-divert --list|grep GL
diversion of /usr/lib/xorg/modules/extensions/libGLcore.so to /usr/lib/nvidia/libGLcore.so.xlibmesa by nvidia-glx-71
diversion of /usr/lib/libGL.so.1 to /usr/lib/nvidia/libGL.so.1.xlibmesa by nvidia-glx-96
diversion of /usr/lib/libGL.so.1.2 to /usr/lib/nvidia/libGL.so.1.2.xlibmesa by nvidia-glx-96
</code></pre>

<p>可以看出是nvidia-glx-71没删干净，在这里手工清除就可以了：</p>

<pre><code>$ sudo dpkg-divert --remove /usr/lib/xorg/modules/extensions/libGLcore.so
Removing `diversion of /usr/lib/xorg/modules/extensions/libGLcore.so to /usr/lib/nvidia/libGLcore.so.xlibmesa by nvidia-glx-71'
</code></pre>

<h4>Update @ 2009-02-09</h4>

<p>ati的驱动也出问题了，rv3??核心的显卡全不支持，比如我的<code>Radeon X600</code>，暂时只能删掉fglrx，用其它的驱动替代。删除<code>xorg-driver-fglrx</code>相关的包，装上<code>xserver-xorg-video-ati</code>，然后<code>sudo dpkg-reconfigure xserver-xorg</code>，生成了一个极小的xorg.conf，图形就有了，但据说3D性能几乎没有，办公用没啥大事。</p>

<pre><code>Section "Device"
    Identifier  "Configured Video Device"
    Option      "UseFBDev"      "true"
EndSection

Section "Monitor"
    Identifier  "Configured Monitor"
EndSection

Section "Screen"
    Identifier  "Default Screen"
    Monitor     "Configured Monitor"
    Device      "Configured Video Device"
EndSection
</code></pre>

<p>Firefox工具栏的自定义设置总是丢失的问题原因也<a href="http://forum.ubuntu.com.cn/viewtopic.php?f=73&amp;p=1015447">找到了</a>，可以暂时禁用TabMixPlus扩展，或者是禁用Ubuntu Firefox Modifications，我选择后者。</p>

<p>字体也有一点小问题，比如方正小标宋的“黑体”效果就没有了，重新刷新一下<code>fc-cache -fv</code>就好了。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/ati" title="ATI" rel="tag">ATI</a>, <a href="http://www.fwolf.com/blog/post/tag/benchmark" title="benchmark" rel="tag">benchmark</a>, <a href="http://www.fwolf.com/blog/post/tag/firefox" title="Firefox" rel="tag">Firefox</a>, <a href="http://www.fwolf.com/blog/post/tag/font" title="font" rel="tag">font</a>, <a href="http://www.fwolf.com/blog/post/tag/innodb" title="innodb" rel="tag">innodb</a>, <a href="http://www.fwolf.com/blog/post/tag/intrepid" title="intrepid" rel="tag">intrepid</a>, <a href="http://www.fwolf.com/blog/post/tag/ip" title="ip" rel="tag">ip</a>, <a href="http://www.fwolf.com/blog/post/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.fwolf.com/blog/post/tag/nvidia" title="nvidia" rel="tag">nvidia</a>, <a href="http://www.fwolf.com/blog/post/tag/ping" title="ping" rel="tag">ping</a>, <a href="http://www.fwolf.com/blog/post/tag/sysinfo" title="sysinfo" rel="tag">sysinfo</a>, <a href="http://www.fwolf.com/blog/post/tag/ubuntu" title="Ubuntu" rel="tag">Ubuntu</a>, <a href="http://www.fwolf.com/blog/post/tag/wenquanyi" title="WenQuanYi" rel="tag">WenQuanYi</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/152" title="[Ubuntu]使用点滴 (2006-07-08)">[Ubuntu]使用点滴</a> (7)</li>
	<li><a href="http://www.fwolf.com/blog/post/414" title="接多显示器的一点提示 (2008-07-17)">接多显示器的一点提示</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/426" title="升级到8.10 intrepid过程中libc6依赖性死循环问题的解决 (2009-01-04)">升级到8.10 intrepid过程中libc6依赖性死循环问题的解决</a> (6)</li>
	<li><a href="http://www.fwolf.com/blog/post/170" title="[Ubuntu]明明白白安装中文字体 (2006-05-17)">[Ubuntu]明明白白安装中文字体</a> (20)</li>
	<li><a href="http://www.fwolf.com/blog/post/442" title="Ubuntu升级到9.04 Jaunty的变化和遇到的问题 (2009-05-15)">Ubuntu升级到9.04 Jaunty的变化和遇到的问题</a> (2)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/428/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
