HeartBeat启动关闭mysqld服务的脚本修改

合集下载

CentOS7下mysqld服务启动失败终极解决方案

CentOS7下mysqld服务启动失败终极解决方案

CentOS7下mysqld服务启动失败终极解决⽅案启动mysqld服务失败,报错如下:[root@LCM01GCM01 ~]# service mysqld startStarting mysqld (via systemctl): Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe"for details. [FAILED]既然有了提⽰,先看下有什么帮助没有[root@LCM01GCM01 ~]# systemctl status mysqld.serviceLoaded: loaded (/etc/rc.d/init.d/mysqld)Active: failed (Result: exit-code) since Wed 2016-01-2018:26:57 CST; 40s agoDocs: man:systemd-sysv-generator(8)Process: 2979 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=1/FAILURE)Jan 2018:26:56 spark01 systemd[1]: Starting SYSV: MySQL database server....Jan 2018:26:57 spark01 mysqld[2979]: MySQL Daemon failed to start.Jan 2018:26:57 spark01 mysqld[2979]: Starting mysqld: [FAILED]Jan 2018:26:57 spark01 systemd[1]: mysqld.service: control process exited, code=exited status=1Jan 2018:26:57 spark01 systemd[1]: Failed to start SYSV: MySQL database server..Jan 2018:26:57 spark01 systemd[1]: Unit mysqld.service entered failed state.Jan 2018:26:57 spark01 systemd[1]: mysqld.service failed.[root@LCM01GCM01 ~]# journalctl -xe---- Unit session-2.scope has begun starting up.Jan 2018:26:48 spark01 sshd[2916]: pam_unix(sshd:session): session opened for user spark by (uid=0)Jan 2018:26:52 spark01 su[2944]: (to root) spark on pts/1Jan 2018:26:52 spark01 su[2944]: pam_unix(su-l:session): session opened for user root by spark(uid=1000)Jan 2018:26:56 spark01 polkitd[909]: Registered Authentication Agent for unix-process:2974:117137 (system bus name :1.25Jan 2018:26:56 spark01 systemd[1]: Starting SYSV: MySQL database server....-- Subject: Unit mysqld.service has begun start-up-- Defined-By: systemd-- Support: /mailman/listinfo/systemd-devel---- Unit mysqld.service has begun starting up.Jan 2018:26:57 spark01 mysqld[2979]: MySQL Daemon failed to start.Jan 2018:26:57 spark01 mysqld[2979]: Starting mysqld: [FAILED]Jan 2018:26:57 spark01 systemd[1]: mysqld.service: control process exited, code=exited status=1Jan 2018:26:57 spark01 systemd[1]: Failed to start SYSV: MySQL database server..-- Subject: Unit mysqld.service has failed-- Defined-By: systemd-- Support: /mailman/listinfo/systemd-devel---- Unit mysqld.service has failed.---- The result is failed.Jan 2018:26:57 spark01 systemd[1]: Unit mysqld.service entered failed state.Jan 2018:26:57 spark01 systemd[1]: mysqld.service failed.Jan 2018:26:57 spark01 polkitd[909]: Unregistered Authentication Agent for unix-process:2974:117137 (system bus name :1.然⽽,好像这些信息对我们来说并没有什么⽤处,什么守护进程没启动,我们也不能知如何去启动这些,这个时候我们查看⼀下mysql⾃带的告警⽇志,路径⼀般在/var/log/mysqld.log下⾯[root@LCM01GCM01 ~]# tail -200f /var/log/mysqld.log2018-12-07 T10:00:19.935771Z 0 [ERROR] /usr/sbin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2 - No such file or directory)2018-12-07T10:00:19.935795Z 0 [ERROR] Can't start server: can't create PID file: No such file or directory18120718:00:20 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended这个时候我们就明⽩了,/var/run/mysqld/这个⽬录不存在,wu,查找下确实没有这个⽂件。

双机热备+负载均衡线上方案(Heartbeat+DRBD+NFS+Keepalived+Lnmp)

双机热备+负载均衡线上方案(Heartbeat+DRBD+NFS+Keepalived+Lnmp)

/thread-3689681-1-1.html我们下面来实现一个架构,heartbeat+drbd+nfs实现mysql和网站数据的同步,keepalived 实现nginx的高可用,而用nginx和dns轮询实现负载均衡。

架构说明目录规划/usr/local/src/lnmp:用来存放源码工具等等/data:用来存放所有数据和NFS以及DRBD的挂载/data/shell:用来存放所有管理脚本/data/mysql:用来挂载DRBD的mysql资源,以供mysql存放数据库/data/wwwnfs:用来挂载DRBD生成的www资源,以供两个节点挂载到各个节点的/data/www 目录,以供论坛等程序数据使用/data/www:用来挂载NFS资源,用来存放论坛(网站)等程序数据拓扑工作原理内网:1,DRBD网络存储创建出两个资源,一个mysql给mysql数据库同步用,一个www给web(论坛)数据NFS共享挂载用,虚拟出两个虚拟IP,一个是 192.168.1.100,用来连接数据库,一个是192.168.1.200,用来给节点挂载NFS注意:NFS底下挂载了三次:DRBD挂载一次,文件系统挂载一次,客户端挂载一次2,Heartbeat来实现DRBD的HA,同时虚拟出两个内网IP,并管理NFS,MySQL的启动和关闭外网:1,两个节点都用Nginx做均衡器,通过内网调度负载两个节点,实现内部均衡2,DNS配置双IP对应一个域名的方式来实现DNS轮询,实现外网均衡3,Keepalived使用双主(master)配置虚拟出两个虚拟IP:节点一 12.12.12.100和节点二12.12.12.200,同时共外网访问,两个节点互为主从关系,当某个节点挂掉的时候,另外一个节点将同时是两个资源的master,同时拥有两个虚拟IP,实现资源转移。

我们知道DNS的缺点就是生效慢,分配资源不合理,理论上有可能把所有的请求都发送给同一节点,导致均衡不合理导致所有资源不可用,这里我们由于有了NGINX内部负载,就不怕DNS轮询不均衡了,因为NGINX内部有严谨的调度方式,不管那台请求有多少,在内部都能实现理想的调度,这样就能把 DNS负载均衡和NGINX完美结合,是硬件资源得到合理的利用,然后利用keepalive保证了每个节点的可靠性,几乎完美!拓扑图如下:架构实现LNMP架构配置配置LNMp架构需要注意两点:注意一:这里MYSQL都不要初始化,不要启动!后面有专门的配置的注意二:nginx所有端口都改成 8080,因为一会还要安装nginx来做均衡器并对外提供服务,所以不要用默认的80注意三、nginx和php-fpm运行的用户都是www。

修改mysql配置文件的方法

修改mysql配置文件的方法

修改mysql配置文件的方法要修改MySQL的配置文件,您需要执行以下步骤:1. 找到MySQL的配置文件:MySQL的配置文件通常名为``或``,具体名称可能因操作系统和安装方式而异。

您可以在MySQL安装目录下的`conf`文件夹中查找该文件,或者在系统路径中搜索该文件。

2. 使用文本编辑器打开配置文件:使用您喜欢的文本编辑器(如Notepad++、Vim、Nano等)打开MySQL的配置文件。

3. 修改配置项:在配置文件中,您可以修改各种MySQL服务器参数。

以下是一些常见的配置项及其说明:`[mysqld]`:此部分包含服务器守护进程的配置选项。

`port`:指定MySQL服务器监听的端口号。

`socket`:指定服务器使用的套接字文件路径。

`datadir`:指定MySQL服务器数据文件的存储目录。

`log-bin`:启用二进制日志功能,用于复制和恢复操作。

`server-id`:指定服务器的唯一标识符,用于复制操作。

