Wordpress 服务器上的 MySQL 中一个表经常出错,需要 mysqlcheck
自动修复一下,写了脚本,为了方便,想让不懂技术的人也能使用。
想法一:服务器定时检查某个邮箱,由操作人员向这个邮箱发送修复命令,服务器收到邮件后执行脚本,并把执行结果通过邮件返回给操作人员。缺点是安装邮件系统,成本略高(各种成本)。
想法二:安装微信或 QQ 机器人。缺点是 web 协议不稳定。
想法三:写一个 web 接口,通过浏览器访问。缺点是对用户不友好,比较繁琐。
想法四:写一个手机软件,写几个 button ,通过 ssh 控制服务器执行命令。
求各位大神指导一下,有没有现成的工具,或者有没有更简单的办法,谢谢。
1 、找到一个比较傻瓜的工具 https://github.com/Skarafaz/mercury/wiki 缺点在于不能在 app 中添加修改配置。
2 、关于定时执行,我是想过的,但是对 MySQL 了解不多,不知道经常执行那个修复命令对数据库的性能有没有影响,或者有没有其他影响。
3 、不知道能不能定时检查表是否损坏,没有查到相关命令。只写了定时检查 MySQL 是否宕机,宕机重启 MySQL 的脚本。
4 、 wp_meta 表损坏原因不清楚,通常发生在网站被攻击, MySQL 宕机。
1
hienchu 2016-02-29 13:45:24 +08:00 1
想法 4 最安全
|
2
zhangneww OP 发现了一个 SSH 工具,比较傻瓜了,<https://github.com/Skarafaz/mercury/wiki>,试了一下可以,但是没有返回结果,还要手动去文件系统中创建文件,还不能在软件中编辑配置文件。
|
3
cevincheung 2016-02-29 13:46:05 +08:00 1
不是 wordpress 么。后台写个插件呗。
|
4
salmon5 2016-02-29 13:50:16 +08:00 1
http://the.earth.li/~sgtatham/putty/latest/x86/plink.exe
google “ plink 远程执行” |
5
wesley 2016-02-29 13:58:18 +08:00 1
|
6
zhangneww OP @wesley 我是用 Expect 写的脚本,但是需要给不懂技术的人 **远程** 使用,就是连 ssh 都不懂的人。
|
7
likuku 2016-02-29 14:07:27 +08:00 1
以前有类似需求, nagios 监控 mysql ,发现需要修表时,自动执行修表脚本。
|
8
ProjectAmber 2016-02-29 14:08:30 +08:00 via iPhone 1
plink 。
|
9
b821025551b 2016-02-29 14:10:40 +08:00 1
想法 3 +弄个 hao123 那种导航
|
10
zhangneww OP @b821025551b 不安全啊
|
11
mcone 2016-02-29 14:45:58 +08:00 1
想法 4+跨平台版本,类似于那种一键执行 xxx 的感觉,局限于手机感觉不好
另外,这种操作感觉已经很危险了,你确定要让完全不懂运维的人用吗…… 不如大概教一下远程连接,给他们专门弄个用户,证书登录,写好一个脚本,弄上类似于 suid 之类的标志位,限制权限后给他们直接跑……虽然他们不懂技术,但是仅仅登陆+执行,也不怎么难学吧 |
12
Ann1020 2016-02-29 15:45:12 +08:00
软件开发交流 群: 466678068
|
13
gdtv 2016-02-29 15:51:06 +08:00
phpmyadmin 不好吗?
|
14
oott123 2016-02-29 15:53:09 +08:00
为啥 web 协议不稳定
|
15
ChoateYao 2016-02-29 15:54:21 +08:00
方法 5:写一个 Web 界面,写几个按钮,通过 ssh 控制服务器执行命令。
|
16
skydiver 2016-02-29 15:54:45 +08:00 3
经常出错难道不该查找一下原因么
|
18
crazyxin1988 2016-02-29 16:02:46 +08:00
fabric
用户只要本地装一下 python 和 fabric 本地 run 一下就好 |
19
Strikeactor 2016-02-29 16:05:57 +08:00
弄个 cron 自动执行?
|
20
zhangneww OP |
21
zjqzxc 2016-02-29 18:10:48 +08:00 1
新建一个用户,把需要执行的命令写到.bashrc 里面去
让不懂技术的人通过 ssh 登陆一下这个用户就行了 方法:比如装一个能记住密码的 ssh 客户端( secureCRT , xshell 之类) 新建一个脚本: putty user@ip -pw password 感觉最好的应该是弄个脚本每个几分钟检查下数据库有没有出错。。 |
22
lucifer4he 2016-02-29 18:20:29 +08:00
@Strikeactor 说得好,弄成定时执行。自己别人都不用手动了=。=
|
23
kn007 2016-02-29 18:24:47 +08:00 1
1.定时任务-修复表
2.降低 mysql oom 等级,被攻击时, mysql 不会宕机。 |
24
wph95 2016-02-29 18:31:40 +08:00
使用 crontab 解决问题
|
25
zhjits 2016-02-29 18:45:47 +08:00 1
https://landscape.canonical.com/ 这类服务器管理解决方案
|
26
akira 2016-02-29 19:25:52 +08:00
干嘛不做成定时执行?
|
27
wizardoz 2016-02-29 21:00:42 +08:00
我觉得 3 跟 4 结合最好,就是写一个 web 接口,但是不止有浏览器访问,应再做一个手机应用来访问 web 接口。
直接将 ssh 命令放在 app 里面,我觉得扩展性太差了,以后要改方案就得重新升级 app 才行。 |
28
zhangneww OP @wizardoz https://github.com/Skarafaz/mercury/wiki 这个东西扩展性很好,可惜不能在 app 中编辑配置文件。
|
29
alect 2016-02-29 22:17:23 +08:00 1
|
31
likuku 2016-02-29 23:41:04 +08:00
@zhangneww [通常发生在网站被攻击的时候,导致 mysql 进程关闭,后来就表损坏了。] 你这表这么容易坏? MyISAM 吗? InnoDB 的一般在起点时会自动修复的,假若不能自动修复,手动也最多只能救援模式只读状态下导出数据了。
|
32
zhangneww OP @likuku 感谢回复,我对 MySQL 了解不多,那个修复的命令也是 Google 来的。关于说的 InnoDB MyISAM 都不懂,具体损坏原因也不清楚,因为我也不知道黑客什么时候 d 我。
|
33
sunsol 2016-03-01 07:53:00 +08:00 2
想法一最简单也最实用。
无非就是出了问题自动修复并通知有关人士, 对于不懂的人只需告知某时间发生某事就行了, 如果让他选择哪个操作那还不如机器自己判断那个操作更合适, 只要把执行结果告知相关人士就行了。 想法 3.4 都要某人手动刷新,明显不合适。 想法 1.2 都比较通用,但明显电邮技术更成熟也更简单方便。 |
34
babytomas 2016-03-01 08:09:41 +08:00 via Android
既然是 MySQL 的问题,
难道不可以创建一个数据库用户远程连接吗? 如果觉得不安全,设置那个用户只可以有 xx 数据库的权限即可。 |
35
tomczhen 2016-03-01 11:19:59 +08:00 1
1.用 OpenResty 做个接口调用修复命令。
2.觉得上面那个麻烦了就装个 Jenkins ,建个构建任务来执行脚本,利用它提供的接口来执行任务。 3.邮件可以用支持 WebAPI 的投递方式,阿里云 /SengCloud 都可以,每个月的免费额度应该够用了。 4.App 方面可以用 Automate (安卓)试试,可以的话还能配合推送 /邮件来做成触发式。 PS :应该可以做成检测数据库状态来执行修复的,自动运行就好。当然,一定要有交互的话就没办法了。 |
36
Neveroldmilk 2016-03-01 22:33:29 +08:00
Mysql 数据天天损坏本身就有问题,如果这个问题不彻底解决,那是治标不治本。
|
37
likuku 2016-03-02 10:46:39 +08:00
@zhangneww MyISAM 和 InnoDB 都是 mysql 的表存储引擎,可以不正确滴比喻是 mysql 的 "文件系统"。
MyISAM 是最早的 mysql 表存储引擎,表级锁,单纯的读 or 写速度很快,但有时可能会莫名其妙得到不正确结果(跑的太快裤子都掉了),不支持事务, mysql 意外退出 /表很大 /负载很重 时损坏表,需要运行 myisamchk 等工具来检查和修表。 InnoDB 是现代化的 mysql 表存储引擎,行级锁,完整支持事务,在启动时会自检,若表损坏,会自动修复。 具体的相关信息,谷歌吧,大把。 |