mysql -vv_一文读懂MySQL

本文详细介绍了MySQL的QPS、影响因素、存储引擎MyISAM与InnoDB的特性对比,以及表损坏修复方法。重点讲解了并发性、锁机制、全文索引和空间函数。还探讨了MySQL的基准测试目的、过程以及参数调整,包括内存配置、查询缓存和日志格式。此外,文章还涉及主从复制、高可用性和监控工具,如MHA和数据库性能监控指标。

QPS:每秒钟处理的查询量,

影响数据库性能的因素。

9c7914682f630f4b902085873a0da644.png

7e6ed5e52df941725fa6225e4f086de4.png

网卡流量:网卡io被占满(1000Mb/8=100MB)

b5229a688ee31f4fe993d7c0e7b8990e.png

e597d3860cc7547f9fe7802d319ec3b8.png

c047940c6761cfa4ea7a91e23105b4dd.png

f0a9f1daa16f2d84a1f320a87ce4b487.png

1380c0101cbe6463d05e843bfa057062.png

53b1324f42ccac50c613ed15c323cf98.png

7f8020a9691928e69320c7406e6d82e0.png

6153c123a7df4372b2ca75e6da1a6c1e.png

e2925c0bf616b0c185fe278308bf5a0e.png

3d6ffbcf4f70ada2b4a17bc36865264f.png

b39182b762b471e66fbefa86be2cfaba.png

d32cbca807b863f0b014c154e57c6b0d.png

e2beb0e84de636f3a24ecb8b6ea01a5b.png

dc7eb2952f5edd0dff85085c167a84b7.png

47bb6ebd3df4c5c93e1d49e0db7c9198.png

95ffa153963d2701f5cb5c64e0510e11.png

3a1e724c36daa72fe9d974d7e228d771.png

d31ac03b546a08b947aadd2ee1642d59.png

c93397652fc44ebcaef5ab3100541b4a.png

f560240ff0cb457d7dad72e1a3733f74.png

a64d33af37c48afc8e5f34c77d503960.png

3cb468fef9e677ade64720b8995f3732.png

adeebc81f54721332c9c462f7a509181.png

c70cf246b8340d5a0a49f2341f594ca9.png

8935cc6a102b295cc1717c56d3eadb6d.png

e014fdec8668a68d81c3b0bb4c75d494.png

970275d014c9e9912692d2c720531550.png

a7ff313346967e8ea794f735fd03f6b5.png

2499ffa0ffa4eb5cd452d27566d2ebb5.png

特点

并发性与锁级别(使用的是表级锁)

表损坏修复()

创建表时指定存储引擎engine=myisam

check table tablename

repair table tablename

myisam表支持的索引类型。全文索引

myisam表支持数据压缩

myisampack

myisam -b -f myIsam.MYI

限制

85000b793b21e3242b0e07e0deb97be5.png

适用于非事务型应用

只读类应用

空间类应用

innodb mysql5.5及以上的版本默认存储引擎。

bfe5d1487980f8dd50157f39e642b2ce.png

65fac6d0d4238ee302b2cb185076c227.png

fa348d6c86a17a128d052d19ffb5fd09.png

b0d9c41a6bc03f5693f815e9cf7a6c5d.png

066b40cad4e6c4400c3eb1726580efb6.png

ddf1fa59bd5fda1f64872f3d84e647fc.png

f4f6390909811159e8eaa91847f7e45a.png

53ae6b2b769495108f68c8a80f39e6f9.png

8c4ee0a6318dc49a7843e3c9d39cd6f8.png

锁的粒度

表级锁(加锁时锁定整张表)

lock table tablename write;

unlock tables;

行级锁(在存储引擎中进行实现。)

阻塞和死锁

什么是阻塞:不同锁之间的兼容性的关系。一个事务的锁需要等待另一个事务的锁的释放

什么是死锁: 两个或者两个以上的事务相互占用了对方的资源,(死锁,数据库会自动发现,并且选择占用资源最少的事务进行回滚,释放资源。)

innodb:支持全文索引,和空间函数,。

f0f8aa105a9a69408bb5d36bbeca8dc7.png

80e0ed18da0370535b7fe783a211feed.png

适合作为数据交换的中间表

f52b44c8f312877376d97020068976e8.png

9f3eb5d402a08d99aea40e6f9a448f6a.png

适用场景:日志和数据采集类应用,

02776f927510a5cb1c7309392c935e69.png

0cc1b09a1003db1a9e4ee5b860d0c5ec.png

95976d625b396935454ea6841ef8b987.png

232a4d70ffaf1740c1a64eb5a98bc473.png

e4b009a9360b1e47966c66ac53a1476c.png

f6c27e3a88d8feb6417a2892a97e0a79.png

c5b8e7bab9e79f7023553b64bbf665c6.png

适用场景:偶尔的统计分析及手工查询,

f02fadee065d6855fab2d8cd8a853c87.png

42b38f869e4d3a655f800b85f05ecece.png

mysql服务器参数

内存配置相关参数

确定可以使用的内存上限,

确定mysql的每个连接使用的内存

sort_buffer_size

join_buffer_size

read_buffer_size

read_rnd_buffer_size

确定需要为操作系统保留多少内存

33d8ee6de8538181dc7ff86183d916a3.png

0fbc7fc06383814a49c6046114060c3f.png

5d36179cb3331b3f1173bd993c917b7f.png

7cf7fb09c9b4fa4d0b0bbd6f1fae24ab.png

eccdabcc074814e25408d708cf7e012f.png

fb2bdf41d744bb46660ff881720b25d2.png

ec7b1beca22e5242739cec06c5a1582a.png

632361545a437b82f46d4d60cd9f0881.png

05552ff0939d26eac6345a4a7e5a11fa.png

8994f03f43a14da13578700a5cd9a6e8.png

67fc9ad7bbc2c17e06ba2dc2d8ad2505.png

4675a28aaa020796cd4e618ba1c5312e.png

基准测试的目的

建立musql服务器 的性能基准线,确定当前mysql 的服务器运行情况

模拟比当前系统更高的负载,找出系统的扩展瓶颈增加数据库并发,观察QPS,TPS变化,确定并发量与性能的最优关系。

测试不同的硬件,软件和操作系统配置。

证明新的硬件设备是否配置正确。

** 如何进行基准测试**

bf62872de76880ba22d45064d38434d4.png

cbb74017806db5066475fd51eda7d029.png

49e3b7b54bedab9d10290869622c8800.png

dc5dca0d65f4b828c8904bcc2532da67.png

ad6b284106452834cee88f0c38a520fb.png

55477ea5c27d50f3a473db56bc48c216.png

01203459336b7197238ce1a6771d0717.png

7d16572dd63b8fb22f1409b6e90c1f7d.png

fa2317d12b7e0fc5fa8bfff5e861626a.png

668aca04b66475556ff7a07611345ed3.png

f850b935f101037dfa8f87a38d650189.png

5b10b0683bbacbc6a7ce9e515c074b2b.png

e78369ce55b34ad41c7662a625f7970e.png

32c57d0596131e2fb4eaf326c6bbfe55.png

90434a1acc653b05c64eee82de406334.png

30c76ab0b3d271caff014a8504caa9b1.png

create database test;

grant all privileges on . to root@‘localhost’ indentified by ‘123456’;

cd /home/test/sysbench-0.5/sysbench/

ls

cd tests/db

ls -l *lua

sysbench --test=./oltp.lua --mysql-table-engine=innodb oltp-table size=10000 --mysql-db=test --mysql-user=root --mysql password=123456 --oltp-tables-count=10 --mysql socket=/usr/local/mysql/data/mysql.sock prepare/run(测试)

c6758ac42993deb1af15a3ca21dc69e8.png

8bb9532a864ce0b9b9723364fea1b410.png

ae2f26af061fb2abd870e3e293d313bb.png

67e6c272fac64e4880a13cad5c4a0c39.png

49c98a7c5d08a323d179a9a728057f54.png

0ba546e7cd87798cadb1789cb3a17825.png

758bcdaca0f5f15d247f9ef6cc8d2205.png

95d8881e9f141b4d10296f712606c5c9.png

8b686d61dc4de1339edbcc4fe11e270c.png

63b09e4b5f0e025ee53523d3c68d498b.png

c5a6138a78f1adc120def5398d87ecc0.png

60c16276c3749a26d2587912101d7022.png

a66241d5d128006f06fb40045b922feb.png

b6e17c25692aa95d264cd3960add4538.png

2b11df8bd405c6ed4ae853490a13cf87.png

63d5c5438d68e1bada4240cd4d29717d.png

058e59c05f4aba9cca9cf9ceb7dd33ec.png

95d5e97ae1979401c1df82316eb84098.png

0c05a2f92f9e28daa3c2d1d3070eed89.png

7507fa6b558c93782d97db6af4b3d15c.png

f159e37102efe17cab680ca0728a6a5a.png

b6b536e7709697db32e81ec3c8a38145.png

800b0eaa5ac6aa326799a1a2efcb9513.png

b0cd6f00a18f45cff3a07035688a5978.png

b903eb1944e10975eb341ab8c782327e.png

27a0cf1378687fb994f90a813519cc3f.png

a9a69ef79c62efceaeba8ccad76e6a82.png

915b5b8451128d76058eae9e5566832a.png

3b763cca99c72ce708aa22545ac8241b.png

d9e56f22e98744620b5bba03f3bd37c5.png

095ea9c16bf03dcb7448b040f7944098.png

cacecc222bf681a2cfd6f425a9fb8ee2.png

526572c283e26da28743bd200af16430.png

8c0584e1edcdc0ebf42c4813d98c62e6.png

881037e92a9e90254f7bddbbb1eca9d0.png

8b3abc2a4a4db08783cb273cb5af7b65.png

0c3ab67ba8b235ccb7daa72baa85e802.png

098578e36eb1b33c7d1bc3208e575e45.png

b1178abf148e8ce8da4fcd442df65c85.png

9d39d8e063c4e7d7128470534da959ad.png

show variables like ‘binlog_format’;

set session binlog_format=statement;

3029e3e10e6be9d56dd1dd4e36e5707a.png

6aac7abc170b8d1868ea8c143a1d1984.png

e6d60a3ed2b8c190fa509460275ef396.png

55159c04a63d5c2fcec749190578ef6a.png

0acafe9116a1c5c6e69d05a74c5bf8eb.png

FULL:记录修改列所有的字段。

MIMIMAL:只记录列中修改的字段,

NOBLOB;

set session binlog_format=row;

show variables like ‘binlog_format’ ;

flush logs;

show variables like ‘binlog_row_image’;

ls -lh

mysqlbinlog mysql-bin.000003

mysqlbinlog -vv mysql-bin.000003

set session binlog_row_image=minimal;

3a17dbd18f5e2a69135c78cb590b22b5.png

7bee215a1e365b63ba08f05cb1a58b7b.png

def5715288ce733390d2a768d91dd4b9.png

2e0882c35fef37e4fea7059f9e9e88cf.png

a1254868567b669a4bd95b7006b71e90.png

3219842bd0aa6a296b03d720bc8b7fb4.png

c5d037366c8861bb0f3892fec2b74df3.png

对主从数据的一致性更加有保证,基于行的复制(RBR).

6cd1dd039e7fb274058ad5331b595166.png

d1842338117b0280f1506dabff59c8ad.png

b2c011a7f068690f65d8a5a6588ff72e.png

59fe8d4dac5a2071a65cd10ff20b2d03.png

aeb49e6cc994d0cc717f3f7d80d98b32.png

33d66170578deff9d04f032098652057.png

mysqldump --singel-transaction --master-data --triggers --routines -all-databases -yroot -p >> all.sql

ls

ls -lh

csp_all.sql root@192.168.1.22:/root

51b35167fd2e50159fb1b762a2b008dd.png

75df4b14aec12679b6f1dff264b7a489.png

c476cff6c95310e3026565660838e9aa.png

e25e1635dae4f8ca00a836e61fa2a5ba.png

bda8354afa8e11a778f334d7d344ab81.png

21fb6e94faa8cd7109f092fa11ac6f86.png

95e3cc6b2ce0763faf68ea87c3e82e7a.png

6f1d6cff7cac8a142d7dc4ed4faa3467.png

bb073ee69d3624ba1b41fca8ec17d78c.png

a2909eddd20049a0fc366f73142bcf2e.png

mysqldump --single-transaction --master-data-2 triggers --routines --all-databases -uroot -p >all2.sql

scp -P9880 all2.sql root@192.168.1.22:/root

change master to master_host=‘192.168.3.100’

master_user=‘root’

master_password=‘123456’

master_suto_position=1;

start slave;

show slave status \G

b8e0a1def63bf6cef4d5f6b93e66dcd5.png

fa05d9b0661a2a32ceee8f331a6854d2.png

mysql5.7之前,一个从库,只能有一个主库。

mysql5.7之后支持一从多主架构。

48d14c5222b5adbf7b6a68e5613d8197.png

26f962b789a78d436e3bc87b27b8ab60.png

000a7bb2d36db60240171e6fdc93411a.png

bf391a12955d9dd0069dce29f9f412c6.png

5dfe002195bd71dbea088a59e172c4e3.png

47a21765c81d0dd807f53b55fad4eb5a.png

147a81b55a33415bda819195f63fbe68.png

755a38872aff47f4c6b5731c102d4862.png

7bff5c4d609971d5dff267242b8fdc92.png

af05a742e28e78cc7d99650f63ab7d51.png

show variables like ‘slave_parallel_type’;

bebbfa79b2bba71b1a199ac4d9eb18c9.png

cc4ae3197927829b7238af3c0ed31e3f.png

5da2d57ff39c934578d7cde59225afe2.png

0368e7d8a373a776611965666a63261f.png

5582de0e93ba606ecbb50ee36496bc85.png

a6b3f6e62fce21c6fe42e9320fc2eb1d.png

153755d18576d4663873b872f1dc9a8f.png

7ff978bbbdf0ce2d0f3be1e1af976e64.png

0fe041ee2e9e5ffe7fb11b212cd136a4.png

d0ce6eb849f1de3f65629a1e6018db46.png

d79f80b6949b49f9f5384406238ad00e.png

752b15a727b75abf781ed3c78dfd6497.png

81147eeb4e2fd7a5537f9f2fd08858f0.png

f4f69723c9eaf226dc47aff72f6e136a.png

a97a0dacf63eb625810a805d0cdadb6f.png

91a5d3e6b0a08170e8b8411efa4efa0b.png

013545096ddac4c1e2ec8aaa27850f36.png

75892c197546f14da737e8a8ecb65afd.png

e2a49c3207d022017385d39c757d7cd6.png

b98d3061dc9a13fdbc9dcbe276fe1f28.png

6870fb59f6581815128adff6b135daf1.png

bf55f56975e444457c427cdac0fb2581.png

c6bffd0eca44a1eb650ad3e4261be0c0.png

MHA-----支持 GTID的复制。

MMM----不支持GTID的复制。

MHA配置步骤

配置集群内所有的主机的SSH免认证登陆,

比如故障转移过程中,保存原主服务器,二进制日志,配置虚拟IP地址等,

0611698ab34006a1f603810d8597aff0.png

e7869c221d39d9e9ef6e7921a39fc433.png

1326c4c97b77fdb2b59d08f515caa55b.png

367e5de695adfede0ba40b3b70ba0b36.png

写操作,只能在主上进行操作,读操作主从上都可以。

b4d4b3e000899b228c9f6963dfdfc8ba.png

c2d2b78cc6871d8ea53f674f8f21f7c8.png

afc05880ca5568690454bc2aaf0bb972.png

b7d4733b126a4d5c6ca634999414036f.png

9dcdbd1421a3d4cfad6c221dfbf52981.png

5cda5be93245a08b8797d062042a97ad.png

33a8e9c7190cfdcdbcc1005c984ce908.png

全值匹配的查询。

匹配最左前缀的查询。

匹配列前缀查询。

匹配范围值的查询。

精确匹配左前列并范围匹配另外一列。

只访问索引的查询。

mysql的索引是在存储引擎层实现的。

cecbf95b5aa7676b8fa16e888d2c9931.png

ece38f5381bf544fcf8dd9aafb4327c7.png

6e664a4735668e8dccd4a60e659d5de8.png

bda858d5d29fd97d1aafbdb6287eda2c.png

3f942e6f27a90512c930fd53d98f5875.png

40c9dedc76fa56ef0365708f8bf4802b.png

03cc85b49bafa8c4eee2959ac36e85d1.png

c461e8fc8c19c943b3584b0f05b4e975.png

ed40b18f505ef52e4dbb4f838c3b5e86.png

15e3ea8b8d8ef29e675ddebcda711a9b.png

07888fc53f57423082f6ff61aa3808a8.png

e01dd736c78f65881dcc97c216a328ea.png

102dbc934ab5e622808d46db9c2638d6.png

8ca85071fa36ef822a49d247e01f6606.png

a440e272a528ce5429c24e7ab3b3ee9e.png

04a9f4fdf9b7fdb06c9b1ed424fef4ea.png

b1ca2f74f03a826c15ffab5217b0387d.png

26357def2f7e5c9095e27241ed0cb123.png

82a063a0a0857dc78bd74505e12be6ec.png

set global slow_query_log=on;

0509390766b0fbba06b045f7b811fc80.png

b17b095fcf025fcca7260cc1d8d729bb.png

acf36b07f99ce40cb03e82782c3d09fa.png

9f2429e467b9748beafaff687be12bad.png

89f5d551241df6f051a45243d42217db.png

0b9ef8abccd4caa669284845c9794802.png

优先检查这个查询是否命中查询缓存中的数据,

通过一个对大小写敏感的哈希查找实现的,

hash查找只能进行全值匹配。

检查用户权限

从查询缓存中直接返回结果并不容易。

对于一个读写频繁的系统使用查询缓存很可能会降低查询处理的效率。所以不建议使用查询缓存。

3fca530a85693545c74d92e89f61a865.png

c9ebb7b5e0fc36c88eb58584e717b7dd.png

e0050a6cb3607d8f6f3165d10c0b441e.png

286f8544ccceac87c54d5c8858ebcc2b.png

8d024e3cfefb9f9a09004d0e44a5cd4e.png

73159a5970aba975ecb748e24f180d84.png

9b9a398cacfa4c231371ba1693a95056.png

bb76c6805c846dfd6c729e2821b0c2d7.png

5b660e6b251e67cf3c0a2ff8eac4eff4.png

20751cd9b86cd10ff6e4b3a0522709a5.png

6e7fe03b58e37493be9684cfb4a53ccb.png

6656952b3cb99f060b22f74d75b86bcd.png

63209348f68d8270ba8c6c7a37063896.png

3fa4be956a875ae791cc00aab2555ce7.png

show profile cpu query 1;

18218267aa317f246a1f40e56a80e4d4.png

7d9c3eaaf35ccd065d87fb1b7cee63ab.png

7ecf0474bfad3cab745e3bebee6edbd5.png

4ed553ad95e525f121078e24c8a0f435.png

如何修改大表的表结构

创建新表—》导入老表的数据—》建立触发器,把老表的数据也同步更新—》创建排它锁—》新表重命名为老表的名字—》删除老表。

可以减少主从延迟。

7a99d82b649f522312291ac8fc88b663.png

882cf444f5fddf794c4d198e335d594e.png

0ebcbe509559811c3530492ebe2a2013.png

ae63d8dc12a62eb752d83eed2a40ecb9.png

把一个节点中的多个数据库拆分到不同的节点。

把一个库中的表分离到不同的数据库中。

13130bd7142817c71ab4769038357a96.png

78374ef7616b2e357aa5e1431f92203d.png

e5a5a49744dbe9276c43e4eb4199b8a6.png

d8c00da8cf736d1fd4f42e1ab0df91cd.png

f89399c2fa4e18df8f894809e1b29823.png

8adcfb91859074a819d1e1408ef897bd.png

768bd3000bd3c77bc31605988c1400fd.png

数据库监控工具:::nagios zabbix

对什么进行监控

1.对数据库的可用性进行监控。

通过网络连接到数据库并且确定数据库是可以对外提供服务的。

对数据库的性能进行监控。

QPS和TPS。 并发线程的数量。

对主从复制进行监控。

主从复制链路状态的监控。

主从复制延迟的监控。

定期确认主从复制的数据是否一致。

对服务器资源的监控。

磁盘空间,服务器的磁盘空间大并不意味着mysql数据库能使用的空间就足够大。

CPU的使用情况,内存的使用情况,swap分区的使用情况,以及网络IO的情况等,

dadcdf75071a5662fdd01751989ffc48.png

确认数据库是否可以通过网络连接。

mysqladmin -umonitor_user -p -h ping。

telnet IP db_port。

使用程序通过网络建立数据库连接。

bf88efd07a82161a40a161b413eb9f80.png

f951d5ebbf84a80aa507405dc3fc6bb9.png

数据库可用性监控

记录性能监控过程中所采集到的数据库的状态

b53579d6e21813b4c5d75214f117bcad.png

a54e984ab2fc7ee763a474acfa0317e4.png

02c67c14d6f1459af8c5ac5319a224da.png

查看连接号

select connection_id();

修改锁的超时时间。

set global innodb_lock_wait_timeout=180;

begin;

show slave status;

1ecb0d9f55dcf99e27b2a95b676d3369.png

4e2580a38f4f2fd20b58f827c65d8bd7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值