MySQL主从复制同步延迟问题

背景

最近发现其中一套生产环境的MySQL集群主从数据同步延迟问题严重,从库积累了很多中继日志,导致分配数据库磁盘使用率超过90%告警。这问题从排查到处理过程耗费了很长时间,在这里记录下整个处理过程,希望能给其他遇到此类问题的朋友一点帮助。
先介绍下环境情况,这套MySQL集群使用的k8s容器化部署,使用的三节点MySQL MGR复制模式,数据存储使用的ceph rbd块存储
– MySQL版本:8.0.19
– Ceph版本:12.2.10(Luminous)

排查

最早发现主从数据库之间很多表数据不同步,MGR集群状态正常

检查操作系统负载情况

从库MySQL磁盘挂载(rbd0)IO情况,看到rbd0磁盘%util超过90%一直处在繁忙状态

查看防火墙规则,没什么限制

通过主库建立测试库操作来验证主从同步延迟情况,在test测试库下删除t2

从库查看test库下表情况,半小时过去后从库t2表依然未删除,从库事务执行差距很大,查询过事务队列在堆积

中继日志积压一大堆未完成,导致从库磁盘使用率超过90%爆满

继续阅读“MySQL主从复制同步延迟问题”

MySQL数据库备份与还原

养成对数据经常做备份是平时运维中一种良好的习惯,良好的数据备份习惯或许可以成为你生产工作中紧急情况的救命稻草。记录下工作中收集整理的数据库备份与还原的操作,这里介绍两种针对mysql数据库的备份还原方法。

mysqldump

mysqldump是mysql数据库官方自带对数据库进行备份还原的工具。

优点

数据库自带不用单独找其他工具,另外因为是数据库自带工具,对数据库本身兼容性更好,特别在跨数据库版本迁移备份还原的时候推荐使用官方的mysqldump数据备份个工具。

缺点

说了优点也说下缺点,mysqldump在进行数据备份还原的时候会进行锁表操作,操作结束后又对表进行解锁。如果需要备份的数据库数据比较小还好,数据量比较大锁表时间太长对数据库的生产访问使用也存在影响。

mysqldump备份

[root@10 bin]# ./mysqldump -ugray -p -P 3308 --databases csm > /home/gray/dbbak/csm_20180118.sql

-u表示数据库用户名

-p表示数据库密码

-P表示数据库访问端口

–databases表示数据库,后面跟参数csm表示备份名叫csm的数据库

>表示输出备份数据到备份路径/home/gray/dbbak/csm_20180118.sql

继续阅读“MySQL数据库备份与还原”

VMware虚拟机快照对MySQL数据库备份性能的影响

今天在整理之前系统异常事故问题时想记录下当时事故发生的情况跟解决思路。
先介绍下生产环境情况:

  • 服务器:VMware虚拟机(平台在管理,版本没具体问)
  • 操作系统:RHEL 6.3 x86_64
  • 数据库:MySQL V5.7.26(主主同步)
  • 数据库备份工具:Percona XtraBackup (服务器已关机,版本不记得)

问题现象:

早上来上班是用户登录使用系统的高峰期,上班后不久就接到用户报问题反馈聊天消息发送后窗口显示空白

思路:

根据用户反馈在本地验证复现问题,验证问题确实存在查看监控系统告警信息,根据监控告警信息去检查具体服务运行情况。当检查服务运行情况时发现所有服务均运行正常,再查看监控系统告警开始解除,多人客户端发送消息验证也恢复正常。当时监控看到的告警是来自数据库服务器,为什么去检查数据库服务的时候看着运行也正常呢?又查看数据库服务器负载情况,相比平时上班高峰期负载明显更高,数据库服务器只部署了一个数据库服务,那就是找出引起数据库负载升高的原因。

继续阅读“VMware虚拟机快照对MySQL数据库备份性能的影响”

MySQL主从复制错误处理

最近服务器出现点异常,MySQL主数据库卡死导致业务受到影响,切换至从数据库后很快业务恢复正常。接着出现复制线程告警Slave_SQL_Running: No ,之前数据库服务器异常也出现过主从复制相同问题,记录下其中处理办法。

mysql> STOP SLAVE;

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;

mysql> START SLAVE;

思路就是停止复制,跳过当前错误点再启动复制。

mysql> show slave status\G;
Slave_SQL_Running: Yes
Slave_IO_Running: Yes

查看复制状态,两个都显示为Yes后正常。有时候多次跳过当前错误点后还是显示 Slave_SQL_Running: No ,那就需要考虑重建主从复制关系了。

MySQL数据库版本升级

生产环境数据库使用过程中出现过几次事故,查看日志因为版本缺陷引起,最近打算升级数据库版本,由于动到数据库的东西,升级失败影响会很大,先在测试环境做升级测试。

环境

系统:Red Hat Enterprise Linux Server release 6.5 (Santiago)

数据库:MySQL-5.7.14

由于下载的二进制压缩包方式安装,自己用的Ubuntu一直apt-get方式安装升级,一直没试过二进制压缩包版本升级,网上搜了一通升级步骤,小版本可以采取本地直接升级方式。

官网下载安装包mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

继续阅读“MySQL数据库版本升级”

MySQL中文字符乱码解决

当你从Windows转到Linux后,比较麻烦的一个问题就是中文字符乱码。出现乱码一般都是因为编码解析不一致,比如:你的Windows字符默认的是中文GBK字符模式,Linux下默认的是UTF-8字符模式,解决办法就是统一字符编码,一般选择UTF-8中英文通吃。说一下Linux下面MySQL出现的中文乱码解决办法……

MySQL的字符集支持(Character Set Support)有两个方面:
字符集(Character set) 和排序方式 (Collation)。
对于字符集的支持细化到四个层次 :
服务器(server) ,数据库 (database),数据表(table) 和连接(connection)。

继续阅读“MySQL中文字符乱码解决”