前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最近的几个技术问题总结和答疑 (r8笔记第19天)

最近的几个技术问题总结和答疑 (r8笔记第19天)

作者头像
jeanron100
发布2018-03-19 11:59:02
6490
发布2018-03-19 11:59:02
举报

笔记写了不少,有时候有的朋友问我几个关键字,我就会从脑海里进行搜索,凡是写过的,搜索一下总能找到,帮助了别人,提高了自己,何乐而不为。 但是笔记写了很多,如果不加以改进,那么进步还是很小的,尤其比较怕的就是如果写出了问题的解决方案,但是这个解决方案是非主流的方式,可能有一 些潜在风险的,如果误导了读者,那就是罪过了。所以有时候想集中纠正一下。而且有时候看看以前写的文章,有时候会发现有一些分析思路可能在经历了大批量的 故障处理之后,思路可能会更开阔,这些其实也可以改进改进。 写笔记能坚持到现在不容易,让我的笔记更有意义,帮助到别人,别误导人,这是我的初衷。 首先我准备先来做一些笔记的改进。 运维平台的建设思考-元数据管理(四) 这篇有些朋友说很实用,不过这些定制脚本的优点还在于可以改进完善,所以在这之后继续改进,发现了几个小问题。一并列出来。 对于磁盘空间的使用情况的分析 原来的脚本内容为: df -hT|egrep -v 'Filesystem|/dev/shm'|while read line; do echo -e "`echo $line|awk '{print $7}'`:`echo $line|awk '{print $5}'`:`echo $line|awk '{print $6}'`"; done > /tmp/tmpdisk cat /tmp/tmpdisk|while read line do if [ `echo $line|awk -F':' '{print $3}'|sed 's/%//g'` -lt 85 ] ; then tmpline=`echo $line|sed 's/\///g'` sed -i "/$tmpline/d" /tmp/tmpdisk fi done if [ -s /tmp/tmpdisk ] ; then DISK_STAT=`cat /tmp/tmpdisk|sed -e ":a;N;s/\n/,/;ta"` else DISK_STAT='OK' fi rm -f /tmp/tmpdisk 但是在大批量的检测中,发现还是有一些问题。对于一些分区,如果名字长一些,会串行,所以可以使用df -hTP来显示到一行中 在显示结果中,如果某个分区名过长,还有特殊字符,会有一些处理上的不足,比如下面这个是原先脚本过滤后的结果。 /opt:109G:86%,/home/oracle/backup_stage/192.168.1.24_extradb:1.1T:71% 按照预期,应该只显示/opt:109G 即可。所以这个部分做了改进。 改进之后的脚本内容为: function check_df { df -hTP|egrep -v 'Filesystem|/dev/shm'|while read line; do echo -e "`echo $line|awk '{print $7}'`:`echo $line|awk '{print $5}'`:`echo $line|awk '{print $6}'`"; done > /tmp/tmpdisk cat /tmp/tmpdisk|while read line do if [ `echo $line|awk -F':' '{print $3}'|sed 's/%//g'` -gt 85 ] ; then tmp_var=$line tmpline=$line echo $tmpline fi done |sed -e ":a;N;s/\n/,/;ta" } DISK_STAT=`check_df` 在原来的基础上,增加了数据库版本的统计,这个思路不能按照ORACLE_HOME的来算,我的一个切入点就是以sqlplus -v的结果为准,检查配置的变量的方式还是有些不妥当。 得到oracle版本的思路是检查/etc/oratab中,得到ORACLE_HOME的值,然后调用sqlplus -v来得到最终的版本。 export ORACLE_HOME=`cat /etc/oratab | tail -1 | awk -F: '{print $2}'` ORA_VER=`$ORACLE_HOME/bin/sqlplus -v|awk '{print $3}'` 然后再说说另外一篇笔记。 MySQL迁移文件的小问题 对于文章中的从库文件迁移,当时是使用reset slave的方式解决的,但是也有一些朋友做了更多的建议,启荣兄给了我一个解决的方向,对于这类的文件迁移,其实大可不必使用reset slave,这种方式还是有些太"暴力“,影响比较大。完全可以很优雅的完成。改改配置,重启一下即可。 停库之后修改my.cnf,修改里面相关的路径设置。 # /etc/init.d/mysql stop Shutting down MySQL (Percona Server)... SUCCESS! vi /etc/my.cnf 然后迁移文件,操作系统命令级即可搞定。 # mv mysql_test/* mysql_3306 启动数据库,当然这个时候肯定会报错。 # /etc/init.d/mysql start Starting MySQL (Percona Server)..... ERROR! The server quit without updating PID file (/U01/app/mysql_3306/mysql.pid). 主要原因是这个时候校验的是binlog的index文件,里面的路径对应不上,所以在日志里会提示找不到。修改一下即可。 # vi bin-index.index /U01/app/mysql_3306/mysql-bin.000001 /U01/app/mysql_3306/mysql-bin.000002 /U01/app/mysql_3306/mysql-bin.000003 /U01/app/mysql_3306/mysql-bin.000004 /U01/app/mysql_3306/mysql-bin.000005 /U01/app/mysql_3306/mysql-bin.000006 /U01/app/mysql_3306/mysql-bin.000007 /U01/app/mysql_3306/mysql-bin.000008 /U01/app/mysql_3306/mysql-bin.000009 修改之后再次启动就没有问题了。 # /etc/init.d/mysql start Starting MySQL (Percona Server)... SUCCESS! 这个时候启动slave还是会报错的 > start slave; ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository 而原因就在于relay-index.index和relay-log里面的文件路径对应不上。 错误日志大体是下面的样子: 2016-02-24 14:59:18 3962 [Note] Server socket created on IP: '::'. 2016-02-24 14:59:18 3962 [ERROR] /usr/sbin/mysqld: File '/U01/app/mysql_test/mysql-relay.000006' not found (Errcode: 2 - No such file or directory) 2016-02-24 14:59:18 3962 [ERROR] Failed to open log (file '/U01/app/mysql_test/mysql-relay.000006', errno 2) 2016-02-24 14:59:18 3962 [ERROR] Could not open log file 2016-02-24 14:59:18 3962 [ERROR] /usr/sbin/mysqld: File '/U01/app/mysql_test/mysql-relay.000005' not found (Errcode: 2 - No such file or directory) 2016-02-24 14:59:18 3962 [ERROR] Failed to open log (file '/U01/app/mysql_test/mysql-relay.000005', errno 2) 2016-02-24 14:59:18 3962 [ERROR] Could not open log file 2016-02-24 14:59:18 3962 [ERROR] /usr/sbin/mysqld: File '/U01/app/mysql_test/mysql-relay.000006' not found (Errcode: 2 - No such file or directory) 2016-02-24 14:59:18 3962 [ERROR] Failed to open log (file '/U01/app/mysql_test/mysql-relay.000006', errno 2) 2016-02-24 14:59:18 3962 [ERROR] Failed to open the relay log '/U01/app/mysql_test/mysql-relay.000006' (relay_log_pos 2599866). 当然可以手工修改,但是实际上是没有起作用的 # vi relay-index.index /U01/app/mysql_test/mysql-relay.000005 /U01/app/mysql_test/mysql-relay.000006 /U01/app/mysql_3306/mysql-relay.000007 > start slave; ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository mob_vesta_jingmao [(none)] [15:00:47]> 需要重启才可以。所以由此可以得出,需要同时修改binlog和relay的设置,一次启动就可以搞定了。 修改完成之后,一次重启即可搞定。 # /etc/init.d/mysql start Starting MySQL (Percona Server)... SUCCESS! > start slave; Query OK, 0 rows affected, 1 warning (0.00 sec)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档