最近有个需要,国内和国外分别开了两台mysql数据库,要求是数据实时同步,不管那边访问,数据都是一样的。 其实好几年前,做过一次MySQL的主主同步,都已经忘记怎么做了。这次做完,顺便记录一下。 前提 服务器A的IP:1.1.1.1 服务器B的IP:2.2.2.2 数据库操作,务必提前备份好原始数据。 两台服务器的MySQL数据,先同步一次。保证数据完全一致。 停止mysql服务,防止有数据生成。 auto_increment_increment主键自增的步长,用于防止Master与Master之间出现主键冲突(重复),通常有多少台主服务器,设置为多少 MySQL二进制日志名和偏移量 服务器A、服务器 可以测试数据同步效果。 ...... Slave_IO_Running: Yes Slave_SQL_Running: Yes ......
copy,并授予相应权限并在DCGH-DB2上去同步DCGH-DB1上的数据。 2.在DCGH-DB1创建表并插入数据,看是否同步。 如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项。一般为了保证主主同步不冲突,会忽略mysql数据库。 #[必须]不需要同步的数据库。 如果有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db选项。一般为了保证主主同步不冲突,会不同步mysql数据库。
本文介绍如何安装EOS节点软件并接入EOS主网,主要包括以下内容: 如何安装EOS节点软件 如何配置EOS节点软件接入主网 如何启动EOS节点软件与主网数据同步 如何检查主网数据同步进度 如何正确地关闭 ://github.com/CryptoLions/EOS-MainNet/blob/master/genesis.json 2、下载主网配置文件 CryptoLions同样也提供了主网的配置文件config.ini --genesis-json genesis.json --delete-all-blocks 启动之后,可以另开终端查看同步进度: ~$ cleos get info 观察输出结果中的chain_id block_cpu_limit": 100000000, "block_net_limit": 1048576 } 可以将上面信息中的head_block_num与eospark上的最新区块号对比, 即可得知同步进度 当两者一致后,表示节点与EOS主网达成同步。 四、EOS节点的停止与重新启动 有时可能因为种种原因需要重新启动nodeos,切记不要强制杀掉nodeos,让它 有喘息清理的机会。
数据库同步方式 两台服务器互为主从,双向同步数据 ? 创建数据库表 为试验双向同步,简单编写了一个创建数据库和一个用户表的语句。 并分别在服务器242和243上的MySQL中执行语句。 Show Slave Status 部分释义 ① Slave_IO_Status:线程已经连接上主服务器,正等待二进制日志事件到达。如果主服务器正空闲,会持续较长的时间。 解决自增长列的问题 原因:当同步断开,两台服务器分别有新数据进入,那么主键ID是自增长列会出现冲突的情况,会导致同步无法继续。 模拟测试自增长列解决方案 测试过程模拟同步在断开后,两个数据库分别都有数据插入,然后再开启同步,是否会有自增ID的冲突。 1.先分别在服务器242和243上停止Slave线程 ? 2.然后分别向服务器242和243所在数据库中分别插入数据 ? ? 很明显,分别插入时,自增列也不会重复; 3.分别开启服务器242和243的Slave线程 ? 4.查看同步后的数据 ?
一.准备 1.两个数据库版本最好一致 2.两个数据库内数据保持一致,若不一致,可手动调整,比如A比B多一个库,那将这个库导入到B库,达到一致。 A数据库:182.92.172.80 B数据库:123.57.44.85 二.操作 A数据库操作 1.开启binlog vim /etc/my.cnf [mysqld] log-bin=mysql-bin #开启二进制日志 server-id=1 #设置server-id,不能一样 2.重启mysql,创建用于同步的用户账号 systemc restart mysql 登陆数据库 mysql -hlocalhost mysql-bin.000003 | 73 | | | +------------------+----------+--------------+------------------+ 4.将当前数据导出 ,如果两数据库不一样,手动调整 mysqldump -u root -p --all-databases > /root/alldb.sql 5.解锁查看binlog日志位置,如果没变证明锁定成功。
B数据库操作 1.导入数据 mysql -uroot -p < alldb.sql 2.修改配置文件 vim /etc/my.cnf [mysqld] log-bin=mysql-bin #开启二进制日志 server-id=2 #设置server-id,必须唯一 3.重启mysql,配置同步 systemctl restart mysql 需要A服务器主机名,登陆凭据,二进制文件的名称和位置 CHANGE Slave_IO_Running: Yes Slave_SQL_Running: Yes 都是yes即可 5.配置作为A的主 创建用户并授权:用户:test密码:123456,ip配置为A的IP CREATE 123456'; 分配权限 GRANT REPLICATION SLAVE ON *.* TO 'test'@'182.92.172.80'; flush privileges; 这次不用锁表了,因为B在同步 A的数据,当前保持一致了。
GTID 复制使得跨多个节点的数据同步和事务追踪变得更加可靠。 GTID 的自动生成和追踪更加精准,能够有效避免主主同步中因事务丢失或重复提交而产生的数据不一致问题。 冲突解决策略:可以通过 slave_parallel_workers 来启用并行复制,减少由于主主同步中数据冲突所导致的性能瓶颈。 4. 数据一致性和容错 一致性保证:MySQL 8.4 提供更强的数据一致性保证,特别是在使用 GTID 模式时,能够确保各个节点的数据一致性。在主主同步架构中,确保没有数据丢失和数据重复是至关重要的。 实现MySQL 8.0 与 8.4 主主同步 快速部署8.0和8.4数据库 初始化8.0数据库 # 两台服务器安装MySQL8.0数据库(非docker安装) tar -xf mysql-8.0.39- 2 systemctl restart mysqld.service 8.0 版本配置主主同步 主节点1登录主节点2数据库,将密钥发送到主节点2 mysql -ureplicator -h主节点2的IP
MySQL数据库的主备同步,也称为主从复制,是一种高可用的解决方案,旨在保证主备数据的一致性。这一机制在生产环境中尤为重要,因为它能确保在数据库服务出现故障时,快速切换到备库,避免应用不可用的情况。 本文将详细介绍MySQL数据库主备同步的原理及其实现过程。一、主备同步的基本概念主备同步是指将主库(Master)上的数据实时同步到备库(Slave)上,使得备库的数据与主库保持一致。 二、主备同步的实现原理MySQL主备同步的实现依赖于binlog(Binary Log,二进制日志)。Binlog记录了主库上的所有更改操作,备库通过读取和执行这些日志来保持数据一致性。 三、主备同步的好处提升数据库的读并发性:大多数应用都是读比写要多,采用主备同步方案,可以扩展备库来提升读能力。备份:主备同步可以得到一份实时的完整的备份数据库。 快速恢复:当主库出错时(如误删表),可以通过备库来快速恢复数据。四、主备同步的注意事项延迟问题:由于主从复制是异步的,备库和主库之间的数据可能存在延迟,只能保证数据最终的一致性。
环境: MySQL 5.7.25 主主架构 故障现象: 发现互相之间的同步均发生异常,两端均出现1236错误,在两个主节点上分别执行show slave status显示的关键信息如下: Master1 而具体报错信息中比较明显的一点是说A slave with the same server_uuid/server_id as this slave has connected to the master,可是这套主主同步的环境 最终结合报错时间点和客户沟通是否有变更,结果发现这套环境在虚拟化平台上,该时刻正好用户以这套主主同步的MySQL环境Master1、Master2分别克隆出两台虚拟主机New1、New2,而克隆中的New1 知道原因后,与用户沟通,最终是将New1、New2的slave停止;重新启动Master1和Master2的slave进程,就恢复了正常的同步。 server-id = 1121 幸好本次克隆出来的机器网卡名称由eth2变成了eth3,在克隆出来的环境查看keepalived的日志是因网卡名称有误没有启动成功,不然都不晓得会不会因为vip冲突导致数据讹误
基础信息 主库: 数据库2 10.126.4.2 数据库3 10.126.4.3 1. 停止数据库3对外服务 防止同步过程中服务通过数据库3写入数据 $ firewall-cmd --remove-port=3306/tcp $ firewall-cmd --add-rich-rule= 切断数据库2、3的同步 两台主机分别执行 mysql>change master to master_host='' mysql>stop slave; mysql>reset slave; 4. 清空数据库3 清空数据文件 $ rm /var/lib/mysql $ mv /db/mysql /db/mysql-190708 $ mkdir /db/mysql $ ln -s /db/mysql 数据库2配置主库信息 查询数据库3的 master_log_file 和 master_log_pos 10.126.4.3 show master status; 10.126.4.2 mysql >
先说下主从复制 或者叫主从同步。 而主主同步就是两个主从同步,没什么多的东西 首先先修改下my.cnf配置文件 1. 主数据库 vi /etc/my.cnf 在 [mysqld] 下面添加3行 # 修改,必须保证每个服务器不一样。 这可能和循环同步有关。 从数据库 vi /etc/my.cnf 在 [mysqld] 下面修改1行,添加3行 # 修改,必须保证每个服务器不一样。 这可能和循环同步有关。 主主同步 主主同步就是两台服务器互为主从,把上面的 主从配置 和 命令 反过来再做一遍 就可以了。
,通过配置主主同步的方式将主节点的数据同步至备节点。 fayson.com -b "dc=fayson,dc=com" -D "cn=Manager,dc=fayson,dc=com" -W |grep dn [yapqcr6pp0.jpeg] 这里可以看到主节点的数据已同步到备节点的 OpenLDAP数据库了。 5.主主同步验证 ---- 通过如下步骤来进行验证: 在主节点的OpenLDAP服务上导入faysonadd用户和用户组 在备节点的OpenLDAP服务上查找faysonadd用户是否同步 在备节点的OpenLDAP 到此为止已完成了OpenLDAP服务的主主同步。 6.总结 ---- 使用MorrorMode实现OpenLDAP主主同步需要注意配置文件中的ServerID两个节点不能相同。
,如何监控服务之间主主同步状态,通过监控及时发现主主同步失败问题。 测试环境 1.Redhat7.5 2.OpenLDAP版本为2.4.44 前置条件 1.OpenLDAP已实现主主同步 2 环境说明 1.OPenLDAP已实现了主主同步 [root@cdh01 ~]# : -v,-vv,-vvv:指定debug级别 -V: 输出脚本版本并退出 -h: 输出脚本的帮助说明并退出 -p: slave服务的端口号 -f: 输出deltatime数据 -U: LDAP Master 4 同步状态监控验证 本章节主要通过启用开启Slave节点的Firewall来模拟两个LDAP服务之间主主同步失败现象,然后通过check_ldap_syncrepl_status.pl脚本能够监控到主主同步失败问题 此时的Slave节点fayson用户和组并未同步删除 ? 3.上面模拟了主主同步状态异常后,关闭Slave节点的防火墙执行监控脚本检查同步状态 .
ETL在主数据同步中的优势面对主数据同步的迫切需求,ETL(Extract, Transform, Load)技术因其灵活性、可扩展性和高效性,成为众多企业的首选方案。 (主数据同步关系)核心优势包括:灵活性:ETL可根据企业特定的业务逻辑和数据结构,定制化开发数据同步流程。可扩展性:随着企业业务的发展和数据量的增长,ETL可以轻松扩展处理能力和同步范围。 监控与追溯:ETL作业具备完善的监控和日志记录功能,便于问题排查和数据审计。3. ETL主数据同步的详细流程3.1 数据抽取识别数据源:明确主数据所在的系统及数据库。 实施ETL主数据同步的关键点数据模型设计:基于业务需求构建清晰的数据模型,明确主数据的属性和关系。数据质量保障:制定严格的数据质量规则,并在ETL流程中嵌入数据校验和修复步骤。 案例二:产品主数据同步场景:将PLM系统中的产品数据同步至电商平台和ERP系统,促进产品信息在生产、销售和物流环节中的一致流通。
相信经常使用数据库的各位都了解主、备数据库。在我们公司的智慧航道建设项目中,为保障航道监测数据(如水位、流速、船舶动态等)在主备数据库间的实时一致性,一般会需要开发定时同步任务。 具体需求为:每天凌晨2点将MySQL主库(A库)的航道监测表(channel_monitor)数据同步至PostgreSQL备库(B库),同步时忽略B库已存在的记录(基于monitor_id判断),并记录同步日志 一、使用工具与场景AI工具:腾讯CodeBuddy技术栈:Spring Boot 3.2 + MySQL 8.0 + PostgreSQL 15使用场景:后端定时任务开发,涉及多数据源配置、数据同步逻辑及事务管理二 logRepository.save(log); }}三、效果验证与性能分析功能验证定时任务每日2点自动触发日志示例:2024-05-20 02:00:00 INFO 成功127条,失败0条数据一致性主备库 monitor_id唯一性约束生效性能指标同步10万条数据耗时8分23秒事务回滚测试:异常时无脏数据产生四、经验总结最后总结一下。
一、主备数据库搭建1.1 环境准备在搭建主备数据库之前,需要准备至少两台服务器,一台作为主数据库,另一台作为备数据库。这两台服务器可以是物理机,也可以是虚拟机。 创建用户和权限:在主数据库上创建用于数据同步的用户,并赋予相应的权限。1.2 配置主数据库在主数据库上,需要开启二进制日志(Binary Log),这是MySQL复制的基础。 二、数据同步方法分析2.1 异步复制异步复制是MySQL默认的复制类型,主数据库不需要等待备数据库的确认,这可以提高主数据库的写入性能,但可能会在主数据库故障时丢失数据。 2.2 半同步复制半同步复制(semi-synchronous replication)确保至少有一个备数据库确认了事务的写入。这提高了数据的安全性,但可能会降低写入性能。 2.3 强同步复制强同步复制(fully synchronous replication)确保所有备数据库都确认了事务的写入。这是最安全的数据复制方式,但会严重影响写入性能。
刚刚抽空做了一下MYSQL 的主主同步。 把步骤写下来,至于会出现的什么问题,以后随时更新。这里我同步的数据库是TEST 1、环境描述。 从而保证了数据的同步 。 4、重新启动MYSQL服务器。 ,保持两个机器的数据一致。 8、释放掉各自的锁,然后进行插数据测试。 具体文章见: http://dev.mysql.com/tech-resources/articles/advanced-mysql-replication.html 在邮件列表中看到有人讨论在线同步与忽略库与表的问题
4)Mysql复制的模式 1--主从复制:主库授权从库远程连接,读取binlog日志并更新到本地数据库的过程;主库写数据后,从库会自动同步过来(从库跟着主库变); 2--主主复制:主从相互授权连接 需要限定同步哪些数据库,有3个思路: 1)在执行grant授权的时候就限定数据库; 2)在主服务器上限定binlog_do_db = 数据库名; 3)主服务器上不限定数据库,在从服务器上限定replicate-do-db = 数据库名; 如果想实现 主-从(主)-从 这样的链条式结构,需要设置: log-slave-updates 只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器。 而从库只能读不能写,一旦从库有写入数据,就会造成主从数据不一致! 下面就说下Mysql主主复制环境,在slave上更新数据时,master也能自动同步过来。 ;待主主同步环境部署后再解锁;锁住后,就不能往表里写数据,但是重启mysql服务后就会自动解锁!
mysql8.0已经发布几年了,现在还有使用mysql5.6的情况,今天我们来温故一下mysql5.6的双主配置, 配置 MySQL 5.6 双主同步的步骤如下: 请注意,你需要在两个服务器上都执行这些步骤 replicate-do-db=your_database auto_increment_increment = 2 auto_increment_offset = 2 注意:你应该将 your_database 替换为你想要同步的数据库名称 以上就是配置 MySQL 5.6 双主同步的步骤。请注意,双主同步需要小心处理,因为它可能导致数据不一致的问题,如双重写入。因此,建议只在熟悉这个概念的情况下使用它,并确保有恰当的冲突解决策略。
主主同步配置 4.1. auto_increment_increment auto_increment_offset 和auto_increment_offset一起用于主主同步,用来错开自增, 上述配置会导致同步所有的数据库,借助下列配置项也可以选择性的同步或不同步: 配置项 配置项说明 binlog-do-db=test1 binlog-do-db=test2 表示只同步数据库test1和test2,如果还想同步test3,只需要新增一行:binlog-do-db=test3即可 binlog-ignore-db=db1 binlog-ignore-db =db2 表示不同步数据库db1和db2,如果还有db3不想同步,新增一行:binlog-ignore-db=db3即可 相关配置项(对于主从同步,只需要在从上配置):replicate-do-db