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


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章