mysql随Linux开机自动启动

mysql随Linux开机自动启动,第1张

在MySQL的管理过程中 偶尔会遇到一些PC Server宕机或者重启 这时我需要在主机启动后再将MySQL服务启动 一般情况下 这项工作都是简单的 但是 当面临上百台或者更多的MySQL主机的时候 这种 偶尔 可能会很多 这种 偶尔 还会在半夜或者凌晨发生 如果每次都手动 *** 作 这是很繁琐的 更重要的是 如果因此而打断了凌晨的美梦是不值得的

要实现随开启自动启动mysqld 我们需要搞定如下几个问题

Linux开机自动启动脚本放在哪儿?

一般的 作为服务器使用的Linux一般会以 完全多用户模式(Multi User Mode with Neorking) 级别来启动 这种情况下Linux在启动时会运行/etc/rc d/rc d/下的全部脚本 例如我们在这个目录下会看到脚本 /etc/rc d/rc d/S crond 意味着开机启动时会运行S crond脚本

Linux如何运行这些脚本?

既然已经知道自动启动脚本该放在哪儿了 一切就好办 我们只需要将一个启动MySQL的脚本放过去就好了 下面是我们的一个简单的启动脚本v mysqldauto

$vi mysqldauto

#!/bin/sh

# Version: by

/opt/mysql/bin/mysqld_safe user=mysql &      #这里需要修改为你的mysqld_safe目录

$chmod +x mysqldauto

$mv mysqldauto /etc/rc d/init d/

$ln s /etc/rc d/init d/mysqldauto /etc/rc d/rc d/S mysqld

这样我们就把创建的mysqldauto脚本放到了/etc/rc d/rc d/下面(注意这里使用了link的方式) mysqld可以自动启动了

这有两个问题需要解释

* * * * * 为什么不直接在目录/etc/rc d/rc d/下创建文件 而要创建一个软连接?这并不是必须的 但是这样做是有很多好处的(后面会解释) 不过这样做至少会看起来更加专业

* * * * * 为什么文件名要用S mysqld?这是规则 在rc d下面的脚本如果以字母S开头 那么执行时Linux会给它传递一个start参数(如果以字母K开头 则会传递stop参数) S后面接个数字 表示了这个脚本的启动顺序 如果目录rc d下还有S *那么它会在S 之前运行 (看到这儿 你可以猜测一下前面我们为什么要创建软连接了)

好了 自此你的mysqld就已经可以随Linux开机自动启动了

怎样做更专业些?

上面这样做 已经可以解决问题了 不过写法多少有些 山寨 下面我们看看怎样改造一下

* * * * * 改造 处理参数start 既然前面提到以字母S开头的脚本会自动传递一个参数start K则会传递stop 那么我再做如下修改

$vi mysqldauto

#!/bin/sh

# Version: by

MYSQLHOME=/opt/mysql                         #这里需要修改为你的mysql安装目录

if [ $# ge ]then

mysqldProc=`ps ef|grep E mysqld +safe |grep v grep |wc l`

if [ $ = stop ] then

if [ $mysqldProc eq ]then

$MYSQLHOME/bin/mysqladmin uroot shutdown

fi

elif [ $ = start ]then

if [ $mysqldProc eq ]then

$MYSQLHOME/bin/mysqld_safe user=mysql &

fi

fi

fi

做了如此改造后 我们脚本需要接收两个参数start stop了 如果你想让你mysqld在关闭主机的时候自动关闭 那么stop参数就可以起作用了

$ln s /etc/rc d/init d/mysqldauto /etc/rc d/rc d/K mysqld

这里做软连接好处就体现出来了 启动和关闭只需要用一个脚本就可以了

* * * * * 改造 当你面临几十上百台主机的时候 MySQL的启动参数可能会不一样 例如备库启动时可能需要mysqld_safe –user=mysql –read_olny= &这种情况怎么办呢?这里提供一个解决思路

lishixinzhi/Article/program/MySQL/201311/29483

默认情况下, MySQL启用自动提交模式(变量autocommit为ON)

如果是全局级别,则需要加global,如果是会话级别,则需要加session,如果都没加,默认是session。

全局变量作用域:服务器每次启动将为所有的全局变量赋初始值,修改全局变量针对于所有的会话(连接)有效,但不能跨重启(重启服务器全局变量恢复为默认值)。

会话变量作用域:仅仅针对于当前会话(连接)有效

查询会话事务提交模式:

show session variables like 'autocommit'

查询全局事务提交模式:

show global variables like 'autocommit'

Value的值为ON,表示autocommit开启。OFF表示autocommit关闭。

set global autocommit=0

set SESSION autocommit=0

禁止自动提交

SET AUTOCOMMIT=0

开启自动提交:

SET AUTOCOMMIT=1

查询 正在执行的事务:

SELECT * FROM information_schema.INNODB_TRX

查看正在锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS

查看等待锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS

结束正在执行的事务:

使用mysql命令杀掉线程:kill 线程id (trx_mysql_thread_id)

手动提交模式:

BEGIN

SQL;

COMMIT

最近帮别人做的一个项目机器上面跑MySQL老是隔一段时间就自动停了。刚开始以为是以外停止,也没注意,就手动再启动。可是过了没两天又停止了。

后来仔细查了查 mysqld 的日志:

上面显示是 Cannot allocate memory for the buffer pool ,无法分配内存给缓存池。马上想到是内存不足,这台机器是1GB的内存,还跑着 Nginx 和 PHP-FPM 。

使用 top 看了看 mysqld 占用的内存达到了48% 。内存占用还是蛮高的。

当然了升级机器配置是比较好的办法,但是毕竟经费有限。所以我们先给它加个 swap 交换空间:

上面我们加了2GB的交换空间给机器。然后重启 mysqld 。再使用 top 看了看,发现交换空间渐渐被使用了。

睡了一觉起来一看, mysqld 服务没有再自动停止,内存占用已经下降到 22% ,看了看错误日志,也是空的。

嗯,看来还不错嘛。再观察个几天看看,没问题的话应该就好了

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6151193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存