mysql实用命令

MySQL指定字段的特定字符串批量替换的具体代码如下:

UPDATE 表名 SET
指定字段 = replace (指定字段, ‘想要替换的字符串’, ‘替换成的字符串’)
WHERE 条件;

mysql命令行查看编码:
show global variables like “%char%”;
show variables like “%char%”;
show variables like ‘character%’;

数据库导入命令:
shell> mysql -h 10.0.0.110 -P 3306 -uroot -p
mysql> use mysqldb;
mysql> set names gbk;
mysql> source mysqldb.sql

mysql -h 10.0.0.23 -P 3306 -uroot -p123456 –default-character-set=gbk -f mysqldb < mysqldb.sql 数据库导出命令: mysqldump -uroot -p123456 mysqldb --default-character-set=gbk > mysqldb.sql
需要注意的是默认字符集设置,不然会乱码。mysqldump默认为utf8编码,这个指定一定要和表一致

授权其他用户操作数据库:
grant SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, ALTER on *.* to ‘myuser’@’%’ identified by ‘mypasswd’;

其中*.* 库名和表名,myuser是用户名,mypasswd是密码
root用户可以使用mysql的grant命令对其他用户进行授权,注意不能使用grant all进行授权。
目前shutdown和file权限没有开放给root用户,因此root不能新建拥有所有权限的用户。

创建数据库:
create database abc DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

打开慢查询:
mysql -uroot -p //登录数据库
show variables like ‘%slow%’; //查看慢查询设置
set global slow_query_log=ON; //临时打开慢查询,重启后会失效

my.cnf配置文件中设置方法:
slow_query_log
slow_query_log_file = /var/log/slow_queries

mysql定制化导出数据:
1.导出结构不导出数据
mysqldump -d 数据库名 -uroot -p > xxx.sql

2.导出数据不导出结构
mysqldump -t 数据库名 -uroot -p > xxx.sql

3.导出数据和表结构
mysqldump 数据库名 -uroot -p > xxx.sql

4.导出特定表的结构
mysqldump -uroot -p -B数据库名 –table 表名 > xxx.sql

No space left on device问题,inode爆满

对于linux的分区查看是否使用占满通常我们都会通过df -h查看,但是还存在有另外一种情况,就是当前分区中存在数量庞大的细小文件时(一般可能都是0-4Byte的文件,通常是由于程序的缓存机制造成的),也会造成空间满的问题,具体创建文件时候会提示“No space left on device”。

我们可以通过df -i查看,某一个分区的inode满了。

现象:
对于这种情况可以通过df -hi查看,一般会看到IUse%=100%,IFree=0,Inodes=IUsed,这就说明inode满了。
查找问题:
这个时候我们要进入到问题分区对应的挂载目录,可以通过find ./ -type f来查看,当发现一个路径下的文件一直很长时间都不断的显示时候,我们就可以定位造成的问题路径和文件了。
或者确定是有0字节或其他固定大小的细小文件造成的,通过查找0字节或其他具体字节来确定路径。其命令为:find ./ -type f -size 0(如果细小文件不是0字节或不确定大小此方法就不适用)
再有一种可以通过统计对应目录的文件数量进行判断,操作命令为:for i in ./*; do echo $i; find $i | wc -l; done
处理方法:
当确定路径后,我们就可以进行清理工作了。由于文件非常多时,rm等很多命令直接使用都会报错(Argument list too long)使用不了,可以使用查找问题的方式来进行操作,进入到问题目录下,具体操作为:

find ./ -type f |xargs rm

在网上还有其他一些清理文件的命令,提供了不同的思路,这里也记录参考一下:

例1:
lsattr ./|awk -F"/" '{print $2}' | xargs -i rm -rf {}
注:此方法要确定lsattr查看后的文件名是第几列,根据实际情况定义awk的列,在这里是根据/为分隔符的第二列是文件名

例2:
find ./ -exec rm {} \

特别说明:
在ext3文件系统下,默认的block是4096,inode是8192,inode的大小是128,但在ext4文件系统下,默认的block是4096,inode是16384,inode的大小是256。因此如果是很多的小文件存在,比如有非常多的文件小于16384Byte以下的文件存在,在ext4文件系统上比ext3上更容易出现inode满而block没满的问题。
对于这种问题,我们可以在进行分区格式化时候人工指定inode的匹配大小,具体来说可以这样:mkfs.ext4 -b 4096 -i 8192 /dev/sdb1。这样设置就和ext3的block和inode的分配一样了。

关于inode的知识点:
inode这个概念是存在于linux的ext文件系统中。
对于硬盘来说,最小的存储单位是扇区(sector),每个扇区可存储512个字节(Byte)。但对于ext文件系统的linux操作系统,读取硬盘时候不是一个扇区一个扇区去读取,而是一次性连续读取多个扇区,这多个扇区就构成了ext文件系统的最小存储单位“块”(block),它是文件存储的最小单位。块的大小一般是4KB,即连续八个扇区组成一个块。
文件的数据都是存储在“块”中,那么还需要一个地方用来存储文件的元信息,例如文件的创建者、创建日期、大小、权限等(文件内容如果相当于书,那么这其实可以比喻成书的出版社字数等信息)。这个文件的元信息在ext系统中就被叫做inode,一般被译为“索引节点”或“i节点”。
一般可以用stat命令查看某个文件的inode信息,例如:stat install.log
硬盘在被系统格式化成ext系统的时候,操作系统会自动讲硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。这个其实在格式化完一个分区后,把分区挂载好后,df -h就可以看到没有任何文件的分区会有一定的占用,这个其实就是inode占用的空间。
查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令,具体是:df -i
查看每个inode节点的大小,可以用如下命令:
dumpe2fs -h /dev/sda1 | grep "Inode size"
由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。
每个inode都有一个号码,linux操作系统用inode号码来识别不同的文件,系统内部不使用文件名。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。
使用ls -i命令,可以看到文件名对应的inode号码,例如:ls -i install.log

inode的特殊作用:
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

参考:http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html
http://blog.chinaunix.net/uid-8504518-id-2030619.html