mysql实例日志报错自动发送邮件功能

本文介绍了一个用于监测MySQL性能状态的脚本,包括设置环境、发送慢日志报告、监控日志变化并记录当前时间到日志文件,最后通过邮件通知DBA关于错误日志的变化。
#!/bin/bash
##monitoring the mysql performance status ##
##created by jacobxian 20150114##
##script in /home/mysql/scripts/error_alert/error_alert.sh  ##
##WORKPATH="/home/mysql/scripts/error_alert"
##mkdir -p ${WORKPATH}
#set -x


##start set environment
WORKPATH="/home/mysql/scripts/error_alert"
LOGPATH="/home/mysqlapp/mysqllog/logfile"
DATE=`date +"%Y%m%d"`


MAIL_LIST="xianyezhao@richinfo.cn"
MAIL_BIN="/home/crond/bsmtp"
MAIL_IP="192.168.219.34"
##end set environment


##sent mail slow log report for last day
my_sentmail()
{
   echo " " | ${MAIL_BIN} -f `hostname`@139.com -h smtp.api.localdomain -s "${MAIL_IP}:Mysql Error Log Report "  ${MAIL_LIST}  < ${WORKPATH}/report/report_error_tail_${DATE}.log
}
##end sent mail slow log report for last day


##start monitor
cd ${LOGPATH}
ERROR_TIME=`stat mysql-err.log|grep Change`
ERROR_LASTTIME=`cat ${WORKPATH}/mysql_err_change_lasttime.log`
if [ "${ERROR_TIME}" != "${ERROR_LASTTIME}" ] ; then
   tail -100 mysql-err.log >> ${WORKPATH}/report/report_error_tail_${DATE}.log
fi


##log current time to the log file
stat mysql-err.log|grep Change>${WORKPATH}/mysql_err_change_lasttime.log


##send error alert mail to dba
my_sentmail


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29114615/viewspace-1424391/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29114615/viewspace-1424391/

### MySQL Group Replication启动失败且无错误日志输出时的排查方法 MySQL Group Replication 在启动失败时通常会在错误日志中记录相关信息,但如果未输出任何日志,可能是由于配置或插件加载异常导致日志机制未正常工作,或者错误未被触发到日志系统。在这种情况下,可以通过以下方式排查问题: #### 1. 确认插件是否已正确加载 在 MySQL 启动时,需确保 `group_replication.so` 插件已被正确加载。可以通过以下语句检查插件状态: ```sql SELECT PLUGIN_NAME, PLUGIN_STATUS FROM information_schema.PLUGINS WHERE PLUGIN_NAME LIKE 'group_replication'; ``` 如果插件状态为 `ACTIVE`,则说明插件已加载。否则需检查配置文件中是否已正确配置 `plugin_load_add='group_replication.so'` 并确保该插件文件存在于系统路径中[^3]。 #### 2. 检查 MySQL 错误日志路径配置 若未看到任何日志输出,可能是错误日志路径未配置或日志文件未生成。检查 MySQL 配置文件中的 `log_error` 参数,确认错误日志路径是否正确设置。例如: ```ini log_error=/var/log/mysql/error.log ``` 若未设置该参数,MySQL 可能将错误日志输出到标准输出或未写入文件中。建议显式配置错误日志路径以确保日志可被追踪[^4]。 #### 3. 检查 MySQL 启动是否成功 在尝试启动组复制前,应确保 MySQL 实例本身已正常启动。可以通过以下命令检查 MySQL 是否处于运行状态: ```bash systemctl status mysql ``` 若 MySQL 未成功启动,则组复制无法正常执行,且可能不会生成相关日志。此时应优先排查 MySQL 启动失败的原因。 #### 4. 检查组复制配置是否完整 组复制依赖多个关键参数,如 `server_id`、`gtid_mode`、`log_bin`、`binlog_format`、`server_uuid`、`group_replication_group_name`、`group_replication_local_address`、`group_replication_group_seeds` 等。若任一参数缺失或配置错误,可能导致组复制未能初始化,从而不生成日志。例如: ```ini server_id=1 gtid_mode=ON enforce_gtid_consistency=ON log_bin=mysql-bin log_slave_updates=ON binlog_format=ROW group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" group_replication_start_on_boot=OFF group_replication_local_address= "node1:33061" group_replication_group_seeds= "node1:33061,node2:33061,node3:33061" ``` 确保所有节点的 `server_id` 和 `server_uuid` 唯一,并且 `group_replication_group_seeds` 包含所有节点的地址和端口[^4]。 #### 5. 检查引导节点是否已正确启动 组复制需由一个引导节点初始化组,其他节点加入该组。引导节点需在启动组复制前设置: ```sql SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF; ``` 若未正确设置引导节点或多个节点同时尝试引导组,可能导致组复制无法建立,且不输出日志。其他节点只需执行 `START GROUP_REPLICATION;`[^1]。 #### 6. 检查 SELinux 和防火墙设置 SELinux 或防火墙可能阻止 MySQL 绑定到指定端口(如 33061),从而导致组复制未启动,且未生成日志。可通过以下命令查看 SELinux 是否允许 MySQL 使用该端口: ```bash semanage port -l | grep mysqld ``` 若未包含 33061,需添加: ```bash semanage port -a -t mysqld_port_t -p tcp 33061 ``` 同时检查防火墙是否允许该端口通信: ```bash firewall-cmd --list-all | grep 33061 ``` 若未开放,需添加规则: ```bash firewall-cmd --permanent --add-port=33061/tcp firewall-cmd --reload ``` #### 7. 检查网络连接和 DNS 解析 组复制依赖于节点之间的网络通信,若节点名称无法解析或网络不通,可能导致组复制失败且未输出日志。确保所有节点能通过 `group_replication_group_seeds` 中的主机名解析到 IP 地址,并可相互访问指定端口。 #### 8. 使用调试模式或增加日志级别 若仍无法定位问题,可尝试启用 MySQL 的调试模式或增加日志级别,以获取更详细的运行信息。例如在配置文件中添加: ```ini log_output=FILE general_log=1 general_log_file=/var/log/mysql/general.log ``` 这将记录所有 SQL 操作,有助于分析组复制启动失败的具体原因。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值