查看文章 |
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 |
最近读者: