InnoDB引擎数据库主从复制同步新的分享
2023-06-13 09:14:41 时间
近期将公司的MySQL架构升级了,由原先的一主多从换成了DRBD+Heartbeat双主多从,正好手上有一个电子商务网站新项目也要上线了,用的是DRBD+Heartbeat双主一从,由于此过程还是有别于以前的MyISAM引擎的,所以这里也将其心得归纳总结了一下:
1)MySQL的replication过程是一个异步同步的过程,并非完全的主从同步,所以同步的过程中是有延迟的,如果做了读写分离的业务的话,建议也要监控此延迟时间;
2)MySQL的master与slave机器记得server-id要保持不一致,如果一样的话,replication过程中会出现如下报错:
Fatalerror:TheslaveI/OthreadstopsbecausemasterandslavehaveequalMySQLserverids;theseidsmustbedifferentforreplicationtowork(orthe--replicate-same-server-idoptionmustbeusedonslavebutthisdoesnotalwaysmakesense;pleasecheckthemanualbeforeusingit).
这个问题很好处理,即将slave机的server-id修改成跟master机器不一致即可。
3)我以前的一个误区就是,slave机器是用自己的二进制日志来完成replication过程的,其实不是这样的,根据复制的工作原理:slave服务器是copy主服务器的二进制日志到自己的中继日志,即relay-log日志(即centos3-relay-bin.000002这种名字的)中,然后再把更新应用用到自己的数据库上,所以slave机器是不需要开启二进制日志的,这样过程一样会成功的;除非是准备做主主架构,这才需要slave机器开启二进制日志,这个问题一直在导着我,我以一直以为slave机器搭建replication环境时是一定要开启二进制的,
4)在master机器上授权时,尽量只给某一个或某几个固定机器权限,让它们只有replicationslav,replicationclient权限,尽量不要给grant权限;另外,虽然数据库我们一般是通过内网操作,但越是在在内网对MySQL数据库进行授权操作,越是要注意安全;
5)replication搭建过程按照正常流程走的话,一般很容易实施成功,如果出错的话,多检查下网络环境、权限问题,一般来说整个搭建过程应该还是会比较顺利的。
在数据库设计初期,我已经将此电子商务的数据库引擎定义为InnoDB,除了数据库中原有的系统表之外,其它表全部由MyISAM转成了InnoDB,原因有二:
1)电子商务业务会涉及到交易付款,在这种基本OLTP的应用中,InnoDB应该作为核心应用表的首选存储引擎;
2)DRBD系统重启时的过程会比较缓慢,会频繁的读表,如果表引擎为MyISAM的话极有可能出现损坏情况,为了造成不必要的问题,我将数据库的表引擎由MyISAM均转成了InnoDB引擎的表。
DRBD+Heartbeat+MySQL参考以前的工作文档,搭建的比较顺利,就是在搭建replication环境时遇到了1062报错,详细过程如下:
初期参考MySQL手册操作,取master机器的快照备份,用的是--single-transaction选项,然后同步过程频繁1062报错,报错日志如下:
Last_SQL_Error:Error"Duplicateentry"d36ad91bff36308de540bbd9ae6f4279"forkey"PRIMARY""onquery.Defaultdatabase:"myproject".Query:"INSERTINTO`lee_sessions`(`session_id`,`ip_address`,`user_agent`,`last_activity`,`user_data`)VALUES("d36ad91bff36308de540bbd9ae6f4279","180.153.201.218","Mozilla/4.0",1353394206,"")"
后来改变思路,用--master-data选项来取主master快照备份,命令如下所示:
mysqldump-uroot--quick--flush-logs--master-data=1-pmyproject>myproject.sql
1)MySQL的replication过程是一个异步同步的过程,并非完全的主从同步,所以同步的过程中是有延迟的,如果做了读写分离的业务的话,建议也要监控此延迟时间;
2)MySQL的master与slave机器记得server-id要保持不一致,如果一样的话,replication过程中会出现如下报错:
Fatalerror:TheslaveI/OthreadstopsbecausemasterandslavehaveequalMySQLserverids;theseidsmustbedifferentforreplicationtowork(orthe--replicate-same-server-idoptionmustbeusedonslavebutthisdoesnotalwaysmakesense;pleasecheckthemanualbeforeusingit).
这个问题很好处理,即将slave机的server-id修改成跟master机器不一致即可。
3)我以前的一个误区就是,slave机器是用自己的二进制日志来完成replication过程的,其实不是这样的,根据复制的工作原理:slave服务器是copy主服务器的二进制日志到自己的中继日志,即relay-log日志(即centos3-relay-bin.000002这种名字的)中,然后再把更新应用用到自己的数据库上,所以slave机器是不需要开启二进制日志的,这样过程一样会成功的;除非是准备做主主架构,这才需要slave机器开启二进制日志,这个问题一直在导着我,我以一直以为slave机器搭建replication环境时是一定要开启二进制的,
4)在master机器上授权时,尽量只给某一个或某几个固定机器权限,让它们只有replicationslav,replicationclient权限,尽量不要给grant权限;另外,虽然数据库我们一般是通过内网操作,但越是在在内网对MySQL数据库进行授权操作,越是要注意安全;
5)replication搭建过程按照正常流程走的话,一般很容易实施成功,如果出错的话,多检查下网络环境、权限问题,一般来说整个搭建过程应该还是会比较顺利的。
在数据库设计初期,我已经将此电子商务的数据库引擎定义为InnoDB,除了数据库中原有的系统表之外,其它表全部由MyISAM转成了InnoDB,原因有二:
1)电子商务业务会涉及到交易付款,在这种基本OLTP的应用中,InnoDB应该作为核心应用表的首选存储引擎;
2)DRBD系统重启时的过程会比较缓慢,会频繁的读表,如果表引擎为MyISAM的话极有可能出现损坏情况,为了造成不必要的问题,我将数据库的表引擎由MyISAM均转成了InnoDB引擎的表。
DRBD+Heartbeat+MySQL参考以前的工作文档,搭建的比较顺利,就是在搭建replication环境时遇到了1062报错,详细过程如下:
初期参考MySQL手册操作,取master机器的快照备份,用的是--single-transaction选项,然后同步过程频繁1062报错,报错日志如下:
Last_SQL_Error:Error"Duplicateentry"d36ad91bff36308de540bbd9ae6f4279"forkey"PRIMARY""onquery.Defaultdatabase:"myproject".Query:"INSERTINTO`lee_sessions`(`session_id`,`ip_address`,`user_agent`,`last_activity`,`user_data`)VALUES("d36ad91bff36308de540bbd9ae6f4279","180.153.201.218","Mozilla/4.0",1353394206,"")"
后来改变思路,用--master-data选项来取主master快照备份,命令如下所示:
mysqldump-uroot--quick--flush-logs--master-data=1-pmyproject>myproject.sql
相关文章
- Python错误:“数据库引擎找不到输入表或查询”的一种可能情况
- SQLServer 错误 17130 没有足够的内存分配给所配置的锁数。 正尝试以较小的锁哈希表启动,但这可能会影响性能。 请与数据库管理员联系,为数据库引擎的这一实例配置更多内存。 故障 处理 修复 支持远程
- MySQL的BlackHole引擎在主从架构中的作用详解数据库
- MySQL Status Select_range_check 数据库状态作用意思及如何正确
- MySQL数据库管理系统中引擎多种多样(mysql几种引擎)
- 者 mysql数据库MySQL:统治Web数据库的经典引擎(mysql或)
- database构建MSSQL数据库:建立高效数据管理体系(stuffmssql)
- Oracle数据库:强大的数据管理实力总结(oracle数据库总结)
- 深入了解Oracle的数据库引擎.(oracle的数据库引擎)
- 下载MySQL数据库:百度云盘大放送(mysql下载百度云盘)
- 红色神奇:Redis 内存数据库突破极限 (redis内存数据库)
- 教你轻松修改MySQL表引擎,提高数据库性能(修改mysql表引擎)
- MongoDB:从数据库到应用的推荐引擎(mongodb推荐)
- 库Oracle中关联数据库的数据优化(oracle 关联数据)
- Oracle数据库入库操作必备指南(oracle 入库单)
- 使用cmd命令调入MySQL数据库(cmd调入mysql)
- 坚定不移清除Redis缓存数据库(清空redis缓存数据库)
- Oracle Core2最强的数据库引擎(core2 oracle)
- 数据库中的应用INT函数在Oracle数据库中的智能化应用(int函数在Oracle)
- Oracle 数据库中的视图介绍及作用(oracle中视图是什么)
- 特性探索Oracle数据库中的DNN特性(oracle中的dnnn)
- Oracle数据库中创建外部表的实战指南(oracle中外部表)
- nodbOracle数据库无法使用InnoDB存储引擎(oracle 不支持in)
- SQLite数据库管理系统-我所认识的数据库引擎
- 深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较
- MySQL数据库InnoDB引擎主从复制同步经验总结