mysql: 数据库无法连接,日志太多。

自从上次因为系统盘的数据满了,导致mysql无法连接,所以就修改mysql数据库文件路径,转移到数据盘。结果这段时间mysql总是链接不上,所以只好一步一步找原因,来解决这个问题。 第一步: 查找链接不上的原因 1. 查看磁盘大小 发现数据盘也满了,不太可能啊,数据盘有50个G,咋就一下就满了呢? 2. 查看数据盘的文件大小 发现mysql/datadir文件夹占了46个G,这个文件夹不就是mysql数据库文件目录。 3. 查看数据库文件夹 全部都是日志文件,并且大部分都是日志文件占容量了。 4. 再次查看磁盘容量 第二步: 解决mysql连接不上的问题 1. 删除mysql-bin.000*日志文件 2. 修改mysql的配置文件my.cf 3. 注释mysql-bin日志 4. 重启mysqld服务 发现报错,原因是不仅要注释log-bin=mysql-bin,还要注释binlog_format=mixed. 5. 再次修改mysql配置文件 6. 重启成功。

Centos7.0: mysql无法启动,修改mysql数据库文件路径

Jhonse技术博客和Jhonse技术论坛对应的数据库文件路径都是默认在系统盘,这几天数据库都是连接不上,一开始还以为mysql或者服务器的问题,结果在centos上查看了下磁盘容量,原来系统盘已经满了,所以只好把mysql数据库文件转移到数据盘。 第一步: 查看mysql无法启动原因 1. Jhonse技术博客无法连接数据库 2. 启动mysqld服务 3. 重启mysqld服务 4. 查看磁盘容量 通过以上重启mysqld服务,都提示无法重启mysqld服务,所以只好查看下磁盘是否已用完。通过df -a命令发现系统盘/dev/vxda1已使用100%。 第二步: 修改mysql数据库文件路径 1. 找到mysql的配置文件/etc/my.cf 2. 编辑my.cf文件 3. 修改datadir以及socket和日志路径 4.  将mysql数据库文件移动到自定义的目录下 5. 重启mysqld服务 第三步: 测试网站连接数据库 1. 发现网站还是无法连接数据库 直接报错#2002,解决方法是: 将链接数据库的主机名从localhost改为127.0.0.1就可以了。 2. 修改完主机为127.0.0.1之后,又接着报错#1103 需要把用户的host修改为%,很是麻烦。 3. 修改用户的host值 4. 另外一个简单的方法 通过以上2步就可以让网站可以链接数据库了,但是感觉麻烦,所以查看了下#2002码得出原因如下。 5. 解决方法 在mysql配置文件中只修改datadir路径和日志路径即可

[mysql] 实现事件调度器(Event Scheduler)以及计划任务

MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。 要查看当前是否已开启事件调度器,可执行如下SQL: SHOW VARIABLES LIKE ‘event_scheduler’; 或 SELECT @@event_scheduler; 或 SHOW PROCESSLIST; 显示: +—————–+——-+ | Variable_name   | Value | +—————–+——-+ | event_scheduler | OFF   | +—————–+——-+ 则可执行 SET GLOBAL event_scheduler = 1; 或 SET GLOBAL event_scheduler = ON; 来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如: mysqld … –event_scheduler=1 my.ini or my.cnf 中的 [mysqld] 添加 event_scheduler=ON  创建事件(CREATE EVENT) 先来看一下它的语法: CREATE EVENT [IF … Continue reading “[mysql] 实现事件调度器(Event Scheduler)以及计划任务”

[mysql] 实现存储过程

1. CREATE  PROCEDURE  (创建) CREATE PROCEDURE存储过程名 (参数列表) BEGIN SQL语句代码块 END  注意: 由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词 OUT或INOUT 在mysql客户端定义存储过程的时候使用delimiter命令来把语句定界符从;变为//。 当使用delimiter命令时,你应该避免使用反斜杠(‘”’)字符,因为那是MySQL的转义字符。 如: mysql> delimiter // mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) -> BEGIN -> SELECT COUNT(*) INTO param1 FROM t; -> END -> // Query OK, 0 rows affected (0.00 sec) 2.  ALTER  PROCEDURE (修改) ALTER PROCEDURE 存储过程名SQL语句代码块 这个语句可以被用来改变一个存储程序的特征。 3.  DROP … Continue reading “[mysql] 实现存储过程”

[mysql]解决Database query failed: Incorrect integer value: ” for column ‘id’ at row 1问题

升级Mysql数据库之后,发现有个项目出现Database query failed: Incorrect integer value: ” for column ‘id’ at row 1错误,然后在程序中找到对应报错的代码,原因是数据库插入数据的问题: $sql = “INSERT INTO “.self::$table_name.” VALUES (”, ‘$user_id’, ‘$first_name’, ‘$last_name’, ‘$gender’, ‘$username’, ‘$password’, ‘$email’, ‘$activated’, ‘0’, ‘$datetime’, ”, ‘$signup_ip’, ‘$signup_ip’, ‘$country’, ‘0’, ‘0’, ”, ‘0’, ‘0’,’0′,’0′,’0′,”)”; 原来出错在ID字段,ID字段是int类型以及keyword、自增.而现在插入的数据中,却把ID的值设置为空,所以就会提示Database query failed: Incorrect integer value: ” for column ‘id’ at row 1这样的错误哦。 经网上资料得知此问题一般mysql 5.x上出现。 既然发现出错的地方,那我们就来解决这个问题。 … Continue reading “[mysql]解决Database query failed: Incorrect integer value: ” for column ‘id’ at row 1问题”

[mysql]修改mysql数据库文件路径之后,重启出错(1067)

通过之前写的博文[修改mysql数据库文件路径]来自定义mysql数据库文件路径,但是修改完之后,重启mysql服务,提示1067错误,无法启动mysql。   于是开始找原因,查看了下自定义目录:D:/mysql/data,以及默认的数据库文件目录(C:/mysql/data),发现默认的数据库文件目录多了两个文件夹(mysql和test)。原来是默认安装的Mysql中有一个配置数据库以及测试数据库,所以自定义的数据库文件目录下也需要对应的两个数据库的配置信息。   解决方法: 复制该两个数据库的配置信息(也就是mysql目录和test目录),放到自定义的目录下即可。然后重启mysql服务,就正常运行了。

【mysql】报错:The ‘InnoDB’ feature is disabled; you need MySQL built with ‘InnoDB’ to have it working

再导入数据库文件(.sql)的时候,突然来个报错:The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working,于是就开始找原因. 首先: 在命令行查看了下SHOW variables like "have_%"; 发现innodb不能使用。 然后又查看了下,innodb插件是否安装了。发现已经安装了,只是为激活状态。 安装了为什么没有激活,后来网上查找了下,然后查看my.ini文件,发现skip-innodb 这个属性被开启了,只要屏蔽掉就可以了,在前面加上#号。 最后重启mysql 服务就OK了。 (参考roemin博客)

【mysql】获得数据库中表的所有字段名

将数据库的表数据导出到Excel文件中的时候,可能需要用到对应的表字段名,作为Excel表格的每列标题,所以就需要用SQL代码来获取数据库中对应表的所有字段名,然后和数据一一循环显示出来。请看如下代码: /** * 获得表中所有字段名 * Enter description here … * @param unknown_type $tablename */ private function get_itemname($tablename){ $sql = “select COLUMN_NAME as name from information_schema.COLUMNS where table_name = ‘”.$tablename.”‘”; $this->load->model ( ‘admin_model’ ); $arrdatas = $this->admin_model->find($sql); $itemname = array(); foreach($arrdatas as $data){ $NameValue = $data->name; if($NameValue == “id”){ continue; } $itemname[] = $NameValue; } return … Continue reading “【mysql】获得数据库中表的所有字段名”

【mysql】修改mysql数据库文件路径

最近一段时间,都很少写技术博文了,其原因是在公司上班的事情有点多,所以就很少时间更新了。这两天一直在忙windows server 2008服务器的事,不过在安装mysql的时候,确实遇到了一个问题:如何修改mysql数据库文件路径。我把mysql安装在系统盘(C盘),现在考虑的问题是不可能也让数据库文件也存放在C盘,所以就动手修改。操作步骤如下: 1. 关闭mysql服务:net stop mysql(mysql服务名称,可能是因为版本的问题,服务名称不一样) 2. 在mysql目录下找到my.ini。可能刚安装好的mysql,没有my.ini文件,而是my-default.ini.所以我们要copy一份出来,然后修改名称为my.ini即可。 3. 在my.ini文件中,修改datadir位置(自定义数据库文件目录) 4. 查看数据库文件路径 mysql> show variables like '%dir%'; 5. 完毕!

【mysql】union用法(合并三张表的数据查询)

最近公司的项目,需要用到一个功能,就是要获得数据库中三张表的数据,并按时间的顺序显示出来。一开始想到的是jion,最后一分析,发现jion,只能把表的数据左右合并,而没有“叠加”的功能。所以就用到union来整合三张表的数据。 先来看下网上对union的定义: 一 UNION语法    SELECT …     UNION[ALL | DISTINCT]     SELECT …     [UNION [ALL | DISTINCT]     SELECT …]      UNION用于把来自许多SELECT语句的结果组合到一个结果集合中。    列于每个SELECT语句的对应位置的被选择的列应具有相同的类型。(例如,被第一个语句选择的第一列应和被其它语句选择的第一列具有相同的类型。)在第一个SELECT语句中被使用的列名称也被用于结果的列名称。    SELECT语句为常规的选择语句,但是受到如下的限定:  ·只有最后一个SELECT语句可以使用INTO OUTFILE。  ·HIGH_PRIORITY不能与作为UNION一部分的SELECT语句同时使用。如果您对第一个 SELECT指定了HIGH_PRIORITY,则不会起作用。如果您对其它后续的SELECT语句指定了HIGH_PRIORITY,则会产生语法错误。    如果您对UNION不使用关键词ALL,则所有返回的行都是唯一的,如同您已经对整个结果集合使用了DISTINCT。如果您指定了ALL,您会从所有用过的SELECT语句中得到所有匹配的行。    DISTINCT关键词是一个自选词,不起任何作用,但是根据SQL标准的要求,在语法中允许采用。(在MySQL中,DISTINCT代表一个共用体的默认工作性质。)    您可以在同一查询中混合UNION ALL和UNION DISTINCT。被混合的UNION类型按照这样的方式对待,即DISTINCT共用体覆盖位于其左边的所有ALL共用体。DISTINCT共用体可以使用UNION DISTINCT明确地生成,或使用UNION(后面不加DISTINCT或ALL关键词)隐含地生成。    如果您想使用ORDER BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括号,并把ORDER BY或LIMIT放到最后一个的后面。以下例子同时使用了这两个子句:  (SELECT a FROM tbl_name WHERE a=10 AND B=1)UNION(SELECT a … Continue reading “【mysql】union用法(合并三张表的数据查询)”