`max_connections`:指定同时连接到服务器的最大客户端数量。

根据您的需要,修改这些参数或其他相关参数。

4. 保存并关闭配置文件:完成修改后,保存对配置文件的更改,并关闭文本编辑器。

5. 重启MySQL服务器:为了使配置更改生效,您需要重新启动MySQL服务器。

您可以使用系统服务管理工具(如Windows的"服务"或Linux的"systemd")来重启MySQL服务,或者使用命令行工具(如Windows的命令提示符或Linux的终端)执行以下命令:```shellsudo service mysql restart```或者```shellsudo systemctl restart mysql```请注意,具体的命令可能因操作系统和安装方式而异。

完成上述步骤后,您的MySQL配置文件将被修改,并且MySQL服务器将使用新的配置项进行启动和运行。

解决报错ExecStart=usrsbinmysqld--daemonize--pid-f。。。

解决报错ExecStart=usrsbinmysqld--daemonize--pid-f。。。

解决报错ExecStart=usrsbinmysqld--daemonize--pid-f。

问题的由来MySQL服务没有正常关机,是电脑没电后⾃动关机产⽣,记录⼀下排查过程1.本以为是pid的问题,上⽹找了教程,解决不了,然后看⽇志看了⽹上各种说是数据库内存溢出2021-03-12T10:41:18.317167Z 0 [Note] Binlog end2021-03-12T10:41:18.317217Z 0 [Note] Shutting down plugin 'CSV'2021-03-12T10:41:18.317389Z 0 [Note] /usr/sbin/mysqld: Shutdown complete2021-03-12T10:41:18.671273Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details) 2021-03-12T10:41:18.672016Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.33-0ubuntu0.18.04.1) starting as process 2125 ...2021-03-12T10:41:18.675569Z 0 [Note] InnoDB: PUNCH HOLE support available2021-03-12T10:41:18.675608Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins2021-03-12T10:41:18.675611Z 0 [Note] InnoDB: Uses event mutexes2021-03-12T10:41:18.675614Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier2021-03-12T10:41:18.675617Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.112021-03-12T10:41:18.675619Z 0 [Note] InnoDB: Using Linux native AIO2021-03-12T10:41:18.675770Z 0 [Note] InnoDB: Number of pools: 12021-03-12T10:41:18.675820Z 0 [Note] InnoDB: Using CPU crc32 instructions2021-03-12T10:41:18.677170Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M2021-03-12T10:41:18.684020Z 0 [Note] InnoDB: Completed initialization of buffer pool2021-03-12T10:41:18.685248Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().2021-03-12T10:41:18.699329Z 0 [ERROR] InnoDB: Only one log file found.2021-03-12T10:41:18.699360Z 0 [ERROR] InnoDB: Plugin initialization aborted with error not found2021-03-12T10:41:19.310191Z 0 [ERROR] Plugin 'InnoDB' init function returned error.2021-03-12T10:41:19.310270Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.2021-03-12T10:41:19.310284Z 0 [ERROR] Failed to initialize builtin plugins.2021-03-12T10:41:19.310290Z 0 [ERROR] Aborting2021-03-12T10:41:19.310340Z 0 [Note] Binlog end2021-03-12T10:41:19.310422Z 0 [Note] Shutting down plugin 'CSV'2021-03-12T10:41:19.310978Z 0 [Note] /usr/sbin/mysqld: Shutdown complete2.排查⽇志后发现,因为/var/lib/ib_logfile中记录者innoDB⼀些引擎的信息,在server未正常关闭的情况下,重启后的server不⽀持innodb的引擎,删除记录innodb的配置⽂件,rm -rf ./ib_logfile*重启mysql,启动正常systemctl start mysqldFailed to start mysqld.service: Unit mysqld.service not found.root@mysql-master:/var/lib/mysql# systemctl start mysqldFailed to start mysqld.service: Unit mysqld.service not found.root@mysql-master:/var/lib/mysql# systemctl start mysqlroot@mysql-master:/var/lib/mysql# systemctl status mysql● mysql.service - MySQL Community ServerLoaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)Active: active (running) since Fri 2021-03-1218:44:30 CST; 5s agoProcess: 2199 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid (code=exited,Process: 2175 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)Main PID: 2201 (mysqld)Tasks: 27 (limit: 2290)CGroup: /system.slice/mysql.service└─2201 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pidMar 1218:44:28 mysql-master systemd[1]: Starting MySQL Community Server...Mar 1218:44:30 mysql-master systemd[1]: Started MySQL Community Server.查看MySQL的端⼝3306ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 01280.0.0.0:1110.0.0.0:*LISTEN 0128127.0.0.53%lo:530.0.0.0:*LISTEN 01280.0.0.0:220.0.0.0:*LISTEN 0128127.0.0.1:60100.0.0.0:*LISTEN 01280.0.0.0:372110.0.0.0:*LISTEN 0640.0.0.0:20490.0.0.0:*LISTEN 01280.0.0.0:474590.0.0.0:*LISTEN 0640.0.0.0:434610.0.0.0:*LISTEN 01280.0.0.0:504750.0.0.0:*LISTEN 064 [::]:37039 [::]:*LISTEN 0128 [::]:111 [::]:*LISTEN 0128 [::]:22 [::]:*LISTEN 0128 [::]:38455 [::]:* LISTEN 0128 [::1]:6010 [::]:* LISTEN 064 [::]:2049 [::]:* LISTEN 0128 [::]:52773 [::]:* LISTEN 0128 [::]:37129 [::]:* LISTEN 080 *:3306 *:*mysql的端⼝ok,正常访问数据库没有问题。

如何重启 MySQL 服务

如何重启 MySQL 服务

如何重启 MySQL 服务MySQL是一款优秀的关系型数据库管理系统,已被广泛应用于互联网公司、企业和个人的业务活动中。

但是,有时候在使用MySQL的过程中,可能出现MySQL服务意外停止的状况。

这种情况下,需要对MySQL服务进行重启,以确保数据库能够正常工作。

下面就一起来看看如何重启MySQL服务吧。

1. 检查MySQL服务状态在重启MySQL服务之前,我们需要先检查MySQL服务的状态。

可以通过以下命令查看MySQL服务是否正在运行:```# service mysql status```如果MySQL服务正在运行,那么状态应该是“Active (running)”,如下所示:```● mysql.service - MySQL Community ServerLoaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2021-07-15 10:44:11 CST; 2 days agoMain PID: 1587 (mysqld)Status: "Server is operational"Tasks: 37 (limit: 2360)CGroup: /system.slice/mysql.service└─1587 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid```如果MySQL服务没有运行,那么状态应该是“Inactive (dead)”,如下所示:```Unit mysql.service could not be found.```2. 重启MySQL服务如果MySQL服务没有运行或者出现异常,我们需要重启MySQL服务。

mysql启动时报错:StartingMySQL...ERROR!Theserverqui。。。

mysql启动时报错:StartingMySQL...ERROR!Theserverqui。。。

mysql启动时报错:StartingMySQL...ERROR!Theserverqui。

出现问题的可能性1、可能是/opt/mysql/data/数据⽬录mysql⽤户没有权限(修改数据⽬录的权限)解决⽅法:给予权限,执⾏ "chown -R mysql.mysql /opt/mysql/data" 然后重新启动mysqld2、可能进程⾥已经存在mysql进程解决⽅法:⽤命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使⽤“kill -9 进程号”杀死,然后重新启动mysqld!3、可能是第⼆次在机器上安装mysql,有残余数据影响了服务的启动。

解决⽅法:去mysql的⼆进制⽇志⽬录看看,如果存在mysql-binlog.index,就赶快把它删除掉吧4、mysql在启动时没有指定配置⽂件时会使⽤/etc/f配置⽂件,请打开这个⽂件查看在[mysqld]下有没有指定数据⽬录(datadir)。

解决⽅法:请在[mysqld]下设置这⼀⾏:datadir = /opt/mysql/data5、skip-federated字段问题解决⽅法:检查⼀下/etc/f⽂件中有没有没被注释掉的skip-federated字段,如果有就⽴即注释掉吧。

6、错误⽇志⽬录不存在解决⽅法:使⽤“chown” “chmod”命令赋予mysql所有者及权限7、selinux惹的祸,如果是centos系统,默认会开启selinux1 2解决⽅法:先临时改为警告模式:[root@www php]# setenforce 0然后打开/etc/sysconfig/selinux,把SELINUX=enforcing改为SELINUX=disabled8、启动失败注意检查数据⽬录的权限,要与mysql程序运⾏⽤户权限⼀致。

1[root@db01 mysql]# chown -R mysql.mysql ../mysql 最好是整个mysql程序⽬录都授权予mysql⽤户。

MYSQL服务不能启动

MYSQL服务不能启动

mysql自动关闭服务、连接限制等问题的解决方法2011-03-02 11:33通过mysql服务器端程序mysql Administrator调整连接参数。

将max_connections max_updates max_questions三项数据调整到很大的数字,那么你有限的操作将不会导致数据库服务的终止了在MySQL数据库中,如果一个连接8小时没有请求和操作,就会自动断开,从而导致一些基于数据库连接的应用程序,特别是 WEB 应用程序出错。

有三个方法可以解决这个问题:1:修改MySQL配置参数2:修改JDBC3:修改第三方的数据库连接池应用 Proxool.xml方法一:这个参数的名称是 wait_timeout,其默认值为 28800秒(8小时)。

其意义为关闭一个连接之前在这个连接上等到行动的秒数,也就是说,如果一个连接闲置超过这个选项所设置的秒数,MySQL 会主动断开这个连接。

修改操作:linux下打开/etc/f,在属性组mysqld下面添加参数如下:[mysqld]interactive_timeout=28800000wait_timeout=28800000windows下打开my.ini,增加:interactive_timeout=28800000wait_timeout=28800000有实践表明,没有办法把这个值设置成无限大,即永久。

因此如果你无法保证你的应用程序必定在设定的秒数内至少有一次操作,那么最好用第二个方法解决这个问题。

方法二:修改如下JDBC连接的 URL:jdbc:mysql://hostaddress:3306/schemaname?autoReconnect=true添加 autoReconnect=true 这个参数,即能解决这个问题。

方法三:配置文件(proxool.xml):<?xml version="1.0" encoding="UTF-8"?><!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. --><something-else-entirely><proxool><!-- proxool别名 --><alias>mysql</alias><!-- 数据库连接URL --><driver-url>jdbc:mysql://localhost/yourDatebase?useUnicode=true&characterEncoding=UTF-8</driver-url><!-- JDBC驱动名称 --><driver-class>com.mysql.jdbc.Driver</driver-class><!-- 数据库连接帐号 --><driver-properties><property name="user" value="root" /><property name="password" value="password" /></driver-properties><!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 --><house-keeping-sleep-time>90000</house-keeping-sleep-time><!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 --><maximum-new-connections>20</maximum-new-connections><!-- 最少保持的空闲连接数 --><prototype-count>3</prototype-count><!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 --><maximum-connection-count>20</maximum-connection-count><!-- 最小连接数 --><minimum-connection-count>3</minimum-connection-count><!-- 在分配连接前后是否进行有效性测试,这个是解决本问题的关键 --><test-before-use>true</test-before-use><test-after-use>true</test-after-use><!-- 用于测试的SQL语句一定要写(不知道问什么)--><house-keeping-test-sql>SELECT CURRENT_USER</house-keeping-test-sql> </proxool></something-else-entirely>三、开始菜单-运行-services.msc找到mysql的服务并双击点击恢复选项卡第一次失败:默认是“不操作”,改成"重新启动服务"。

chkConfig的用法 、mysqld开机自启动

chkConfig的用法 、mysqld开机自启动

chkConfig的用法、mysqld开机自启动chkconfig命令可以用来检查、设置系统的各种服务使用语法:chkconfig[--add][--del][--list][系统服务]或chkconfig[--level<等级代号>][系统服务][on/off/reset]参数用法:--add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。

--del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。

--level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关毕。

使用范例:chkconfig --list 列出所有的系统服务chkconfig --add httpd 增加httpd服务chkconfig --del httpd 删除httpd服务chkconfig --level httpd 2345 on 把httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态。

chkconfig命令提供了一种简单的方式来设置一个服务的运行级别。

例如,为了设置MySQL服务器在运行级别3和4上运行,你必须首先将MySQL添加为受chkconfig管理的服务:chkconfig --add mysql现在,我们在级别3和5上设定服务为“on”chkconfig --level 35 mysql on在其他级别上设为offchkconfig --level 01246 mysql off为了确认你的配置被正确的修改了,我们可以列出服务将会运行的运行级别,如下所示:#chkconfig --list mysqlmysql 0:off 1:off 2:off 3:on 4:off 5:on 6:off本文出自:中国E动网[]中国领先互联网接入服务提供商!11年品质保障!-- 中国E动网[]。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于HA在发生切换时,都会做STOP本机资源,然后再START对方的资源。

我们的实际环境中有两个资源:一个是IPaddr,用来管理VIP;一个是mysql, 用来管理MYSQL资源;在实际的应用过程中,我们发现MYSQL一下子关不掉(flush dirty pages),或启动需要很长时间(recovery).这样也就大大延长了HA切换的时间。

所以我们在想,是不是可以让HA只管理MYSQL的状态,而不管理MYSQL的启动与STOP呢?我们知道,HA管理lsb类型的资源时,是调用/etc/init.d/或者./resource.d/ 目录下的该资源相关命令加参数start/stop/status.比如,有mysql资源,启动mysql: service mysql start停止mysql: service mysql stop状态mysql: service mysql status为了达到目的,我们可以修改SHELL脚本:/etc/init.d/mysql====================================‗status‘)# First, check to see if pid file existsif test -s ―$server_pid_file‖ ; thenread mysqld_pid < $server_pid_fileif kill -0 $mysqld_pid 2>/dev/null ; thenlog_success_msg ―MySQL running ($mysqld_pid)‖exit 0elselog_failure_msg ―MySQL is not running, but PID file exists‖exit 1fielse# Try to find appropriate mysqld processmysqld_pid=`pidof $sbindir/mysqld`if test -z $mysqld_pid ; thenif test ―$use_mysqld_safe‖ = ―0″ ; thenlockfile=/var/lock/subsys/mysqlmanagerelselockfile=/var/lock/subsys/mysqlfiif test -f $lockfile ; thenlog_failure_msg ―MySQL is not running, but lock exists‖exit 2filog_failure_msg ―MySQL is not running‖exit 3elselog_failure_msg ―MySQL is running but PID file could not be found‖exit 4fifi;;====================================>>>>这一段改为:===================================================== ===========‗status‘)# First, check to see if pid file existsif test -s ―$server_pid_file‖ ; thenread mysqld_pid < $server_pid_fileif kill -0 $mysqld_pid 2>/dev/null ; then# ————————————————— Modi-1. /root/.bash_profileMYSQLPID=$$STAT_FILE=/home/mysql/mysql.`date +%Y%m%d%H%M%S`.$MYSQLPID mysql -uroot -h127.0.0.1 -s -e ―select \‖aliyun.mysql\‖ ;‖ > $STAT_FILE 2>&1 &CNT=1MYSQLSTATUS=UNKNOWNwhile [ "$MYSQLSTATUS" = "UNKNOWN" ]doif test -f $STAT_FILEthenread CONTENT < $STAT_FILEif [ "$CONTENT" = "aliyun.mysql" ]thenMYSQLSTATUS=OKlog_success_msg ―MySQL running ($mysqld_pid)‖\rm -f $STAT_FILEexit 0elif [ "$CONTENT" != "" ]; thenERROR_CNT=`grep -i ―error‖ $STAT_FILE | grep -v ―using password‖ | wc -l`if [ "$ERROR_CNT" -ge "1" ];thenlog_failure_msg ―MySQL status Warning in logfile $STAT_FILE ‖fiexit 0fifisleep $CNTCNT=`expr $CNT + 2`if [ $CNT -gt 5 ]; thenMYSQLSTATUS=ERRORlog_failure_msg ―MySQL running ($mysqld_pid),But no respond‖echo ―ERROR: MySQL running ($mysqld_pid),But no respond‖ >>/var/log/messagesexit 1fidone#————————————————— /Modi-1elselog_failure_msg ―MySQL is not running, but PID file exists‖exit 1fielse# Try to find appropriate mysqld processmysqld_pid=`pidof $sbindir/mysqld`if test -z $mysqld_pid ; thenif test ―$use_mysqld_safe‖ = ―0″ ; thenlockfile=/var/lock/subsys/mysqlmanagerelselockfile=/var/lock/subsys/mysqlfiif test -f $lockfile ; thenlog_failure_msg ―MySQL is not running, but lock exists‖exit 2filog_failure_msg ―MySQL is not running‖exit 3elselog_failure_msg ―MySQL is running but PID file could not be found‖exit 4fifi;;===================================================== =======以上的改动, 意思是运行service msyql status 的时候,如果主机HANG住了,MYSQL进程还在,但MYSQL不能响应查询, 我们把状态也置为FAILED.(如果10秒钟内临时文件mysql.`date +%Y%m%d%H%M%S`.$MYSQLPID 存在,并且里面的内容必须为‖aliyun.mysql‖,那么MYSQL是正常的。

)如果上面的条件成立, MYSQL处于无响应状态, 程序还会写信息到文件:/home/mysql/aliyun.mysqlHEARTBEAT 如果检查到MYSQL失败了.会Stop/Start mysql 资源N次(N 是根据cib.xml的配置来定的),在重启过程中,我们让stop/start状态直接返回0。

不去真正的关闭或启动mysql。

这样做是为了让下次MYSQL检测状态时直接返回错误。

可以快速切换。

所以在/etc/init.d/mysql中我们还需要改几个地方:0) 把原来mysql的参数start/stop 改成startup/stopdown‗start‘)–> ‗startup‘)‗stop‘)–> ‗stopdown‘)1)新加start 段===========================================‗start‘)# Start daemonlog_success_msg ―Mysql Start failed with /etc/init.d/mysql in HA Mode !‖exit 0;;===========================================2) 新加stop 段===========================================‗stop‘)# Stop daemon.log_su ccess_msg ―Mysql Stop failed with /etc/init.d/mysql in HA Mode !‖exit 0;;===========================================测试:启动mysql: service mysql startup关闭mysql: service mysql stopdown状态mysql: service mysql statusservice mysql start/stop这两个语句则啥事都不干了,就发个信息给你!小结:这样做了以后,不管HEARTBEAT怎么重启/关闭,只会对VIP有影响。

不会对MYSQL来直接操作。

一方面,不会因为HEARTBEAT工作不正常而影响MYSQL;另一方面,可以让HEARTBEAT切换更快(因为节省启动和关闭MYSQL的时间)但这样做有一个小缺点就是:在HEARTBEAT启动时,不会自动启动MYSQL。

HEARTBEAT在启动后会发现MYSQL是失效的。

然后会发生切换。

所以你必须保证在HEARTBEAT启动前,至少有一个NODE的MYSQL STATUS 是正常的!以上脚本已经在linux rhel5.3 , Heartbeat 2.1.4环境上测试成功。

相关文档
最新文档