引擎:
查看引擎:
mysql> show engines;
mysql> SHOW VARIABLES LIKE '%storage_engine%';
mysql> show create table t1;
mysql> show table status like 't1';
臨時(shí)指定引擎:
mysql> create table innodb1(id int)engine=innodb;
修改默認(rèn)引擎:
/etc/my.cnf
[mysqld]
default-storage-engine=INNODB ----引擎
修改已經(jīng)存在的表的引擎:
mysql> alter table t2 engine=myisam;
優(yōu)化:
調(diào)優(yōu)思路:
1.數(shù)據(jù)庫(kù)設(shè)計(jì)與規(guī)劃--以后再修該很麻煩归榕,估計(jì)數(shù)據(jù)量汉嗽,使用什么存儲(chǔ)引擎
2.數(shù)據(jù)的應(yīng)用--怎樣取數(shù)據(jù)酝掩,sql語(yǔ)句的優(yōu)化
3.mysql服務(wù)優(yōu)化--內(nèi)存的使用屿笼,磁盤(pán)的使用
4.操作系統(tǒng)的優(yōu)化--內(nèi)核等舔、tcp連接數(shù)量
5.升級(jí)硬件設(shè)備
只對(duì)innodb引擎
物理分區(qū):
#mkdir /data
#chown mysql.mysql /data
mysql> create table t1(id int,name char(20)) data directory='/data/';----指定存儲(chǔ)表的內(nèi)容目錄
表結(jié)構(gòu)存儲(chǔ)的文件是.frm結(jié)尾的文件骚灸。不能指定。
如果創(chuàng)建不成功給data目錄增加權(quán)限慌植。chown mysql.mysql data
mysql服務(wù)優(yōu)化
mysql> show status 看系統(tǒng)的資源 ---各種狀態(tài)參數(shù)甚牲。
mysql> show variables 看變量,在my.cnf配置文件里定義的
mysql> show warnings 查看最近一個(gè)sql語(yǔ)句產(chǎn)生的錯(cuò)誤警告蝶柿,看其他的需要看.err日志
mysql> show processlist 顯示系統(tǒng)中正在運(yùn)行的所有進(jìn)程鳖藕。
mysql> show errors
字符集設(shè)置
臨時(shí):
mysql> create database db1 CHARACTER SET = utf8;
mysql> create table t1(id int(10)) CHARACTER SET = utf8;
5.7/ 5.5版本設(shè)置:
[mysqld]
character_set_server = utf8
===========================================================================================
慢查詢:
查看是否設(shè)置成功:
mysql> show variables like '%query%';
當(dāng)連接數(shù)的數(shù)值過(guò)小會(huì)經(jīng)常出現(xiàn)ERROR 1040: Too many connections錯(cuò)誤。
這是是查詢數(shù)據(jù)庫(kù)當(dāng)前設(shè)置的最大連接數(shù)
mysql> show variables like '%max_connections%';
這是查看超時(shí)時(shí)間
mysql> show global variables like '%timeout%';
強(qiáng)制限制mysql資源設(shè)置:
vim /etc/my.cnf
max_connections = 1024 并發(fā)連接數(shù)只锭,根據(jù)實(shí)際情況設(shè)置連接數(shù)著恩。
connect_timeout= 5 單位秒 ----超時(shí)時(shí)間,默認(rèn)30秒
innodb引擎:
innodb-buffer-pool-size //緩存 InnoDB 數(shù)據(jù)和索引的內(nèi)存緩沖區(qū)的大小
innodb-buffer-pool-size=# ----值
這個(gè)值設(shè)得越高,訪問(wèn)表中數(shù)據(jù)需要得磁盤(pán) I/O 越少蜻展。在一個(gè)專用的數(shù)據(jù)庫(kù)服務(wù)器上,你可以設(shè)置這個(gè)參數(shù)達(dá)機(jī)器物理內(nèi)存大小的 80%喉誊。
vim /etc/my.cnf
innodb-buffer-pool-size=2G
wait_timeout=10 終止空閑時(shí)間超過(guò)10秒的鏈接,避免長(zhǎng)連接
max_connect_errors=10 //10次連接失敗就鎖定纵顾,使用flush hosts 解鎖伍茄,
mysql> flush hosts; #解鎖
#鎖表
鎖定數(shù)據(jù)表,避免在備份過(guò)程中施逾,表被更新
mysql>LOCK TABLES tbl_name READ;
#為表增加一個(gè)寫(xiě)鎖定:
mysql>LOCK TABLES tbl_name WRITE;
#查詢是否鎖表
mysql> show open tables where in_use >0;
#解鎖
mysql> UNLOCK TABLES;