当主库发生宕机,从库如何接管主库

当主库发生宕机,从库如何接管主库

1、主库崩溃,日志不在情况(会丢数据)

查看从库已经同步到哪了,①确定数据丢失的时间范围,②确定从库的中继日志是否被SQL_thread进程解析完(即传输过来的中断日志是否在从库上重放完)。

1.1、如何确定数据丢失的时间范围

登录从库服务器,进入mysql数据库,执行以下命令,查看相关的参数:

mysql> show slave status\G

Master_Log_File            表示IO thread读取到的binlog日志文件名

Read_Master_Log_Pos        IOthread读取到的binlog日志文件位置

Relay_Log_File              slave 在本地缓存的relay 日志的文件名

Relay_Log_Pos              slave 在本地缓存的relay 日志的文件位置

Relay_Master_Log_File       SQL thread执行到master的binlog文件名

Exec_Master_Log_Pos        SQL thread 执行到master的binlog文件位置

Seconds_Behind_Master       SQL thread相对master的延迟时间(该值理论上显示了备库的延时,但由于各种各样的原因,并不总是准确的)

1)通过Master_Log_File 与Read_Master_Log_Pos可查看到从库服务器拉取主库服务器日志的文件名与位置。(从库 IO thread进程所做的事)

2)通过Relay_Log_File与Relay_Los_Pos两个值可以得到从库在本地缓存的中继日志文件名与文件位置。

3)通过Relay_Master_Log_File与Exec_Master_Log_Pos可以得到从库重放binlog到主库的哪个日志文件哪个位置。(从库 SQL thread进程所做的事)

1.1.1、查看从库同步的位置:

方法一:通过Master_Log_File 与Read_Master_Log_Pos可以确定从库只同步到主库的哪个日志文件哪个位置上。

方法二:查看master.info

1.1.2、查看从库同步的时间:

如果想要知道具体时间,可以查看中继日志

[[email protected]]# pwd

/var/lib/mysql

[[email protected]]# mysqlbinlog relay-bin.000005

查看内容如下:

1.2、确定从库的中继日志是否被sql_thread进程解析完

比较Master_Log_File与Relay_Master_Log_File是否相同,比较Read_Master_Log_Pos与Exec_Master_Log_Pos是否相同,如果两者都相同,那么代表解析完,如果有任何一个不一样,要等待sql_thread解析完。

1.3、如果从库之前有配置只读不写操作,还要作相关修改,操作请看下面的第4点。

2、主库崩溃,日志还在情况

关闭从库的io_thread,在主库上插入几条数据,(来模拟主库宕机,日志没有完全同步到从库的情况)。

从库操作:

mysql>stop slave io_thread;

QueryOK, 0 rows affected (0.06 sec)

主库操作,在apex_db库下插入以下数据:

mysql>insertinto apex_tb values(100,‘apexdb‘);

QueryOK, 1 row affected (0.10 sec)

mysql>insert into apex_tb values(101,‘apexdb‘);

QueryOK, 1 row affected (0.00 sec)

mysql>insert into apex_tb values(111,‘apexdb‘);

QueryOK, 1 row affected (0.06 sec)

mysql>insert into apex_tb values(121,‘apexdb‘);

QueryOK, 1 row affected (0.06 sec)

mysql>insert into apex_tb values(131,‘apexdb‘);

QueryOK, 1 row affected (0.06 sec)

2.1、如何判断从库是否与宕机的主库同步了

2.1.1、查看主库的最新日志,通过mysqlbinlog查看

# cd /var/lib/mysql

# mysqlbinlog master-bin.000003

内容如下:

可以看出主库的最新日志文件名是master-bin.000003,位置是2679。

2.1.2、登录从库,查看同步的位置

登录从库服务器,进入mysql数据库,执行以下命令,查看相关的参数:

mysql> show slave status\G

从以上参数可以看出,从库不同步。

2.1.3、登录主库,把主库的日志(master-bin.000003、master-bin.000004、……)传送给从库

# scpmaster-bin.000003  192.168.1.133:/tmp/

2.2、同步的情况,如果从库被设置为只读不写操作,要作相应的修改。

具体操作请看下面的第4点。

2.3、不同步的情况,从库操作

cd /tmp

mysqlbinlog--start-position=1530 master-bin.000003 > a.sql

mysql -uroot -papex_db <a.sql

登录数据库查看数据是否同步。

2.4、如果从库之前有配置只读不写操作,还要作相关修改,操作请看下面的第4点。

3、主库存活,从库怎么切换

3.1、查看主从库是否同步

3.1.1主库操作,查看写入日志的位置

3.1.2从库操作,查看从库同步的位置

从3.1.1与3.1.2数据可以看成主库的日志都已经传输到从库。

3.1.3、主库设置为只读操作

flush tableswith read lock;

3.1.4、断开主从库之间复制进程(IO_thread)

从库设置:

mysql>stopslave io_thread;

3.1.5、确定从库的中继日志是否被sql_thread进程解析完

比较Master_Log_File与Relay_Master_Log_File是否相同,比较Read_Master_Log_Pos与Exec_Master_Log_Pos是否相同,如果两者都相同,那么代表解析完,如果有任何一个不一样,要等待sql_thread解析完。

3.2、如果从库之前有配置只读不写操作,还要作相关修改,操作请看下面的第4点。

4、如果之前从库是只读不写操作,要进行以下操作:

4.1、使用set命令修改read_only参数的值,并修改从库的配置文件my.cnf,把read_only参数修改为read_only=0参数,实现不管是否有没有重启mysql服务,都能实现从库接管主库,对外提供读写操作。

4.1.1、临时修改法,实现不重启数据库,从库能提供读写

