grant select,insert,delete on *.* to netease@'localhost' identified by '163';#mysql -unetease -p163 --socet=/mysqldata/node3/mysqld.sock --port=4001(登陸成功)grant select,insert,delete on *.* to netease@'localhost' identified by '123';#mysql -unetease -p163 --socet=/mysqldata/node3/mysqld.sock --port=4001(登陸失敗)
4.導(dǎo)數(shù)據(jù)
use db1;select count(*) from t1;(先看一下數(shù)據(jù)量)1)mysqldump導(dǎo)出#mysqldump -uroot -p123456 --single-transaction --socket=/mysqldata/node3/mysqld.sock db1 t1 > /tmp/t1.sqlgrant select on *.* to netease@'localhost' identified by '163';#mysqldump -unetease -p163 --socket=/mysqldata/node3/mysqld.sock db1 t1 > /tmp/t2.sql(報錯,沒有鎖表權(quán)限)#mysqldump -unetease -p163 --single-transaction --socket=/mysqldata/node3/mysqld.sock db1 t1 > /tmp/t2.sql(成功)#mysqldump -uroot -p123456 --single-transaction --socket=/mysqldata/node3/mysqld.sock db1 t1 -T /tmpuse db1;2)以file權(quán)限into outfile導(dǎo)出數(shù)據(jù)select * from t1 into outfile '/tmp/t1_2.txt';select t1.c,t3,b from t1.id=t3.id into outfile '/tmp/t13.txt';
為什么要調(diào)整參數(shù)
- 不同服務(wù)器之間的配置,性能不一樣
- 不同業(yè)務(wù)場景對數(shù)據(jù)的需求不一樣
- mysql的默認(rèn)參數(shù)只是個參考值,并不適合所有的應(yīng)用場景
優(yōu)化之前我們需要知道什么
- 服務(wù)器相關(guān)的配置
- 業(yè)務(wù)相關(guān)的情況
- mysql相關(guān)的配置
服務(wù)器相關(guān)的配置
- 硬件情況
- 操作系統(tǒng)版本
- CPU,網(wǎng)卡節(jié)電模式
- 服務(wù)器numa設(shè)置---內(nèi)存分片,cpu對應(yīng)內(nèi)存;
- RAID卡緩存
磁盤調(diào)度策略--write back
- 數(shù)據(jù)寫入cache即返回,數(shù)據(jù)異步的從cache刷入存儲介質(zhì)
磁盤調(diào)度策略--write through
- 數(shù)據(jù)同時寫入cache和存儲介質(zhì)才返回寫入成功
write back 性能高于 write through
而write through 的安全性更高。
RAID
RAID --廉價的存儲陣列
RAID0
- 簡單就是將多塊盤當(dāng)做一塊盤來使用;容量是多盤的和,性能也是多盤之和;
- 問題,就是當(dāng)其中一塊盤損壞后,無法保證其數(shù)據(jù)的安全性;
RAID1
- 指兩塊盤做相互的鏡像--達(dá)到高可用
- 問題,只能使用兩塊盤來做,存儲空間 有限制
RAID5
- 至少使用三塊盤,總存儲空間只有兩塊;因為它需要存儲校驗數(shù)據(jù)塊;
- 高可用的實(shí)現(xiàn),是通過校驗數(shù)據(jù)塊,來恢復(fù)數(shù)據(jù);
- 局限,只能壞一塊盤,才能通過另外兩塊盤的 存儲校驗數(shù)據(jù)塊,進(jìn)行數(shù)據(jù)恢復(fù),如果壞了兩塊盤則不能進(jìn)行數(shù)據(jù)恢復(fù)
RAID10
- 先對兩塊盤做RAID1,再做RAID0
- RAID1保證數(shù)據(jù)安全性,RAID0保證數(shù)據(jù)擴(kuò)展性;
- 局限,做RAID1的兩塊盤同時壞了,則也不能保證數(shù)據(jù)安全性;
RAID如何保證數(shù)據(jù)安全
- BBU(Backup Battery Unit)
- 保證在電池有電的情況下,即使服務(wù)器發(fā)生掉電或者宕機(jī),也能夠?qū)⒕彺嬷械臄?shù)據(jù)寫入到磁盤,從而保證數(shù)據(jù)的安全
注意事項
mysql有哪些注意事項
- mysql的部署安裝
- mysql的監(jiān)控
- mysql參數(shù)調(diào)優(yōu)
部署mysql的要求
- 推薦的mysql版本:>=mysql5.5
- 推薦的mysql存儲引擎:innodb
系統(tǒng)調(diào)優(yōu)的依據(jù):監(jiān)控
- 實(shí)時監(jiān)控mysql的SLOW log
- 實(shí)時監(jiān)控數(shù)據(jù)服務(wù)器的負(fù)載情況
- 實(shí)時監(jiān)控mysql內(nèi)部狀態(tài)值
網(wǎng)易內(nèi)部監(jiān)控的參數(shù):
- binlog文件大?。∕B)
- BufferPool命中率(%)
- cpu利用率(%)
- 磁盤讀操作延時(ms/op)
- 磁盤讀取字節(jié)數(shù)(KB/s)
- 磁盤讀取次數(shù)(次/秒)
- 占用磁盤存儲空間(MB)
- 磁盤寫入操作延時(ms/op)
- 磁盤寫入字節(jié)數(shù)(KB/S)
- 磁盤寫入次數(shù)(次/秒)
- 磁盤IO利用率(%)
- 占用內(nèi)存量(%)
- 內(nèi)存使用率(%)
- 一般事務(wù)提交操作(次/秒)
- 刪除操作(次/秒)
- 插入操作(次/秒)
- 查詢操作(次/秒)
- 更新操作(次/秒)
- 二階段事務(wù)提交操作(次/秒)
通常關(guān)注哪些mysql status
- com_select/update/delete/insert
- Bytes_received/Bytes_sent
- Buffer Pool Hit Rate
- Threads_connected/Threads_created/Threads_running
- 前兩個多的話, 可以判斷 應(yīng)用是否使用連接池,或者連接池使用是否合理
- 活躍連接很多,說明數(shù)據(jù)庫很忙,可能是被人惡意攻擊;
為什么要調(diào)整mysql的參數(shù):
- 需要根據(jù)業(yè)務(wù)區(qū)動態(tài)調(diào)整這個通用的mysql數(shù)據(jù)庫,使其變成專用數(shù)據(jù)庫
- 有些參數(shù),很可能是老版本做的,可能是為了限流和保護(hù)用的,但是隨著機(jī)器的性能提高這些參數(shù),顯然是不合適的。
讀優(yōu)化
- 合理利用索引對mysql查詢性能至關(guān)重用
- 適當(dāng)?shù)恼{(diào)整mysql參數(shù)也能提升查詢性能
innodb_buffer_pool_size:
緩存池大小,innodb自己維護(hù)一塊內(nèi)存區(qū)域完成新老數(shù)據(jù)的替換
innodb_thread_concurrency:
innodb內(nèi)部并發(fā)控制參數(shù),設(shè)置為0代表不做控制
如果并發(fā)請求較多,餐宿設(shè)置較小,后進(jìn)來的請求將會排隊
寫優(yōu)化
- 表結(jié)構(gòu)設(shè)計上使用自增字段作為表的主鍵
- 只對合適的字段加索引,索引太多影響寫入性能
- 監(jiān)控服務(wù)器磁盤IO情況,如果寫延遲較大則需要擴(kuò)容
- 選擇正確的mysql版本,合理設(shè)置參數(shù)
哪些參數(shù)有助于提高寫入性能
- innodb_flush_log_at_trx_commit&&sync_binlog
- 控制redo log 刷新
- 控制二進(jìn)制日志的刷新
- innodb log file size
- innodb_io_capacity
- innodb insert buffer
innodb_flush_log_at_trx_commit:0,1,2
n = 0(高效,但不安全--無論服務(wù)器宕機(jī)或者mysql宕機(jī)都會丟數(shù)據(jù))
每隔一秒,把事務(wù)日志緩存區(qū)的數(shù)據(jù)寫到日志文件中,以及把日志文件的數(shù)據(jù)刷新到磁盤上
n = 1 (低效,非常安全--都不會丟數(shù)據(jù))
每個事務(wù)提交時候,把事務(wù)日志從緩存區(qū)寫到日志文件中,并且,刷新日志文件的數(shù)據(jù)到磁盤上,優(yōu)化使用此模式保證數(shù)據(jù)安全性
n = 2(高效,但不安全--服務(wù)器宕機(jī)會丟數(shù)據(jù))
每個事務(wù)提交的時候,把事務(wù)日志數(shù)據(jù)從緩存區(qū)寫到日志文件中,每隔一秒,刷新一次日志文件,但不一定刷新到磁盤上,而是取決于操作系統(tǒng)的調(diào)度;
sync_binlog
- 控制每次寫入binlog,是否都需要進(jìn)行一次持久化
如何保證事務(wù)安全
- innodb_flush_log_at_trx_commit&&sync_binlog 都設(shè)為1
- 事務(wù)要和binlog保證一致性---才不會導(dǎo)致主從不一致
事務(wù)提交過程
串行有哪些問題
- SAS盤每秒只能有150--200個Fsync
- 換算到數(shù)據(jù)每秒只能執(zhí)行50--60個事務(wù)
社區(qū)和官方的改進(jìn)
redo log 的作用
在數(shù)據(jù)庫 崩潰后的數(shù)據(jù)恢復(fù);
redo log的問題
- 如果寫入頻繁導(dǎo)致redo log里對應(yīng)的最老的數(shù)據(jù)臟頁還沒有刷新到磁盤,此時數(shù)據(jù)庫將卡住,強(qiáng)制刷新臟頁到磁盤
- mysql默認(rèn)配置文件才10M,非常容易寫滿,生成環(huán)境中應(yīng)該提高redo log 的大小
innodb_io_capacity
- innodb每次刷多少個臟頁,決定innodb存儲引擎的吞吐能力。
- 在SSD等高性能存儲介質(zhì)下,應(yīng)該提高該參數(shù)以提高數(shù)據(jù)庫的性能。
insert buffer
- 順序讀寫 VS 隨機(jī)讀寫
- 隨機(jī)請求性能遠(yuǎn)小于順序請求
將盡可能多的隨機(jī)請求合并為順序請求才是提高數(shù)據(jù)庫性能的關(guān)鍵
insert buffer 對二級索引,的增刪改,的操作緩存到 insert buffer中,然后將這些隨機(jī)請求合并成順序請求;
小結(jié):
- 服務(wù)器配置要合理(內(nèi)核版本,磁盤調(diào)度策略,RAID卡緩存)
- 完善的監(jiān)控系統(tǒng),提前發(fā)現(xiàn)問題
- 數(shù)據(jù)庫版本要跟上,不要太新,也不要太老
- 數(shù)據(jù)性能優(yōu)化:
- 查詢優(yōu)化:索引優(yōu)化為主,參數(shù)優(yōu)化為輔
- 寫入優(yōu)化:業(yè)務(wù)優(yōu)化為主,參數(shù)優(yōu)化為輔