mysql笔记

1、mysql中文手册
http://imysql.cn/docs/MySQL_51_zh/mysql_51.html


2、查看数据库每个表的总记录数:
select TABLE_SCHEMA as databasename,table_name,TABLE_ROWs  from information_schema.TABLES where TABLE_SCHEMA='DBNAME'

3、查看mysql用户
use mysql;
select user,host from user;
 
4、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(从另外一台导入到本机,会提示输入密码,先输入本机数据库的密码,再输入远程机子数据库的密码)

5、添加用户和查看用户权限                     
grant select on 数据库.*    to 用户名@登录主机 identified by "密码"(添加用户)
  注:登录主机可以是本地(localhost)、远程(%),具体的IP

show grants for username@localhost;(查看权限,super用户可以查看所有用户的权限,普通用户只能查看自己的权限)
 
show processlist (查看客户端的连接状态,super用户可以查看所有用户,普通用户只能查看自己,取消自己:kill haoma)
 
flush privileges  刷新权限

 

mysqladmin -u root -p password 新密码(改密码)
 
 
 
 
6、innodb和myisam的区别
InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。下面是已知的两者之间的差别,仅供参考。
a.InnoDB不支持FULLTEXT类型的索引。
b.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
c.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
d.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
e.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
 
另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
 
任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势

myisam在少部分情况下会快些,主要得益于结构简单,数据更加紧凑,没有mvcc,acid等额而外的工作。



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


8、查看一个数据库的大小
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"}'

9、query cache size和innodb_buffer_pool_size
query cache size 是缓存特定的结果集,当表变更,那么结果集就会自动清除
innodb_buffer_pool_size 对 InnoDB 存储引擎的作用类似于 Key Buffer Cache 对 MyISAM 存储引擎的影响,主要的不同在于 InnoDB Buffer Pool 不仅仅缓存索引数据,还会缓存表的数据,而且完全按照数据文件中的数据快结构信息来缓存.
当用户查询的时候,首先检查query cache size有无匹配,没有的话再到innodb_buffer_pool_size取数据

10、double  write buffer
只是在产生checkpoint时,也就是当写入磁盘数据文件前,如果开启了double  write buffer,那么把数据从buffer   pool首先写到double write buffer里,当double  write buffer满了,再从double  write buffer写到datafile里,这样可以保证数据文件中的Page的不一致的情况下可以从double write buffer 恢复数据。如果没开启就直接从buffer pool 写到datafile里
但是在没有发生checkpoint时,也就是不会向double write buffer里写数据
page不一致的情况就是flush disk时,本来数据有16K,但是写到硬盘里只有8K,而redolog又不知道flush到什么程度啦,而这时又恰好断电。Buffer Pool中该page只被flush了一部分。那么InnoDB是无法决定redoLog是否应该被应用。

11、thread_cache_size
这个参数的设置跟Threads_created和 Connections 相关,命中率=(Connections-Threads_created)/Connections

12、mysql提示符的设置
可以在配置文件里my.cnf的[client]段里设置,不需要重启数据库
prompt      = \\u@\\h:\\d \\r:\\m:\\s >

13、检查你的innodb表是否有主键

select table_name from information_schema.tables where table_schema not in ('mysql','information_schema') and table_name not in (select table_name from information_schema.TABLE_CONSTRAINTS where constraint_type='PRIMARY KEY')

14、导出用户授权信息,自动生成可执行语句
mysql -uroot -p000000 -S/tmp/mysql.sock -N -s -e 'select concat("show grants for ",user,"@",host,";") from user' mysql | sed "s/%/'%'/" | mysql -uroot -p000000 -B -N mysql | sed 's/.*/&;/' > /root/grants.sql && echo "FLUSH PRIVILEGES;" >> /root/grants.sql

15、计算mysql的每个表的更改量
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000002 |  grep -i -e "^update" -e "^insert" -e "^delete" -e "^replace" -e "^alter"  | cut -c1-100 | tr '[A-Z]' '[a-z]' | sed -e "s/\t/ /g;s/\`//g;s/(.*$//;s/ set .*$//;s/ as .*$//" | sed -e "s/ where .*$//" | sort | uniq -c | sort -nr


 

 

你可能感兴趣的:(mysql,数据库,职场,休闲)