数据库主从复制

注意:mysql版本最好一致,否则可能存在二进制文件识别出错

第一步:修改配置文件 windows环境 修改my.ini (在mysql安装目录下)linux环境 /etc/my.cnf 修改完需要重启服务器
在[mysqld] 下添加
必须 1.server-id=xxx ##数据库唯一标识,必须不同
必须 2.log-bin=文件名 ##表示打开binlog,打开该选项才可以通过I/O写到Slave的relay-log,也是可以进行replication的前提;
3.binlog-do-db=xxx ##表示需要记录二进制日志的数据库。如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
4.binlog-ignore-db=xxx ##表示不需要记录二进制日志的数据库。如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
必须 5.replicate-do-db ##表示需要同步的数据库,如果有多个数据库可用逗号分隔,或者使用多个replicate-do-db选项
6.replicate-ignore-db ##表示不需要同步的数据库,如果有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db=MySQL选项
7.log-slave-updates=1或0,默认关闭 ##配置从库上的更新操作是否写入二进制文件,如果这台从库,还要做其他从库的主库,那么就需要打这个参数,以便从库的从库能够进行日志同步
8.slave-skip-errors=[err1,err2,...all] ##在复制过程,由于各种原因导致binlog中的sql出错,默认情况下,从库会停止复制,要用户介入。
##可以设置slave-skip-errors来定义错误号,如果复制过程中遇到的错误号是定义的错误号,便可以跳过。
##如果从库是用来做备份,设置这个参数会存在数据不一致,不要使用。如果是分担主库的查询压力,可以考虑。
9.sync_binlog ##sync_binlog的默认值是0,这种模式下,MySQL不会同步到磁盘中去。这样的话,MySQL依赖操作系统来刷新二进制日志binary log,
##就像操作系统刷其他文件的机制一样。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能binlog中最后的语句丢失了。
##要想防止这种情况,你可以使用sync_binlog全局变量,使binlog在每N次binlog写入后与硬盘同步。
##当sync_binlog变量设置为1是最安全的,因为在crash崩溃的情况下,你的二进制日志binary log只有可能丢失最多一个语句或者一个事务。
##但是,这也是最慢的一种方式(除非磁盘有使用带蓄电池后备电源的缓存cache,使得同步到磁盘的操作非常快)。
##即使sync_binlog设置为1,出现崩溃时,也有可能表内容和binlog内容之间存在不一致性。
##如果使用InnoDB表,MySQL服务器处理COMMIT语句,它将整个事务写入binlog并将事务提交到InnoDB中。
##如果在两次操作之间出现崩溃,重启时,事务被InnoDB回滚,但仍然存在binlog中。
##可以用–innodb-safe-binlog选项来增加InnoDB表内容和binlog之间的一致性。
##(注释:在MySQL 5.1中不需要–innodb-safe-binlog;由于引入了XA事务支持,该选项作废了),
##该选项可以提供更大程度的安全,使每个事务的 binlog(sync_binlog =1)和(默认情况为真)InnoDB日志与硬盘同步,
##该选项的效果是崩溃后重启时,在滚回事务后,MySQL服务器从binlog剪切回滚的 InnoDB事务。
##这样可以确保binlog反馈InnoDB表的确切数据等,并使从服务器保持与主服务器保持同步(不接收回滚的语句)。
10.auto_increment_offset ##增量初值
11.auto_increment_increment ##增量值
##9和10组合使用解决同步过程中自增主键冲突
12.slave_net_timeout ##单位为秒 默认设置为 3600秒 减少因网络原因造成的延迟

第二步:设置主服务器slave (注:在不需要双机备份的情况下,不需要设置slave,只需要从服务器设置slave)
1.登陆mysql mysql -u user -p dbname
附加:查看master信息
show master status
2.停止同步传输过程 stop slave;
3.设置slave
3.1
change master to
master_host=‘192.168.1.118‘, ##主机地址 (必须)
master_user=‘root‘, ##主机拥有同步权限的用户 (必须)
master_password=‘12345‘, ##密码 (必须)
master_log_file=‘mysql-bin.000023‘, ##主服务器上查询的二进制文件名称 对应file (一般从服务器会从主服务器直接读取,在同步过程出现异常或者中断需要人为干预,需要记录该值)
master_log_pos=107, ##主服务器文件记录位置 对应position (一般从服务器会从主服务器直接读取,在同步过程出现异常或者中断需要人为干预,需要记录该值)
master-connect-retry=60; ##服务器重连时间默认60秒 减少因网络原因造成的延迟
4.启动slave
start slave;
5.查看slave 状态(show slave status\G;)
slave状态中
Slave_IO_Running: Yes ##说明可以正常进行IO操作---与主机进行通信
Slave_SQL_Running: Yes ##说明可以正常执行sql 语句 ---负责自身sql操作
注意:只有同时为Yes时,才可正常进行主从复制
解决方案:IO错误,要检查主从服务器之间的通信状态以及数据库之间通信状态
SQL错误, 1.检查主机processlist show prcesslist查看是否有挂起的任务
2.show slave status\G; 查看错误情况 需要跳过错误继续执行同步,
先关闭slave,然后 set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;跳过错误,再次启动slave,(一般是)
3.重新设置主从
3.1 进入主库锁表 FLUSH TABLES WITH READ LOCK;
3.2 导出要备份的数据库 mysqldump -u root -p backuptest>bacuptest.sql
3.3 进入从服务器新建数据库 导入数据 source bacuptest.sql;
3.4 停止slave stop slave,
3.5 从主服务器重新获取二进制文件和位置信息(设置master,同3.1 二进制文件名称和记录位置必须)
3.6 启动slave;

第三步:设置从服务器slave
1、如果需要实现双机互为备份,需要和主服务器同样的设置
2、问题解决同第二步

Mysql数据库主从复制

延迟
一般通过架构调优解决
比如主库是写,对数据安全性较高,sync_binlog=1,innodb_flush_log_at_trx_commit = 1
从库是读,sync_binlog=0

读写分离
注:一般做读写分离需要主库和从库有一个共有的用户

1、框架实现后台数据库切换
2、mysql_proxy(lua脚本实现,lua脚本配置复杂)
3、Amoeba for MySQL(使用较方便,但不支持事务和存储过程)

时间: 2024-10-11 01:23:58

数据库主从复制的相关文章

怎样解决MySQL数据库主从复制延迟的问题?

1.网络超时 2.慢查询 3.流量 问题一:主库的从库太多,导致复制延迟从库数据以3-5个为宜,要复制的从节点数量过多,会导致复制延迟问题二:从库硬件比主库差,导致复制延迟查看Master和Slave的系统配置,可能会因为机器配置不当,包括磁盘I/O.CPU.内存等各方面因素造成复制的延迟.一般发生在高并发大数据量写入场景中问题三:慢SQL语句过多假如一条SQL语句执行时间是20秒,那么从执行完毕到从库上能查到数据至少需要20秒,这样就延迟20秒了.一般要把SQL语句的优化作为常规工作不断地进行

mysql数据库主从复制部署笔记

数据库主从复制原理:数据库的主从复制就是从master数据库复制到slave数据库,在master与slave之间实现整个复制需要三个线程来完成,其中两个在slave端一个在master端.在master端必须打开binlog功能,因为从数据库需要获得主数据的完整的操作日志然后再自身上顺序的执行日志中的各种操作. 主要步骤:1.将slave的io线程连上master,请求获得指定日志文件的指定位置之后的操作日志的内容:2.master获得slave的io线程请求后,将请求中读取到的指定日志的指定

web服务文件更新自动同步、数据库主从复制、shell脚本实现网站代码备份和mysql备份

基搭建LAMP环境,并实践基于DNS做基于域名的虚拟主机中的环境,重新搭建一个同样的环境 要求: a)实现web服务文件更新的自动同步到另一台机器上 b)数据库实现主从复制 c)通过shell脚本实现网站源代码备份和mysql备份,备份策略包括全量备份.增量备份.差异备份 a,实现web服务文件更新的自动同步到另一台机器上: 1,在httpd服务器上建立基于FQDN的两个虚拟web站点,并创建相关目录. 2,修改测试windows主机的hosts文件,并编辑两个虚拟web站点对应的目录下的ind

MariaDB数据库主从复制、双主复制、半同步复制、基于SSL的安全复制实现及其功能特性介绍

一.复制概述 MariaDB/MySQL内建的复制功能是构建大型,高性能应用程序的基础.将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将MySQL的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位

Mongodb数据库学习系列————(一)Mongodb数据库主从复制的搭建

Mongodb数据库主从复制的搭建 Writeby:lipeng                                    date:2014-10-22 最近项目上用到了位置查询,在网上看到mongodb支持距离的查询,所以就学习了一下mongodb,在学习中总结了一下遇到的问题和解决的办法,以及mongodb的安装,主从复制,集群和在.NET应用程序中的操作,记录下来方便自己以后用得到,同时也希望能帮助那些初学mongodb的人,本人由于刚学mongodb,出现问题望大家提醒出来

怎样解决MySQL数据库主从复制延迟的问题

像Facebook.开心001.人人网.优酷.豆瓣.淘宝等高流量.高并发的网站,单点数据库很难支撑得住,WEB2.0类型的网站中使用MySQL的居多,要么用MySQL自带的MySQL NDB Cluster(MySQL5.0及以上版本支持MySQL NDB Cluster功能),或者用MySQL自带的分区功能(MySQL5.1及以上版本支持分区功能),我所知道的使用这两种方案的很少,一般使用主从复制,再加上MySQL Proxy实现负载均衡.读写分离等功能,在使用主从复制的基础上,再使用垂直切分

Mysql实现数据库主从复制、主主复制、半同步复制

--------------Mysql实现数据库主从复制架构---------------- 一.环境准备: centos系统服务器2台.一台用户做Mysql主服务器,一台用于做Mysql从服务器,配置好yum源.防火墙关闭.各节点时钟服务同步.各节点之间可以通过主机名互相通信 192.168.41.145   master 192.168.41.137  slave 二.准备步骤: 1.iptables -F && setenforce 清空防火墙策略,关闭selinux 2.①vim

项目实战7—Mysql实现企业级数据库主从复制架构实战

Mysql实现企业级数据库主从复制架构实战 环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司也因此对于数据库的性能和可靠性提出更高要求. 要求对数据库进行改造,使其承载力进行提升,故障修复时间减少,有没有能实现的方案呢? Mysql实现数据库主从复制实战架构及其原理 1.实验架构及其原理 数据库高可用架构分为 主从:一主一从,一主多从,一主从

Mysql实现企业级数据库主从复制架构实战

Mysql实现企业级数据库主从复制架构实战