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
这个属性打开很有必要,可以防止很多人为修改从库导致从库同步失败的问题。
其实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
这个属性打开很有必要,可以防止很多人为修改从库导致从库同步失败的问题。
相关文章推荐
- VLFeat开源库介绍及在VS2013中的编译
- python编码问题
- 超详细!ActionBar 使用·详解
- VLFeat开源库介绍及在VS2013中的编译
- 第四章 JVM垃圾回收算法
- 【IOS】分镜和nib文件的差别
- pin导致路由器死掉的解决方法
- 经典ASP.NET MVC3.0入门详解
- Entity Framework 全面教程详解(转)
- 双关键字快速排序
- android不让程序显示在最近程序列表中
- 【图书分配】
- 操作员计算机绑定
- JSP有哪些内置对象和动作?它们的作用分别是什么?
- SQL的主键和外键的作用
- HBase Maven 工程模块梳理
- 监听listivew滚动距离最优方案
- City Game
- hdu 2092 整数解
- 教你制作一个OS X 10.9 Mavericks 安装U盘