mysql>set global read_only=0;

4.1.2、修改配置文件read_only值为0,实现重启数据库,从库也能提供读写

#vi /usr/my.cnf

read_only=0

#service mysql restart

使用4.1.1与4.1.2实现不管是否有没有重启mysql服务,都能实现从库接管主库,对外提供读写操作。

4.2、授权,给从库授于update,delete,insert权限

#mysql –uroot –p

#grantupdate,delete,insert on *.* to [email protected]’%’ identified by ‘123456’;

#flushprivileges;

时间: 2024-12-29 07:15:32

当主库发生宕机,从库如何接管主库的相关文章

Mysql DBA 高级运维学习笔记-一主多从宕机从库切换主继续和从库同步过程

1.主库master 宕机 登录从库show processlist\G 看两个线程的更新状态 mysql> show processlist\G *************************** 1. row *************************** Id: 1 User: system user Host: db: NULL Command: Connect Time: 22997 State: Waiting for master to send event Info:

企业场景一主多从宕机从库宕机解决

解决思路: 1.登录从库 mysql -uroot -p123456  -S  /application/mysql-5.6.20/mysql.sock 2.停止slave 服务 mysql>stop slave; 3.在其他从库或者主库上完全备份同步的数据,并确定同步文件和同步位置 mysqldump -uroot -p123456 -S /application/mysql-5.6.20/mysql.sock  -A -B --events|gzip >/opt/rep.sql.gz 4.

Redis的KEYS命令引起RDS数据库雪崩,RDS发生两次宕机,造成几百万的资金损失

最近的互联网线上事故发生比较频繁,20180919顺丰发生了一起线上删库事件,在这里就不介绍了. 在这里讲述一下最近发生在我公司的事故,以及如何避免,并且如何处理优化. 间接原因还有很多,技术跟不上业务的发展,由每日百万量到千万级是一个大的跨进,公司对于系统优化的处理优先级不高,技术开发人手的短缺 第一次宕机20180913某个点,公司某服务化项目的RDS实例连接飙升,CPU升到100%,拒绝了其他应用的所有请求服务整个过程如下: 监控报警,显示RDS的CPU使用率达到80%以上,DBA介入,准

项目笔记-数据库进程宕机

简述情景: 1. 最开始出现邮件报警,db进程内存超过5G. 2. 1小时后,db宕机 3. 检查日志,发现mysql语句执行很慢.从18:30开始出现日志警告. 写了个程序测数据库执行速度.连本机数据库执行1000条语句,时间500ms左右.连其他机器数据库执行1000条语句,时间8s左右.服务器的数据库执行线程500ms执行一次,也就是说一旦一次的执行时间超过500ms,而且sql语句持续增加,服务器的执行就开始阻塞,导致内存开始累计.最终服务器由于内存过高,发生宕机. 临时解决方案: 由跨

游戏服务器宕机数据恢复

0.概述: 一般情况下,为了提高游戏速度,在线玩家的数据都会缓存在内存中.如果有数据更新的时候,只更新内存中的缓存数据,而不是直接更新数据库.缓存数据会定时写回到数据库中(比如:5分钟写入一次). 当服务器宕机后,从上次更新数据库到宕机前的所有数据更新都将丢失,即所谓的回档.这部分数据永远也找不回来了,通常都是服务器重启后给予所有玩家一定的补偿. 1.引子: MySQL在对数据表内容进行更新的时候,也不是直接更新数据表本身的数据,而是先写入日志,然后更新数据表本身的数据.日志文件由于是对文件的顺

服务器宕机是什么意思?为什么会宕机?

宕机是台湾计算机术语,在大陆就叫当机,就是通常说的死机,之所以叫宕机,应该是从英文音译过来的,即英文:"down",就直接叫宕机了.通常这个时候网站是不能访问的,也就是说服务器出了问题.1.由操作员意向操作的重启--用于维护或更新服务器.部署机房或特殊情况等等.2.非操作员本身意愿造成的重启--如供电(欠压,过载,波动).震动.硬件质量(热稳定性(热敏度)和抗干扰能力).资源冲突.DirectX文件的损坏.系统不完善或瓶颈问题.病毒.灰尘.散热不良--等等原因而造成重启.3..由于用户

一次慢日志撑爆磁盘导致的业务主库宕机引发的思考

在MySQL的日常维护中,我们总会遇到这样或那样的问题,对于那些经常发生且有处理经验的事故,不论是新手还是老司机都能在故障规定的容错时间内解决.而对于那些不常见.比较棘手的问题,新手上路可能就显得举足无措了,这个时候新手和老司机的差距就体现出来了.从知识储备还是工作经验,可能老司机比新手强一点,但如果一个新司机没有日志排错的意识,不具备日志排错的经验,那怎么能学会弯道超车.漂移的快感.我们知道数据库中有很多重要的日志,如错误日志error log.慢日志slow log.二进制日志binary

一个参数引起的mysql从库宕机血案

Part1:max_binlog_cache_size max_binlog_cache_size 表示的是binlog 能够使用的最大cache 内存大小 当我们执行多语句事务的时候 所有session的使用的内存超过max_binlog_cache_size的值时 就会报错:"Multi-statement transaction required more than 'max_binlog_cache_size' bytes ofstorage" Part2:为什么它能引起宕机

mysql主从架构-主从正常切换,主库宕机切换。

MySQL主从切换手册 Master-Slave架构 运维部 V1.0                   2016年      05月    24   日     正常切换 检查slave同步状态 1)在master执行:show processlist; 显示Master has sent all binlog to slave; waiting for binlog to be updated 2)在slave执行:show processlist: 显示Slave has read al