標籤:innodb mysql myisam 事務
服務端:mysqld 用戶端: mysql
常用管理命令:(註:所有要在服務端執行的命令都要以;結尾,以告訴伺服器命令結束)
登陸: mysql –uuser –ppassword –hhost 分別指定使用者,密碼和mysql主機即可登陸,也可以在家目錄下建立個.my.cnf設定檔,把使用者名稱和密碼主機等配置在裡面:假定root的密碼是mypass
[[email protected] ~]# cat << ‘EOF‘ > .my.cnf
> [client]
> user = root
> password = mypass
> host = localhost
> EOF
當然如果在本機上登陸還是unix sock 的方式最快,消耗資源最小,因為這是在核心底層實現的,如果用IP地址登陸則還需要先送到核心的TCP/IP協議棧處理。
給使用者加密碼:
在mysql命令列下執行 SET PASSWROD FOR ‘user’@’host’=PASSWORD(‘password’);
Shell下用mysqladm修改: mysqladm –uroot –hlocalhost password ‘mypass’ –predhat (把[email protected]的密碼由redhat改為mypass)
直接修改mysql庫user表:UPDATE mysql.user SET PASSWORD=PASSWORD(‘redhat‘) WHERE User=‘root‘ AND Host=‘localhost‘;
建立和刪除使用者:
CREATE USER ‘root’@’172.16.100.100’ IDENTIFIED BY ‘mypass’;
DROP USER ‘root’@’172.16.100.100’;
忘記管理員密碼咋整:
停掉mysqld服務後,mysqld_safe –-skip-grant(跳過授權表) –-skip-networking(不允許遠端存取mysql,以保證安全),此方式啟動後,無密碼登陸後修改密碼
使用者授權和取消授權:
GRANT SELECT,UPDATE ON db_name.tb_name TO ’user’@’host’ [IDENTIFIED BY PASSWORD ]; FLUSH PRIVILEGES;
REVOKE SELECT,UPDATE ON db_name.tb_name FROM USER;
查看已經授權使用者資訊:SHOW GRANTS\G
查看mysql線程資訊:SHOW PROCESSLIST;
查看錶索引資訊:SHOW INDEXES FROM tb_name;
mysqld –help –verbose 可以查看mysql設定檔中可以使用的參數
各種秀:SHOW DATABASES; SHOW TABLES; DESC tb_name; SHOW ERRORS; SHOW STATUS; SHOW BINARY LOGS; SHOW BINLOG EVENTS;
查處某個庫中的表的詳細屬性資訊:SHOW TABLE STATUS RLIKE ‘%user%’\G (用RLIKE可以匹配Regex、\G以縱向的方式顯示,當列比較多時候比較有效果,\g可以直接送到服務端,不用再加分號)
SHOW MASTER STATUS; 可查看當前二進位日誌的position
SHOW GLOBAL | SESSION VARIABLES LIKE | RLIKE ‘%log%’; 查看伺服器變數資訊
SET GLOBAL.var_name=VALUE;
SET @@GLOBAL.var_name=VALUE;
SELECT DATABASE(); SELECT LAST_INSERT_ID();
SHOW CREATE TABLE user; SHOW ENGINE INNODB STATUS;
HELP Contents; –> SHOW Administrations; ….
mysql> source /tmp/backup.sql | mysql –uroot –pmypass < /tmp/backup.sql
mysql -uroot -predhat -e ‘SHOW DATABASES;‘
Tips: 由於緩衝是對查詢語句做雜湊作為鍵儲存的,而Hash是case-sensitive的,所以呢為了提高快取命中率,SQL語句要保持一定的風格,例如把所以命令關鍵字全部大寫。養成良好的編程習慣利人利已。
關於儲存引擎:mysql是外掛程式式儲存引擎,可以按需隨時切換(儲存引擎可以理解為資料庫的邏輯資料與磁碟上位元據的中介軟體,它完成兩種資料格式之間的相互轉換過程)
MyISAM: 是ISAM的改進版本,不支援熱備,支援溫備,支援B-tree indexes,不支援T-tree indexes 和Hash indexes,支援全文檢索索引(full-text search indexes:可以索引到一個欄位上的所有資料上)等,和InnoDB最大的區別在於不支援事務(Transaction), 支援表層級的鎖,InnoDB支援行層級的鎖,支援延遲更新索引鍵(delay key update)
MyISAM資料檔案儲存形式:db_name.MYI index檔案, db_name.MYD data檔案, db_name.frm framwork表定義檔案,存放表結構資訊等
適合資料倉儲、olap(online analytical processing)、寫入少,查詢多的情境,對巨量資料情境支援不好,資料庫很大(超過500G)時一旦崩潰,很難恢複,MariaDB 啟用aira引擎,是改良的myisam,提供了安全的崩潰恢複。
InnoDB: InnoDB公司開發的支援事務和外鍵的儲存引擎,也吸收了非死不可、穀哥等公司大牛的貢獻,後被假骨人收購後就走上了商業化的道路,不過這假骨頭的人也對innodb做了n多的改進和最佳化。
InnoDB支援的行層級的鎖並不是絕對的,當執行的語句所影響的行不確定時,是對全表進行鎖定的,例如 SELECT * FROM db_name.tb_name WHERE Name LIKE ‘%mysql%’;
innodb支援 外鍵、事務、MVCC(Multi-Version Concurrency Control) 多版本並發控制、聚簇索引(索引和表資料放在一起並按一定的順序排列,是有序資料,而myisam儲存的是堆資料,heap,不支援聚簇索引)、間隙鎖(Gap Lock:間隙鎖,鎖定一個範圍,但不包含記錄本身)、輔助索引、自適應hash索引、支援熱備、行級鎖
資料檔案存放:ibdata1 資料表空間檔案,建議開啟innodb_file_per_table = 1,每表一個資料表空間,tb_name.ibd,否則所有表放在一個檔案中不便於管理,但是,單獨的資料表空間檔案僅儲存該表的資料、索引和插入緩衝等資訊,其餘資訊還是存放在預設的資料表空間中。tb_name.frm 表定義檔案
MEMORY 建立暫存資料表時用到,記憶體儲存引擎
BLACKHOLE 黑洞,在複製結構中,為減少master壓力和二進位日誌複製次數,只複製一份到一個slave上,其他slave全部到此slave上複製binlog, 而此slave並不儲存資料,只提供binlog源,應用relaylog時全部扔到BLACKHOLE去避免不必要的IO。
CSV 可以把資料匯出為csv文字格式設定,可以在不同資料庫之間交換資料
ARCHIVE 5.5後支援索引,適用於儲存日誌等按時間序列的資料擷取,僅支援insert, select, 支援很好的壓縮功能
FEDRATED:
能夠訪問遠程伺服器上的資料的儲存引擎,FedratedX
MRG_MYISAM merge MySQL已經支援表分區,這個用處就不大了
能夠合并多個MyISAM表的儲存引擎,
NDB:叢集儲存引擎,專用於MySQL Cluster
第三方儲存引擎,
OLTP類,線上交易處理
XtraDB, InnoDB的增強版
PBXT: 支援事務,社區不活躍,MariaDB 5.5.32後原生也不再支援
TokuDB 很牛逼,已經開源,MySQL外掛程式,可以直接使用,支援分形樹索引結構,適用於需要插入大量資料的分析型情境
圖示資料庫,有著複雜串連的
列式資料庫,最適於儲存海量資料,
列式儲存引擎:
Infobright: 最著名,真正在生產環境中使用,數十TB, 支援壓縮,如果使用需要對mysql伺服器定製
InfiniDB
MonetDB
LucidDB
社區儲存引擎
Aria
Groona: 全文索引引擎
QQGraph: 支援圖操作,Open query 研發
SphinxSE:獅身人面象,已經被Maria社區採用,MariaDB 5.5.32+
Spider:支援分區(sharding)
VPForMySQL:支援垂直資料分割,vertical partition, spider作者寫的
關於MySQL日誌:
二進位日誌:記錄會引起資料庫資料變化的語句:
-
SHOW BINARY | MASTER LOGS;
SHOW MASTER STATUS;
SHOW BINLOG EVENTS [IN ‘log_name’] [FROM position] [LIMIT n] 位移n條語句
FLUSH LOGS; 一般只滾動binlog 和 relaylog, 每次mysql服務的重啟也會引起binlog滾動,日誌大小達到上限也會自動滾動,一般預設1G
清除binlog安全的方式:PURGE BINARY | MASTER LOGS TO ‘log_name’ | BEFORE ‘2012-10-10 12:09:09’;
log-bin = /path/to/some_log_file
expire_log_days = 100
sync_binlog 事務提交時,是否從cache刷寫到磁碟,建議開啟,對效能稍微有些影響,但是更可靠,worthful
mysqlbinlog –end-position=234 mysql_bin.000012 > /tmp/1.sql
mysql –uroot –pmypass < /tmp/1.sql
在用二進位恢複資料庫時,要把二進位日誌關掉,不然重複記錄操作,徒增二進位空間
innodb_flush_log_at_trx_commit = 0|1|2 日誌刷寫到磁碟頻率,0 --> 1秒一次,1 --> 每次事務提交就寫,2 --> 0+1
慢查詢日誌:建議開啟,記錄執行時間長的查詢過程以方便分析最佳化
slow_query_log 定義是否開啟慢查詢日誌
slow_query_log_file 定義慢查詢記錄檔儲存位置
long_query_time 定義查詢時間長度達到多少被認為是慢查詢
慢查詢時間長度:從查詢啟動到查詢完成,中間無論什麼原因導致都計算在內,牆上掛鐘時間而非CPU時間
錯誤記錄檔
記錄伺服器啟動和關閉過程中的資訊
記錄伺服器運行中的錯誤資訊
事件調度器運行一個事件時產生的資訊
在從伺服器上啟動從伺服器處理序時產生的資訊
查詢日誌:一般不建議開戶,消耗伺服器資源,影響效能
交易記錄:把無序IO轉化為有序IO,不宜過大,如果過大伺服器從崩潰是恢複會消耗很大時間長度
中繼日誌:用於複製情境,slave從master複製過來的binlog先放到中繼日誌,然後再應用到本地
關於innodb,關於事務:(參考http://javabkb.iteye.com/blog/1441197內容)
本文出自 “不懂IT的中醫不是好IT” 部落格,請務必保留此出處http://zhishen.blog.51cto.com/1612050/1531580