1. mysql启动时,若使用mysqld_safe的方式启动服务,需要使用mysqladmin shutdown的方式来停止服务。

若使用mysqld shutdown的方式停止服务,有可能会出现如下报错:

    InnoDB: Unable to lock ./ibdata1, error: 11
    InnoDB: Check that you do not already have another
mysqld process

原因推测为:mysqld_safe启动mysql服务之后,mysqld_safe自身也占用着mysqld的进程,导致无法单纯使用mysqld进行服务的关闭。

2. mysql安装结束后,因为linux中的mysql,对表名是默认区分大小写的,应当尽快在my.cnf文件的[mysqld]下,添加“lower_case_table_names=1”

此语句的作用,在广泛意义上,可以理解为:对表名不区分大小写

但准确理解应当为:对输入语句中的表名,先将表名强制转为小写,再执行语句。

3. 若使用 DROP SCHEMA schema_name 或 DROP DATABASE database_name 欲删除数据库时报以下错误:

ERROR 1010 (HY000): Error dropping database (can’t rmdir ‘.\[schema_name/database_name]’, errno: 17)

可能为:

1. 数据库文件目录中的文件包含人为添加的文件

2. mysql的清理动作没有将数据库文件目录中的数据对象文件完全清理。

上述两种情况,均属于执行rmdir之前,对应的目录没有清空

上述所说的数据库文件目录,是指:my.cnf文件中的datadir目录下,DROP SCHEMA或DROP DATABASE语句中的schema_name或database_name对应的目录名称。

如:my.cnf文件中,datadir 为“/var/lib/mysql”,报错是在执行“DROP SCHEMA hap_dev”发生,则 数据库文件目录 为“/var/lib/mysql”,此目录正常情况下应当只包含在mysql中创建的数据对象的文件,如:创建了表“sys_lang_b”之后,此目录就会产生sys_lang_b对应的数据对象文件。

结合今天的经历,描述一下上述的2和3:

A. 首先,在没有配置“lower_case_table_names=1”的情况下,启动数据库并且使用脚本批量创建了数据对象,语句中的表名均为大写。schema名为“hap_dev”

B. 然后,发现进行查询时,只有使用表名大写才能查询到相应的表,以sys_lang_b为例:

“select * from sys_lang_b”查询失败

“select * from SYS_LANG_B”查询成功

C. 配置“lower_case_table_names=1”并重启mysql服务

D. 此时会发现,无论使用“select * from sys_lang_b”还是 “select * from SYS_LANG_B”都无法查找到sys_lang_b这张表,因为:

在一开始批量创建数据对象时,sys_lang_b就是以大写的“SYS_LANG_B”存入数据库的,而配置了“lower_case_table_names=1”之后,输入的语句中的表名,无论大小写都会先转为小写再去执行,即最终执行的语句都是“select * from sys_lang_b”,导致无法查询到“SYS_LANG_B”。

E. OK现在需要清理整个数据库然后再使用脚本重新批量创建对象。收回schema(hap_dev)所涉及的用户的所有权限,并将用户删除,然后执行“drop schema hap_dev”。

执行“drop schema hap_dev”时报错:ERROR 1010 (HY000): Error dropping database (can’t rmdir ‘./hap_dev’, errno: 17)

F. 在网上查阅发现,大多数情况为:在datadir/schema_name(笔者相应的目录为:/var/lib/mysql/hap_dev)目录下,存在人为产生的非数据库对象文件,导致mysql执行rmdir时,因对应的目录不为空而报错

而linux中rmdir的语法,的确要求其对应的目标目录需要为空目录

在上述事实下,我们可以这样推断,mysql执行drop schema时,会先清理数据对象,因此datadir/schema_name下的数据对象文件会先被清空,若清空数据对象文件后,datadir/schema_name目录下仍存在文件,则rmdir报错。

G. 现在来看看我的情况,在我的/var/lib/mysql/hap_dev目录下,均为之前批量创建的“SYS_LANG_B”等数据对象,不存在任何人为放进入的文件。同时,我也通过放开这个目录的所有权限排除了rmdir的权限问题。

也就是说,如果/var/lib/mysql/hap_dev最后不为空,则里面残留的很可能是数据对象,比如“SYS_LANG_B”等数据表。

是的!大写的“SYS_LANG_B”!

现在mysql中的配置是“lower_case_table_names=1”,在它进行“drop schema hap_dev”时,清理数据对象的阶段中,是否所有输入的表名全部转为小写了,导致“SYS_LANG_B”这些大写表名的数据表都不会被清空,/var/lib/mysql/hap_dev最终残留着这些数据对象文件,最终导致rmdir失败。

H. 是的,最终的解决方法的确奏效了:

取消配置“lower_case_table_names=1”后重启mysql服务,执行drop schema hap_dev成功。

接着再添加配置“lower_case_table_names=1”并重启mysql。执行批量创建数据对象的脚本之后,可正常查询。事实上,我们还会发现,此时数据库中的表名,实际上均为小写。

MySql中的一些小坑的更多相关文章

  1. 一次 react-router 中遇到的小坑

    react-router Link 标签不生效的问题 废话不多说, 直接上问题, 排解过程和答案 现象: 发现 使用 Link 标签没有 元素的样式和效果, 也不能进行跳转 代码如下: render( ...

  2. mysql中权限的小知识

    参考:https://www.cnblogs.com/apollo1616/articles/10294490.html mysql中user表中host列的值的意义 % 匹配所有主机 localho ...

  3. JDBC 连接 MySQL 时碰到的小坑

    最近从MS SQL Server换到了MySQL,已经是8.11版本了,安装的时候似乎还用了新的身份认证方式之类的,连接过程中也是磕磕绊绊,碰到很多奇奇怪怪的问题,在此记录下来. 驱动加载: 以前使用 ...

  4. python无法连接mysql,有个小坑,需要注意一下!

    尝试用python链接mysql数据库,按照教程里链接了小半夜,就是没有链接上,找了各种文章,最后发现是版本的问题,我想使用的模块是MySQLdb,刚刚去他们的官网看了一下,最近一次更新是2014年, ...

  5. JAVA开发过程中的各种小坑

    1.有时候你在本地跑的ECLIPSE中得到的正确的结果,部署到服务器上使用其他容器,如tomcat或WARS的时候,跑出的结果也许就不一致, 我们程序员会经常抱怨,在我机器上跑的好好的. 在不同的容器 ...

  6. Symfony4框架中单元测试和接口测试中的一些小坑

    前提说明: symfony 版本 4.1.*,使用  composer create-project symfony/website-skeleton  进行安装. 目标:在一个单元测试用例中对当前工 ...

  7. iOS总结:项目中的各种小坑汇总

    一.字符串转JSON 在网络请求时,如果服务端返回的是字符串,那么就需要我们自己封装一个类,将请求下来的字符串转换成json对象,从而存入模型中. 注意: 字符串中如果含有一些特殊转意符(如\n.\t ...

  8. python开发中常见的小坑

    (1)可变参数类型作为函数参数默认值,函数参数默认值的设置在Python中只会被执行一次,也就是定义该函数的时候. 解决办法,设置为None,然后判断 (2)Python中的变量名解析遵循所谓的LEG ...

  9. 今天碰到的angular 中的一个小坑

    最近在自个儿研究angular,在写一个demo的时候总是有问题,最后发现居然是大小写的问题,卧槽 特tm的坑爹了,代码如下: <!DOCTYPE html> <html lang= ...

随机推荐

  1. POJ 1837 Balance 水题, DP 难度:0

    题目 http://poj.org/problem?id=1837 题意 单组数据,有一根杠杆,有R个钩子,其位置hi为整数且属于[-15,15],有C个重物,其质量wi为整数且属于[1,25],重物 ...

  2. Java 算法 概念汇总

    编程面试的10大算法概念汇总   以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java ...

  3. bzoj1935

    题解: x升序排序 y离散化+树状数组 代码: #include<bits/stdc++.h> using namespace std; ; inline int read() { ,f= ...

  4. python全栈开发笔记---------基本数据类型

    基本数据类似包括: 字符串(str) 数字(int) 列表(list) 元祖(tuple) 字典(dict) 布尔值(bool) 字符串(引号): name = "我是某某某" n ...

  5. 协程(Coroutine)与多线程,多进程

    执行多个任务可以使用多线程或多进程. 多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响 多线程中,所有变量都由所有线程共享.而线程间的切换是系统进行调度,无法控制,所以可能 一个进程中的 ...

  6. tensorflow-softmax

    之前在softmax多分类中讲到多用交叉熵作为损失函数,这里顺便写个例子,tensorlflow练手. # encoding:utf-8 import tensorflow as tf import ...

  7. 2017-2018-2 20165214 实验四《Android开发基础》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:朱文远 学号:20165214 指导教师:娄嘉鹏 实验日期:2018年5月14日 实验时间:15:35 - 17:15 实验序号:四 ...

  8. php session (二): 同样的代码 ,不同域名访问 对session存储的影响.

    一:准备工作: 位置: htdocs a目录: sessiona.php b目录 sessionb.php c目录 sessionc.php ------ sessiona.php <?php ...

  9. 2019-03-29-day022-封装与类方法与静态方法

    昨日回顾 抽象类 规范代码,规定子类必须实现某个方法的名字 不能实例化 from abc import ABCMeta, abstractmethod class 抽象类名(metaclass=ABC ...

  10. JS之鼠标改变img

    代码用途: 通过点击图片,来改变图片内容 代码: <!DOCTYPE html> <html> <body> <script> function cha ...