MySQL优化
表名大小写
linux下的MySQL数据库默认是区分表名大小写的,如果要忽略表名大小写,添加一个配置即可
# vi /etc/my.cnf 在[mysqld]栏下增加: lower_case_table_names = 0 #如果设置为1,则区分大小写,这是默认值 lower_case_table_names = 1
生产环境授权
删除多余的用户和测试库
mysql> drop user 'USER'@'主机域'; mysql> drop database test;
生产环境用户授权
①、博客、CMS等产品的数据库授权 对于web连接用户授权尽量采用最小化原则,很多开源软件都是web界面安装, 因此在安装期间除了select、insert、update、delete4个权限外, 还需要create、drop等比较危险的权限。 grant select,insert,update,delete,create,drop on blog.* to 'blog'@'%' identified by '123456'; ②生成数据库表后,要收回create、drop授权 revoke create,drop on blog.* from blog@'%';
查看某用户所拥有的权限
show grants for 'user_name'@'ip_address';
防止mysql不加where条件导致误操作
我们知道使用update、delete是一个非常危险的操作,如果使用这两个语句后面没有加where条件,那么将会导致整张表的记录被修改或删除。
其实我们只要在登录的时候加上 “-U”参数就可以避免这种情况的发生
# mysql -uroot -p123456 -U
为了以后方便,我们可以设置别名并加入到环境变量
# alias mysql='mysql -U' # echo "alias mysql='mysql -U'" >>/etc/profile
安全删除binlog
如果MySQL搭建了主从,或者数据库开启log-bin日志,那么随着时间的推移,数据库data目录下会产生大量的日志文件。生产环境中这些文件如果不做处理的话,会撑爆磁盘。
解决办法
如果你的数据库没有搭建主从同步,binlog日志也不用的情况下,可以将my.cnf文件下行删除或注释
[mysqld]
...
#log-bin=mysql-bin
如果你需要这样的文件,那么建议在my.cnf中添加如下行,来限制binlog日志文件存在的时间,过期自动删除
expire_logs_days = 7 # 只保留 7 天的日志文件
如果你想清除所有的binglog日志,可以使用下面的命令
mysql> reset master; # 清空所有 binlog 文件
如果MySQL做了主从,那么上面的命令就不适合你,因为binglog文件删除过多的话,会导致数据不同步
mysql> show slave status\G # 你首先要来 slave 上查看从库读 binlog 到了哪里 Master_Log_File: mysql-bin.000009 # 我们可以看到是 mysql-bin.000009 # 我们可以在 master 中执行这条指令 , 将 binlog 文件删除至 mysql-bin.000009 前 mysql> purge master logs to 'mysql-bin.000009'; mysql> purge master logs before '2014-11-18 00:00:00'; # 将 binlog 文件删除至此日期前
每天进步一点,加油!