您的位置:首页 > 其它

Innodb的复制发布

2016-02-05 16:04 218 查看
一直都没敢做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

这个属性打开很有必要,可以防止很多人为修改从库导致从库同步失败的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: