Mysql忽略文件名的安全编码

author:skate
time:2014/09/28

mysql如何删除以“#sql-”开头的临时表

现象:在重建索引后,发现Mysql服务器的磁盘空间快满了

在用如下命令重建索引

mysql> alter table skatetab add unique index(id, uid), drop primary key, add primary key(uid, id);

在重建索引的过程中,因为空间不足,导致Mysql server reboot,重启之后发现空间少了100G。于是查看是哪个目录占用了这100G,最后发现在数据目录里发现
很多类似#sql-*.ibd临时文件和同文件名的#sql-*.frm。既然知道是临时表了,那就删除吧,肯定不能直接通过rm删除了,因为在ibdata里保存字典信息和Undo信
息,数据库重启后会报错的。

删除的方法:

在alter table的过程中,如果Mysql突然crash了,就会在数据目录里存在一些中间表,这些中间表是以“#sql-”开头的临时表,在你的数据目录里会看到
#sql-*.ibd和相应的 #sql-*.frm ,如果 #sql-*.ibd 和 #sql-*.frm两个文件都存在数据目录里的话,可以直接drop table,类似:

mysql> drop table `#mysql50##sql-928_2881064151`;

前缀”#mysql50#“是让Mysql忽略文件名的安全编码,这个前缀是在Mysql5.1引入的

因为我的数据目录里#sql-*.ibd 和 #sql-*.frm两个文件都存,所以直接drop就可以了,磁盘空间100多G也回收了,如下所示

mysql> drop table `#mysql50##sql-928_76f7`;
Query OK, 0 rows affected (16.28 sec)
说明:如果在数据目录里只有#sql-*.ibd,而没有#sql-*.frm的话,就需要特殊处理
1.在另一数据schema里创建一个和欲删除表一样的表结构(包括相同的列和索引)
mysql> create database test
mysql> create table test.tmp like skatetab; //只复制表的结构和索引,不复制数据

2.把新创建的临时表的.frm文件复制到欲删除的数据目录里,并修改和 ”#sql-*.ibd“一样的文件名

shell> cp test/tmp.frm #sql-928_76f7.frm

3.确认#sql-*.ibd 和 #sql-*.frm两个文件都存,然后直接drop,如下:
mysql> drop table `#mysql50##sql-928_76f7`;

时间: 2024-11-05 04:53:21

Mysql忽略文件名的安全编码的相关文章

mysql与服务器之间的编码问题

1.之前在练习一个java web的项目时,mysql的编码设置正确,服务器的编码也设置正确,但向mysql中存储数据时,就会出现乱码问题,后来发现是mysql与服务器之间的编码设置问题,以下是mysql的目录,复制my-default.ini该文件,并且命名为my.ini,这样根目录下就有两个.ini文件了,一个是my-default.ini,一个是my.ini . 2.接下来我们只需修改my.ini里面的内容就行了 在[mysqld]下面添加 character_set_server=utf

MySQL 创建数据库并且指定编码

GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;UTF8: CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci MySQL 创建数据库并且指定编码,布布扣,bubuko.com

Python&MySQL操作过程中遇到的编码问题

对于Python字符编码的理解 之前整理了一部分,这次主要是设计到数据库操作的. 下面是一些编码方面的概念和原理,以条目方式整理: CREATE DATABASE IF NOT EXISTS db_name DEFAULT CHARSET utf8 COLLATE utf8_general_ci; DEFAULT CHARSET是设置默认字符编码集,也就是数据在库内从存储编码,我的理解是在存储这个层面上的,如果SQL命令是以gbk方式传输数据的(cur.execute('SET NAMES ut

MySQL查看和修改字符编码

MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8. 1.需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:>mysql -u root –p,之后两次输入root用户的密码),查看数据库的编码方式命令为: >show variables like 'character%';+--------------------------+----------------------------+| Variable

PDO创建mysql数据库并指定utf8编码

<?php //PDO创建mysql数据库并指定utf8编码 header('Content-type:text/html; charset=utf-8'); $servername = "localhost"; $username = "root"; $password = ""; $dsn="mysql:host=$servername"; try { $pdo = new PDO($dsn, $username,

Docker安装MySQL忽略大小写问题的问题

原文:Docker安装MySQL忽略大小写问题的问题 连接MySQL: 查看当前mysql的大小写敏感配置show global variables like '%lower_case%';+------------------------+-------+| Variable_name          | Value |+------------------------+-------+| lower_case_file_system | ON    || lower_case_table_

MySQL对JSON类型UTF-8编码导致中文乱码探讨

前言 继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有点不解,于是乎,有了本文,我们来学习字符编码,在学习的过程中,我发现对于MySQL中JSON类型的编码导致数据中文出现乱码还有可深挖之处,接下来我们来分析一下,若有错误之处,还请批评指出. 字符编码 评论中指出任何不在基本多文本平面的Unicode字符,都无法使用MySQL的utf8字符集存储,包括Emoji 表情(Emoji 是一种特殊的Unicode 编码,常见于IOS和Android 手机上)和很多不常

Linux中MySQL忽略表中字段大小写

linux 下,mysql 的表面默认是区分大小写的,windows 下默认不区分大小写,我们大多数在windows 下开发,之后迁移到linux(特别是带有Hibernate的工程),可以修改配置是linux下,myql 表名不区分大小写 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:     1.数据库名与表名是严格区分大小写的:     2.表的别名是严格区分大小写的:     3.列名与列的别名在所有的情况下均是忽略大小写的:     4.变量名也是严格区分大小写

【MySQL】统一控制台-pma-PHP编码!解决中文乱码问题

折腾了很久,看了很多解决方案,要么就是pma能显示中文,控制台乱码,要么就PHP调用显示出来是乱码,很蛋疼,觉得必须要写个文章总结一下. 1. 理解MySQL的编码机制 MySQL处理连接时,外部连接发送过来的SQL请求会根据以下顺序进行转换: character_set_client           //客户连接所采用的字符集 | character_set_connection  //MySQL连接字符集 | character_set_database    //数据库所采用的字符集(