注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 在服务器系统Windows 20..
 帮助

mysql笔记


2008-09-11 20:12:03
 标签:mysql   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xinying.blog.51cto.com/441770/98747
[url]http://imysql.cn/docs/MySQL_51_zh/mysql_51.html[/url](mysql中文手册)
查看数据库每个表的总记录数:
select TABLE_SCHEMA as databasename,table_name,TABLE_ROWs  from information_schema.TABLES where TABLE_SCHEMA='DBNAME'

查看mysql用户
use mysql;
select user,host from user;
  mysql导入导出数据:mysqldump -u root -p --opt dbname > backup-file.sql(导到本机里,反之从本机到数据库)

                 mysqldump -u root -p --opt dbname | mysql -h '192.168.10.225' - u promise -p linux2(导入另一台机子上,会提示输入密码,先输入远程机子数据库的密码,再输入本机数据库的密码,promise是远程主机的数据库用户)     
                 mysqldump -h '192.168.10.225' -u promise -p --opt linux2 | mysql -u root -p wo(从另外一台导入到本机,会提示输入密码,先输入本机数据库的密码,再输入远程机子数据库的密码)
                      grant select von 数据库.*    to 用户名@登录主机 identified by "密码"(添加用户)
  注:登录主机可以是本地(localhost)、远程(%),具体的IP
 show grants for username@localhost;(查看权限,super用户可以查看所有用户的权限,普通用户只能查看自己的权限)
  查看有哪些用户:   1.use mysql;2.select user from user;(只有super用户才能看)
  show processlist (查看客户端的连接状态,super用户可以查看所有用户,普通用户只能查看自己,取消自己:kill haoma)
删除用户:1.use mysql; 2.delete from user where user='username';3.flush privileges
    desc table_name;(获取表结构);

flush privileges  刷新权限
Index_priv 创建.编辑,删除索引
References_priv 创建.编辑,删除外建
mysqladmin -u root -p password 新密码(改密码)
 




InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。下面是已知的两者之间的差别,仅供参考。
1.InnoDB不支持FULLTEXT类型的索引。
2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势





Open_tables               4468      
Opened_tables             4481
从上面两个值的来看.你的table_cache=4468,此值表示放在缓存中的表个数.缓存中表的访问速度相比硬盘中的快很多.但同时Opened_tables这个值在两天时间内长的并不快.建议将table_cache值缩短为2/3

若Open_tables值等于table_cache值,同时Opened_tables打开的也非常多的话.就加大table_cache的值,不过会占用很大的内存.我的table_cache最大的时候.也就1024


3.key_buffer_size索引缓存大小问题
Key_read_requests         3757366791     从缓存读键的数据块的请求数
Key_reads                 858558                  从硬盘读取键的数据块的次数
这两个比较值Key_reads/Key_read_requests为1/100比较好.1/1000会更好.若是1/10就不好.若是1/10时,就加大索引缓存key_buffer_size。
   Key_write_requests
将键的数据块写入缓存的请求数。
·         Key_writes
向硬盘写入将键的数据块的物理写操作的次数。
Key_writes/Key_write_requests比例通常接近1

4.thread_cache_size线程缓存大小
Threads_created太大,就要增加my.cnf中thread_cache_size的值.可以用Threads_created/Connections计算cache命中率
Threads_created           942     
Connections               10841380
从上面的对比中.如何多的connections中才942个Threads_created.建议减小thread_cache_size值

max_connect_errors
A主机连接mysql服务器出现10次或更多连接错误,就会出现屏蔽掉A发起的任何连接,但是在mysqld重新启动或者执行用'mysqladmin flush-hosts'  或者 flush hosts才可以重新连接。


查看一个数据库的大小
mysql -e "show table status from URDB_NAME" | awk 'NR>=2{index_size+=$9;data_size+=$7}END{print "index_size\t"(index_size/1024/1024)"M";print "data_size\t"(data_size/1024/1024)"M"}'

本文出自 “新颖” 博客,请务必保留此出处http://xinying.blog.51cto.com/441770/98747



类别:数据库 技术圈()阅读() ┆ 评论()推送到技术圈返回首页  


    文章评论
 
2009-06-30 23:40:27
天书夜读.....

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: