‘MySQL’ 存档

LINUX启动/重启/停上MYSQL的命令

如何启动/停止/重启MySQL

一、启动方式

1、使用 service 启动:service mysqld start

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start

3、使用 safe_mysqld 启动:safe_mysqld&

二、停止

1、使用 service 启动:service mysqld stop

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop

3、mysqladmin shutdown

三、重启

1、使用 service 启动:service mysqld restart

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart
提问 编辑摘要

如何启动/停止/重启MySQL
一、启动方式

1、使用 service 启动:service mysqld start

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start

3、使用 safe_mysqld 启动:safe_mysqld&

二、停止

1、使用 service 启动:service mysqld stop

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop

3、mysqladmin shutdown

三、重启

1、使用 service 启动:service mysqld restart

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart

刚开始学mysql时都是用redhat自带的。启动是什么 /rc.d/init.d/ start
这很简单,但是后来越学越多,系统自带的mysql,有的是版本太低,有的是与
自己想要装的web服务需要的低版本的mysql

后来自己学着以tar的方式安装mysql,我的mysql装在/usr/local/mysql目录下启

动碰到过很多问题。最常见的是:
ERROR 2002: Can't connect to local MySQL server through socket

'/tmp/mysql.sock' (111)

解决办法:
[root@test mysql]# /usr/local/mysql/bin/mysqladmin -u root /
> -S /var/lib/mysql/mysql.sock password 'your.passwd'
或者做个连接
ln -s /var/lib/mysql/mysql.sock /tmp
其实提示找不到 /tmp/mysql.sock有时也并不是/tmp目录下没这个文件,是启动
命令不对,我碰到过
常见的几种启动方式,自己也不是记得很清楚,如果你确定tmp下有mysql.sock这
个文件不妨试试另外的几个命令
/usr/local/mysql/bin/mysql -u root -p
/usr/local/mysql/bin/mysqld --user=mysql&
/usr/local/mysql/bin/mysqld --user=root&
/usr/local/mysql/bin/mysqld_safe --user=root&
/usr/local/mysql/bin/mysqld_safe --user=mysql&
/usr/local/mysql/bin/safe_mysqld--uer=root&(注意safe_mysqld与mysqld_safe是不同的,&表示mysql在后台运行)我的就会报错了
STOPPING server from pid file
/usr/local/mysql/data/localhost.localdomain.pid
060304 11:46:21 mysqld ended
这是权限问题,我的mysql目录属于root用户,也属于root群组,改用mysqld_safe启动就没问题了,
大家只要注意这几个mysql,safe_mysqld,mysqld_safe,mysqld,mysqladmin.多试
几次
其实有时mysql已经正常启动了,查看mysql是否启动命令
ps -aux | grep mysqld
会看到如下类似内容
mysql 6394 0.0 1.5 10528 992 pts/3 S 16:16 0:00
/usr/local/mysql/
mysql 6395 0.0 1.5 10528 992 pts/3 S 16:16 0:00
/usr/local/mysql/
mysql 6396 0.0 1.5 10528 992 pts/3 S 16:16 0:00
/usr/local/mysql/
root 6422 0.0 1.1 2408 732 pts/3 S 16:20 0:00 grep
mysql

查看mysql是否在监听端口命令
netstat -tl | grep mysql
会看到如下类似内容
tcp 0 0 *:mysql *:* LISTEN

MySQL数据表损坏的正确修复方案

 修复以损坏的MySQL数据表的实际操作在实际中是我们经常用到的,以下的文章主要是介绍正确修复以损坏的MySQL数据表的实际操作步骤,以下就是正文的介绍,希望会给你带来一些帮助在此方面。
  于断电或非正常关机而导致MySQL(和PHP搭配之最佳组合)数据库出现错误是非常常见的问题。有两种方法,一种方法使用MySQL(和PHP搭配之最佳组合)的check table和repair table 的sql语句,另一种方法是使用MySQL(和PHP搭配之最佳组合)提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。
  1. check table 和 repair table
  登陆MySQL(和PHP搭配之最佳组合) 终端:
  MySQL(和PHP搭配之最佳组合) -uxxxxx -p dbname
  1.> check table tabTest;
  如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:
  1.> repair table tabTest;
  进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
  2. myisamchk, isamchk
  其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
  1.myisamchk tablename.MYI
  进行检测,如果需要修复的话,可以使用:
  1.myisamchk -of tablename.MYI
  关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL(和PHP搭配之最佳组合)服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL(和PHP搭配之最佳组合)服务器Shutdown掉。
  另外可以把下面的命令放在你的rc.local里面启动MySQL(和PHP搭配之最佳组合)服务器前:
  1.[ -x /tmp/MySQL(和PHP搭配之最佳组合).sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
  其中的/tmp/MySQL(和PHP搭配之最佳组合).sock是MySQL(和PHP搭配之最佳组合)监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/MySQL(和PHP搭配之最佳组合)/MySQL(和PHP搭配之最佳组合).sock,对于使用源码安装则是/tmp/MySQL(和PHP搭配之最佳组合).sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL(和PHP搭配之最佳组合)数据库存放的位置。
  需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL(和PHP搭配之最佳组合)服务器必须没有启动!
  检测修复所有数据库(表)
  MySQL(和PHP搭配之最佳组合)check -A -o -r -p
  以上的相关内容就是对修复损坏的MySQL数据表的介绍,望你能有

PHP 执行MySQL存储过程 can’t return a result set in the given context及参数解释

自己写了一个mysql存储过程,以为php有用于调用存储过程的内建函数,查了一下发现只能用mysql_query(call pro())这样的方式,我认为从本质上也就相当于在mysql命令行里执行语句了,由于我的存储过程含有输入输出参数,直接调用会报一个 mysql_error错误:XXXXcan’t return a result set in the given context

google了一下这个错误发现有人用以下的代码解决了这个问题:
原文地址:http://www.phpweblog.net/GaRY/archive/2008/01/29/2752.html#Post

关键就是两点

define(‘CLIENT_MULTI_RESULTS’, 131072);

$link= mysql_connect(“127.0.0.1″,”root”,”",1,CLIENT_MULTI_RESULTS) or die(“Could not connect: “.mysql_error());

下面就可以正常使用了,以下是例子程序。

 

1 <?php
2 define(‘CLIENT_MULTI_RESULTS’, 131072);
3
4 $link=mysql_connect(“127.0.0.1″,”root”,”",1,CLIENT_MULTI_RESULTS)ordie(“Could not connect: “.mysql_error());
5 mysql_select_db(“vs”)ordie(“Could not select database”);
6 ?>
7
8 <?php
9 $result=mysql_query(“call get_news_from_class_id(2)”)ordie(“Query failed:”.mysql_error());
10 while($row=mysql_fetch_array($result,MYSQL_ASSOC))
11 {
12 $line=’<tr><td><a target = _blank href=\”.$row["url"].’\'>’.$row["title"].’(‘.$row["page_time"].’)’.’</a></td></tr>’;
14 echo$line;
15 printf(” “);
16
17 }
18 mysql_free_result($result);
19 ?>
20
21 <?php
22 mysql_close($link);
23 ?>

其中的一个参数CLIENT_MULTI_RESULTS不明白是什么意思,google之,在mysql的官方主页上关于mysql提供的c接口的文档 (http://dev.mysql.com/doc/refman/5.0/en/mysql-real-connect.html)里找到了这个参数 和其他一些参数,我大概翻译了一下描述,如下:

Flag Name Flag Description
CLIENT_COMPRESS Use compression protocol.(使用压缩协议。)
CLIENT_FOUND_ROWS Return the number of found (matched) rows, not the number of changed rows.(返回找到(匹配)的行数,而不是改变了的行数。)
CLIENT_IGNORE_SIGPIPE Prevents the client library from installing a SIGPIPE signal handler. This can be used to avoid conflicts with a handler that the application has already installed.(阻止客户端库安装一个SIGPIPE信号处理器。这个可以用于当应用程序已经安装该处理器的时候避免与其发生冲突。)
CLIENT_IGNORE_SPACE Allow spaces after function names. Makes all functions names reserved words.(允许在函数名后使用空格。所有函数名可以预留字。)
CLIENT_INTERACTIVE Allow interactive_timeout seconds (instead of wait_timeout seconds) of inactivity before closing the connection. The client’s session wait_timeout variable is set to the value of the session interactive_timeout variable.(允许使用关闭连接之前的不活动交互超时的描述,而不是等待超时秒数。客户端的会话等待超时变量变为交互超时变量。)
CLIENT_LOCAL_FILES Enable LOAD DATA LOCAL handling.
CLIENT_MULTI_RESULTS Tell the server that the client can handle multiple result sets from multiple-statement executions or stored procedures. This flag is automatically enabled if CLIENT_MULTI_STATEMENTS is enabled. See the note following this table for more information about this flag.(通知服务器客户端可以处理由多语句或者存储过程执行生成的多结果集。当打开CLIENT_MULTI_STATEMENTS时,这个标志自动的被打开。可以在本表后查看更多关于该标志位的信息。)
CLIENT_MULTI_STATEMENTS Tell the server that the client may send multiple statements in a single string (separated by “;”). If this flag is not set, multiple-statement execution is disabled. See the note following this table for more information about this flag.(通知服务器客户端可以发送多条语句(由分号分隔)。如果该标志为没有被设置,多条语句执行。)
CLIENT_NO_SCHEMA Don’t allow the db_name.tbl_name.col_name syntax. This is for ODBC. It causes the parser to generate an error if you use that syntax, which is useful for trapping bugs in some ODBC programs.(不允许“数据库名.表名.列名”这样的语法。这是对于ODBC的设置。当使用这样的语法时解析器会产生一个错误,这对于一些ODBC的程序限制bug来说是有用的。)
CLIENT_ODBC Unused.(不使用)
CLIENT_SSL Use SSL (encrypted protocol). This option should not be set by application programs; it is set internally in the client library. Instead, use mysql_ssl_set() before calling mysql_real_connect().(使用SSL。这个设置不应该被应用程序设置,他应该是在客户端库内部是设置的。可以在调用mysql_real_connect()之前调用mysql_ssl_set()来代替设置。)
CLIENT_REMEMBER_OPTIONS Remember options specified by calls to mysql_options(). Without this option, if mysql_real_connect() fails, you must repeat the mysql_options() calls before trying to connect again. With this option, the mysql_options() calls need not be repeated.(记住通过调用mysql_options()生成的设置。如果不使用这个设置,当mysql_real_connect失败时,再重新连接之前必须反复调用mysql_options()。当然,如果使用这个设置,就不必反复调用了。)

下面有对于CLIENT_MULTI_STATEMENTS的说明:
If you enable CLIENT_MULTI_STATEMENTS or CLIENT_MULTI_RESULTS, you should process the result for every call to mysql_query() or mysql_real_query() by using a loop that calls mysql_next_result() to determine whether there are more results. For an example, see Section 20.9.12, “C API Support for Multiple Statement Execution”.

如果打开了CLIENT_MULTI_STATEMENTS或CLIENT_MULTI_RESULTS,你必须对每一个mysql_query()或者mysql_real_query()的调用结果通过一个循环来处理,在这个循环中,调用mysql_next_result()来决定(发现)是否有更多的结果,如Section 20.9.12, “C API Support for Multiple Statement Execution”

 

来源:http://edu.codepub.com/2010/0921/26012.php

PHP+MySQL数据分页

<?php
if($_GET["page"]){
	$page=$_GET["page"];#获取要显示的页码
}else{
	$page=1;#没有参数传入时,显示第一页
}
$col=13;#每页显示记录条数
$p=($page-1)*$col;
mysql_connect("127.0.0.1:3306","root","");
mysql_query("set names gbk");
mysql_select_db("php");#数据库中需要事先建product表并插入数据,含有name和price字段。
$result=mysql_query("select * from product limit ".$p.",".$col."");
echo "
<table BORDER=1>
<tr>
<th>name</th>
<th>price</th>
</tr>
";
while($rs=mysql_fetch_object($result))
{
echo "<tr>
<td>".$rs->name."</td>
<td>".$rs->price."</td>
</tr>
";
}
echo "</table>";
$count=mysql_query("select name from product");#取得记录总条数
$num = mysql_num_rows($count)/$col;#计算页数
$num=ceil($num);#无条件小数进位确定总页数
mysql_close();
if($page==1){
	echo '上一页';
}else{
	echo "<a href=?page=".($page-1).">上一页</a>";
}
echo " 第".$page."页 ";
if($page==$num){
	echo '下一页<br>';
}else{
	echo "<a href='?page=".($page+1)."'>下一页</a><br>";
}

if($page==1){
}else{
	echo "<a href='?page=1'>第一页</a><<<";
}

for($i=-2;$i<=2;$i++){
	if(($page+$i)>$num||($page+$i)<1){

	}else{
		echo " <a href=?page=".($page+$i).">".($page+$i)."</a> ";
	}
}
if($page==$num){
}else{
	echo ">>><a href='?page=".$num."'>最后一页</a><br>";
}
?>
<form action="" method='get'>
跳转到<input type='text' name='page'>页
<input type='submit' value="确定">
</form>

原文:http://www.oschina.net/code/snippet_104588_2169

备份数据库为SQL文件

<!?php  

/******   备份数据库结构 ******/  

      /*
      函数名称:table2sql()
      函数功能:把表的结构转换成为SQL
      函数参数:$table: 要进行提取的表名
      返 回 值:返回提取后的结果,SQL集合
      函数作者:heiyeluren
      */  

     function table2sql($table)
      {
          global $db;
         $tabledump = "DROP TABLE IF EXISTS $table;\n";
         $createtable = $db--->query("SHOW CREATE TABLE $table");
         $create = $db->fetch_row($createtable);
         $tabledump .= $create[1].";\n\n";
          return $tabledump;
      }  

     /****** 备份数据库结构和所有数据 ******/
      /*
      函数名称:data2sql()
      函数功能:把表的结构和数据转换成为SQL
      函数参数:$table: 要进行提取的表名
      返 回 值:返回提取后的结果,SQL集合
      函数作者:heiyeluren
      */
     function data2sql($table)
      {
          global $db;
         $tabledump = "DROP TABLE IF EXISTS $table;\n";
         $createtable = $db->query("SHOW CREATE TABLE $table");
         $create = $db->fetch_row($createtable);
         $tabledump .= $create[1].";\n\n";  

         $rows = $db->query("SELECT * FROM $table");
         $numfields = $db->num_fields($rows);
         $numrows = $db->num_rows($rows);
          while ($row = $db->fetch_row($rows))
          {
             $comma = "";
             $tabledump .= "INSERT INTO $table VALUES(";
              for($i = 0; $i < $numfields; $i++)
              {
                 $tabledump .= $comma."'".mysql_escape_string($row[$i])."'";
                 $comma = ",";
              }
             $tabledump .= ");\n";
          }
         $tabledump .= "\n";  

          return $tabledump;
      }
?>  

<!--?php
$host="localhost"; //主机名
$user="root"; //MYSQL用户名
$password="root"; //密码
$dbname="dedecmsv4"; //备份的数据库       

mysql_connect($host,$user,$password);
mysql_select_db($dbname);       

$q1=mysql_query("show tables");
while($t=mysql_fetch_array($q1)){
$table=$t[0];
$q2=mysql_query("show create table `$table`");
$sql=mysql_fetch_array($q2);
$mysql.=$sql['Create Table'].";\r\n\r\n";#DDL       

$q3=mysql_query("select * from `$table`");
while($data=mysql_fetch_assoc($q3))
{
$keys=array_keys($data);
$keys=array_map('addslashes',$keys);
$keys=join('`,`',$keys);
$keys="`".$keys."`";
$vals=array_values($data);
$vals=array_map('addslashes',$vals);
$vals=join("','",$vals);
$vals="'".$vals."'";       

$mysql.="insert into `$table`($keys) values($vals);\r\n";
}
$mysql.="\r\n";       

}
$filename=date('Ymd')."_".$dbname.".sql"; //文件名为当天的日期
$fp = fopen($filename,'w');
fputs($fp,$mysql);
fclose($fp);
echo "数据备份成功,生成备份文件".$filename;
?>
原文:http://www.oschina.net/code/snippet_102132_1427

MySQL字符串处理之一个字段包含多个ID的解决

如果在MySQL中一个表中存着一个字段包含多个Id,应该如何处理呢,下面就为您介绍这种MySQL字符串问题的处理方法,希望对您学习MySQL字符串方面能有所帮助。

(更多…)

MySql 判断汉字、日期、数字的函数

几个平常用的mysql函数

/*****************************************************
1.判断字符串是否为汉字 返回值:1-汉字 0-非汉字

*****************************************************/

(更多…)

MySQL 字符串函数:字符串截取

MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活。

(更多…)

删除MySQL的日志

mysql如果保留日志的话,时间长了,会产生很多日志,很占空间,可以用以下方法删除:

show master logs;

reset master;

show master logs;

就ok了。

====事例====

mysql> show master logs;
+——————+————+
| Log_name         | File_size  |
+——————+————+
| mysql-bin.000016 | 1073741951 |
| mysql-bin.000017 | 1073742130 |
| mysql-bin.000001 | 1073742026 |

……

mysql> reset master;
Query OK, 0 rows affected, 155 warnings (24.84 sec)

mysql> show master logs;
+——————+———–+
| Log_name         | File_size |
+——————+———–+
| mysql-bin.000001 |    737352 |
+——————+———–+
1 row in set (0.00 sec)

MySQL中过一句SQL更新存储过程的definer

MySQL远程调用问题,mysql里面有个proc的系统表,只要将里面的definer字段由root@%改为root@localhost就行了,一个sql语句搞定.

update mysql.proc p
set definer = ‘root@localhost’
where db = ‘mblog_dot_cc’;

改回则:

update mysql.proc p
set definer = ‘root@%’
where db = ‘mblog_dot_cc’;

Twitter Delicious Facebook Digg Stumbleupon Favorites 更多
如非标明[原创]的内容均来自互联网,如有侵权请来信告知以便删除。