百度空间 | 百度首页 
 
查看文章
 
Innodb的复制发布
2009-11-11 02:58
一直都没敢做Innodb的相关内容,因为一直没有对Innodb的复制发布做过研究和实验,MyIsam的复制发布相对简单,把库下面所有文件拷过去就好了。
其实Innodb的做法和MyIsam类似,只不过Innodb引擎下的表的数据内容不再是存在同一的数据库目录下(MyIsam就是这么做的),Innodb引擎下,数据文件存放在ibdata1这样的文件里,而操作的log默认存放在ib_logfile0、ib_logfile1、ib_logfile2这样的文件中。
几个简单的注意的地方,Innodb不能用很可能是以下的原因:
1、my.cnf中有:
skip-innodb
请改成:
#skip-innodb

2、Innodb的新旧日志文件大小冲突
处理办法:删除旧的日志文件


所以Innodb的复制发布是以下的步骤(MyIsam的更简单一点,去掉其中特殊强调的Innodb部分,就是MyIsam的复制发布了):
1、主库上,执行FLUSH TABLES WITH READ LOCK语句清空所有表和块写入语句:(当然你也可以把数据库stop掉)
mysql> FLUSH TABLES WITH READ LOCK;

2、得到主库当前记录点
mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73       | test         | manual,mysql     |
+---------------+----------+--------------+------------------+

3、将主服务器的数据文件拷贝到从服务器上
如果有innodb引擎,须将innodb的数据文件拷贝过来,文件名可能是ibdata1

4、主库:确认文件已经生成拷贝了。
mysql> UNLOCK TABLES;



从服务器:
1.    停止用于从服务器的服务器并在其my.cnf文件中添加下面的行:
[mysqld]     
server-id=slave_id
slave_id值同Master_id值一样,必须为1到232–1之间的一个正整数值。并且,从服务器的ID必须与主服务器的ID不相同。例如:

[mysqld]
server-id=2

2.启动从服务器

3.在从服务器上设置主服务器信息
mysql> CHANGE MASTER TO
->     MASTER_HOST='master_host_name',
->       MASTER_PORT=3306,
->     MASTER_USER='replication_user_name',
->     MASTER_PASSWORD='replication_password',
->     MASTER_LOG_FILE='recorded_log_file_name',
->     MASTER_LOG_POS=recorded_log_position;

4.启动复制
mysql> START SLAVE;

5.查看复制状态
mysql> SHOW SLAVE STATUS;
mysql> SHOW PROCESSLIST;

在Innodb的情况下:
Last_Errno: 1033
此处出错是innodb的复制发布的问题,需要删除从库上原来的innodb的log文件,通常文件名为:ib_logfile0,ib_logfile1...

再重新启动从库的slave。

通常到这里应该就OK了,如果还有问题,需要根据show slave status\G中看到的错误代码和错误提示再进行定位了。

另外从库的my.cnf中有一个设置建议用上。
read_only

这个属性打开很有必要,可以防止很多人为修改从库导致从库同步失败的问题。

另外,再赠送两个my.cnf文件给大家。
服务器配置是:
4×2CPU
4G内存

主库my.cnf
从库my.cnf

类别:it就是玩具 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu