呃,好像可以改“服务”里面的“mysql”选项,改成“启动失败时自动重启”。
10余年的丰满网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整丰满建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“丰满网站设计”,“丰满网站推广”以来,每个客户项目都认真落实执行。
如果是受到攻击导致崩溃,最好先检查哪里有问题,要不然你重启MySQL别人会继续攻击的~~~
更正,刚试了下,改那个不行,非正常结束时服务不会自动重启。
刚在同学的机子上做了一个脚本和计划任务,能够达到你说的那种效果。不过我同学的机子上没有MySQL,只有SQLSERVER2000,而且系统是Vista的,不知道你的服务器装的什么系统,所以不能保证这个办法同样有效。
代码太多,不让传~~没办法了~~有问题Q我吧:87510102
今天用虚拟机装了个2003,发现那个从Vista中导出的计划任务根本就不能导入2003,晕~~
手动创建计划任务的时候发现没有可以用系统事件作为触发条件的选项,直接悲剧~~
这个办法对2003无效~不好意思了~~
但是可以变通一下,在2003中建一个计划任务,每5分钟运行一次,运行的时候启动StartMySQL.vbs,这个脚本内容如下
strServiceName = "MySQL"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='" strServiceName "'")
For Each objService in colListOfServices
dim i
for i = 1 to 3
if objService.State "Running" then
objService.StartService()
Wscript.Sleep 3000
end if
next
Next
你试试看
————————————————————
很惭愧,用了几年的MySQL一直都是做些小型的数据库,所以像您这种情况还一次都没发生过,所以我不清楚你的MySQL崩溃了是什么症状,如果只是MySQL停止响应了,那么用这个办法还不能完全解决问题,如果MySQL进程停掉了,可以用这个办法重启MySQL服务,可以恢复运行。
如果你能拿到服务器的日志,建议你好好看下日志,看是哪里的配置不适合,或者是漏洞没堵上,然后相应的调整一下服务器。
示范如下:
在mysql提示输入如下命令并按回车键: mysql SELECT VERSION(), CURRENT_DATE; +-----------------+--------------+ | VERSION() | CURRENT_DATE | +-----------------+--------------+ | 5.1.2-alpha-log | 2005-10-11 | +-----------------+--------------+ 1 row in set (0.01 sec) mysql 这询问说明mysql的几个方面: · 一个命令通常由SQL语句组成,随后跟着一个分号。(有一些例外不需要分号。早先提到的QUIT是一个例子。后面我们将看到其它的例子。) · 当发出一个命令时,mysql将它发送给服务器并显示执行结果,然后显示另一个mysql显示它准备好接受其它命令。 · mysql用表格(行和列)方式显示查询输出。第一行包含列的标签,随后的行是查询结果。通常,列标签是你取自数据库表的列的名字。如果你正在检索一个表达式而非表列的值(如刚才的例子),mysql用表达式本身标记列。 · mysql显示返回了多少行,以及查询花了多长时间,它给你提供服务器性能的一个大致概念。因为他们表示时钟时间(不是 CPU 或机器时间),并且因为他们受到诸如服务器负载和网络延时的影响,因此这些值是不精确的。(为了简洁,在本章其它例子中不再显示“集合中的行”。) 能够以大小写输入关键词。这是另外一个查询,它说明你能将mysql用作一个简单的计算器: mysql SELECT SIN(PI()/4), (4+1)*5; +------------------+---------+ | SIN(PI()/4) | (4+1)*5 | +------------------+---------+ | 0.70710678118655 | 25 | +------------------+---------+ 1 row in set (0.02 sec) 至此显示的命令是相当短的单行语句。你可以在一行上输入多条语句,只需要以一个分号间隔开各语句: mysql SELECT VERSION(); SELECT NOW(); +-----------------+ | VERSION() | +-----------------+ | 5.1.2-alpha-log | +-----------------+ 1 row in set (0.00 sec) +---------------------+ | NOW() | +---------------------+ | 2005-10-11 15:15:00 | +---------------------+ 1 row in set (0.00 sec) 不必全在一个行内给出一个命令,较长命令可以输入到多个行中。mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束。(换句话说,mysql接受自由格式的输入:它收集输入行但直到看见分号才执行。) 这里是一个简单的多行语句的例子: mysql SELECT - USER() - , - CURRENT_DATE; +---------------+--------------+ | USER() | CURRENT_DATE | +---------------+--------------+ | jon@localhost | 2005-10-11 | +---------------+--------------+ 在这个例子中,在输入多行查询的第一行后,要注意提示符如何从mysql变为-,这正是mysql如何指出它没见到完整的语句并且正在等待剩余的部分。提示符是你的朋友,因为它提供有价值的反馈,如果使用该反馈,将总是知道mysql正在等待什么。 如果你决定不想执行正在输入过程中的一个命令,输入\c取消它: mysql SELECT - USER() - \c mysql 这里也要注意提示符,在你输入\c以后,它切换回到mysql,提供反馈以表明mysql准备接受一个新命令。 下表显示出可以看见的各个提示符并简述它们所表示的mysql的状态: 提示符 含义 mysql 准备好接受新命令。 - 等待多行命令的下一行。 ' 等待下一行,等待以单引号(“'”)开始的字符串的结束。 " 等待下一行,等待以双引号(“"”)开始的字符串的结束。 ` 等待下一行,等待以反斜点(‘`’)开始的识别符的结束。 /* 等待下一行,等待以/*开始的注释的结束。 当你打算在一个单行上发出一个命令时,通常会“偶然”出现多行语句,但是没有终止分号。在这种情况中,mysql等待进一步输入: mysql SELECT USER() - 如果出现这种情况(你认为输完了语句,但是只有一个-提示符响应),很可能mysql正在等待分号。如果你没有注意到提示符的提示,在意识到你需要做什么之前,你可能会呆坐一会儿。输入一个分号完成语句,mysql将执行: mysql SELECT USER() - ; +---------------+ | USER() | +---------------+ | jon@localhost | +---------------+ 在字符串收集期间将出现 ' 和 " 提示符(提示MySQL正等待字符串的结束)。在MySQL中,可以写由‘'’或‘"’字符括起来的字符串 (例如,'hello'或"goodbye"),并且mysql允许输入跨越多行的字符串。当看到一个 ' 或 " 提示符时,这意味着已经输入了包含以‘'’或‘"’括号字符开始的字符串的一行,但是还没有输入终止字符串的匹配引号。这显示你粗心地省掉了一个引号字符。例如: mysql SELECT * FROM my_table WHERE name = 'Smith AND age 30; ' 如果你输入SELECT语句,然后按Enter(回车)键并等待结果,什么都没有出现。不要惊讶,“为什么该查询这么长呢?”,注意"提示符提供的线索。它告诉你mysql期望见到一个未终止字符串的余下部分。(你看见语句中的错误吗?字符串"Smith丢掉了第二个引号。) 走到这一步,你该做什么?最简单的是取消命令。然而,在这种情况下,你不能只是输入\c,因为mysql作为它正在收集的字符串的一部分来解释它!相反,应输入关闭的引号字符(这样mysql知道你完成了字符串),然后输入\c: mysql SELECT * FROM my_table WHERE name = 'Smith AND age 30; ' '\c mysql 提示符回到mysql,显示mysql准备好接受一个新命令了。 ` 提示符类似于 ' 和" 提示符,但表示你已经开始但没有结束以` 开始的识别符。 知道'和"提示符的含义很重要,因为如果你错误地输入一个未终止的字符串,任何后面输入的行将要被mysql忽略--包括包含QUIT的行!这可能令人相当困惑,特别是如果取消当前命令前还不知道你需要提供终止引号。
这个mysql是不记录的。
唯一的方法是开启mysql的bin日志,里面有所有insert和update的记录。
少使用一个函数:
$sql = "select * from aboutus where abid = '1'";
$result = mysql_query($sql);
echo mysql_error();//如果数据库语句有错,这里会输出
echo "pre";
while($re = mysql_fetch_array($result))
{
print_r($re);
}
要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径。如果未包含在选项文件中,当服务器启动时,可以在命令行中以选项的形式给出。启用二进制日志的选项为-- log-bin。要想确定当前的二进制日志文件的文件名,输入下面的MySQL语句:
SHOW BINLOG EVENTS /G
你还可以从命令行输入下面的内容:
mysql --user=root -pmy_pwd -e 'SHOW BINLOG EVENTS /G'
将密码my_pwd替换为服务器的root密码。
1. 指定恢复时间
对于MySQL 4.1.4,可以在mysqlbinlog语句中通过--start-date和--stop-date选项指定DATETIME格式的起止时间。举例说 明,假设在今天上午10:00(今天是2006年4月20日),执行SQL语句来删除一个大表。要想恢复表和数据,你可以恢复前晚上的备份,并输入:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd
该命令将恢复截止到在--stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句,可能你想要恢复后面发生的活动。根据这些,你可以用起使日期和时间再次运行mysqlbinlog:
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 /
mysql -u root -pmypwd /
在该行中,从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。