Â
ç®å½
Â
ä¸ãmysql8.0æºç ç¼è¯è¿ç¨
空é´è¦æ±ï¼
1.å®è£ cmake
2.å®è£ gcc
3.mysql8çç¼è¯
4.mysqlçå¯å¨
äºãmysql弿¥å¤å¶
ä»ä¹æ¯å¼æ¥å¤å¶
1.åºäºäºè¿å¶æ¥å¿æä»¶ä½ç½®çå¤å¶ï¼Binary Log File Position Based Replicationï¼
1ï¼åç
2ï¼å®ç°æ¥éª¤
2.åºäºGTIDç主ä»å¤å¶
1ï¼åç
2ï¼å®ç°æ¥éª¤
3.ä¸ä¸»å¤ä»å¤å¶
1ï¼åç
2ï¼å®ç°æ¥éª¤
4.主ä»å¤å¶ï¼å¼æ¥å¤å¶ï¼çä½ç¨ä¸è§£å³çé®é¢ï¼
ä¸ãå ¨åæ¥å¤å¶ä¸å忥å¤å¶
1.å ¨åæ¥å¤å¶ï¼ç»å¤å¶ï¼
1ï¼åç
2ï¼å®ç°æ¥éª¤
2.å忥å¤å¶
1ï¼åç
2ï¼å忥çä¸¤ç§æ¹æ¡ï¼After_commitä¸After_sync
3ï¼å忥çå®ç°è¿ç¨
弿¥ãå忥ãç»å¤å¶ï¼å ¨åæ¥ï¼ç对æ¯
åãmysql读åå离ãå表æä½
1.MySQLProxy读åå离åçÂ
2.为ä»ä¹è¦è¯»åå离ï¼
3.ä»ä¹æ¶åéè¦è¯»åå离ï¼
4.主ä»å¤å¶ä¸è¯»åå离
äºãMHAé«å¯ç¨
1.MHAä»ç»
2.å®éªæ¥éª¤
1ï¼é ç½®å忥䏻ä»å¤å¶
2ï¼é ç½®å å¯ç»å½
3ï¼å¨server1/2/3ä¸å®è£ MHA node
4ï¼å®è£ MHA Managerå¹¶é ç½®MHA
5ï¼æµè¯
å .ç´¢å¼
ä»ä¹æ¯ç´¢å¼ï¼
ç´¢å¼æåªäºä¼ç¼ºç¹ï¼
ç´¢å¼æåªå ç§ç±»åï¼
ç´¢å¼çæ°æ®ç»æï¼bæ ï¼hashï¼
ç´¢å¼è®¾è®¡çååï¼
å建索å¼çååï¼éä¸ä¹éï¼
Bæ åB+æ çåºå«
使ç¨Bæ ç好å¤
使ç¨B+æ ç好å¤
ç¾ä¸çº§å«æä»¥ä¸çæ°æ®å¦ä½å é¤
ä¸.弿
MySQLåå¨å¼æMyISAMä¸InnoDBåºå«
MyISAMç´¢å¼ä¸InnoDBç´¢å¼çåºå«ï¼
InnoDB弿ç4å¤§ç¹æ§
åå¨å¼æéæ©
ä¸ãmysql8.0æºç ç¼è¯è¿ç¨
空é´è¦æ±ï¼
20G硬ç
1.å®è£ cmake
yum install jsoncpp-0.10.5-2.el7.x86_64.rpm
yum install jsoncpp-devel-0.10.5-2.el7.x86_64.rpm
yum install cmake3-3.6.1-2.el7.x86_64.rpm cmake3-data-3.6.1-2.el7.noarch.rpm -y ##å 为æä¾èµæ§ï¼åæ¶å®è£
cd /usr/bin
ln -s /usr/bin/cmake3 /usr/local/bin/cmake ##å¶ä½è½¯é¾æ¥
camke --version ##æ¥ççæ¬

Â
2.å®è£ gcc
GCCåå为GNU Cè¯è¨ç¼è¯å¨ï¼GNU C Compilerï¼ï¼åªè½å¤çCè¯è¨ãä½å ¶å¾å¿«æ©å±ï¼åå¾å¯å¤çC++ï¼åæ¥åæ©å±ä¸ºè½å¤æ¯ææ´å¤ç¼ç¨è¯è¨ï¼å¦FortranãPascalãObjective -CãJavaãAdaãGo以ååç±»å¤ç卿¶æä¸çæ±ç¼è¯è¨çï¼æä»¥æ¹åGNUç¼è¯å¨å¥ä»¶ï¼GNU Compiler Collectionï¼
cd /etc/yum.repos.d
vim CentOS-SCL.repo
cat CentOS-SCL.repo
[base]
name=CentOS-os
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck=0
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=http://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
gpgcheck=0
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=http://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=0
yum install devtoolset-7-gcc*
scl enable devtoolset-7 bash
which gcc
gcc --version
Â
3.mysql8çç¼è¯
tar zxf mysql-boost-8.0.21.tar.gz
mkdir build
cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_0900_ai_ci -DWITH_BOOST=/root/mysql-8.0.21/boost/boost_1_72_0/
make
make install
Â
4.mysqlçå¯å¨
cd /usr/local/mysql/support-files/
cp mysql.server /etc/init.d/mysqld
vim /etc/my.cnf
useradd -M -d /usr/local/mysql/ -s /sbin/nologin mysql
mkdir -p /data/mysql
chown mysql.mysql /data/mysql/
vim ~/.bash_profile
source ~/.bash_profile
mysqld --initialize --user=mysql
mysql -p
mysql> alter user [email protected] identified by '[email protected]@0823';
Â
äºãmysql弿¥å¤å¶
主ä»å¤å¶åä¸ºä¸¤ç§æ¹å¼ï¼åºäºäºè¿å¶æä»¶ä½ç½®ç主ä»å¤å¶ä»¥ååºäºGTIDç主ä»å¤å¶ï¼èè¿ä¸¤ç§å¤å¶çæ¬è´¨åä¸ºå¼æ¥å¤å¶ã
ä»ä¹æ¯å¼æ¥å¤å¶
MySQLé»è®¤çå¤å¶å³æ¯å¼æ¥çï¼ä¸»åºå¨æ§è¡å®å®¢æ·ç«¯æäº¤çäºå¡åä¼ç«å³å°ç»æè¿ç»å®¢æ·ç«¯ï¼å¹¶ä¸å ³å¿ä»åºæ¯å¦å·²ç»æ¥æ¶å¹¶å¤çï¼è¿æ ·å°±ä¼æä¸ä¸ªé®é¢ï¼ä¸»å¦æcrashæäºï¼æ¤æ¶ä¸»ä¸å·²ç»æäº¤çäºå¡å¯è½å¹¶æ²¡æä¼ å°ä»ä¸ï¼å¦ææ¤æ¶å¼ºè¡å°ä»æå为主ï¼å¯è½å¯¼è´æ°ä¸»ä¸çæ°æ®ä¸å®æ´ã
Â
1.åºäºäºè¿å¶æ¥å¿æä»¶ä½ç½®çå¤å¶ï¼Binary Log File Position Based Replicationï¼
1ï¼åç
1.å¨ä¸»åºä¸ææ°æ®æ´æ¹è®°å½å°äºè¿å¶æ¥å¿(BinaryLog)ä¸(è¿äºè®°å½è¢«ç§°ä¸ºäºè¿å¶æ¥å¿äºä»¶)
2.å¤åºä¸çIO线ç¨ä¸masterè¿è¡éä¿¡ï¼å°ä¸»åºä¸çæ¥å¿å¤å¶å°èªå·±çä¸ç»§(RelayLog)æ¥å¿ä¸
3.å¤åºä¸SQL线ç¨ä¼è¯»åä¸ç»§æ¥å¿ä¸çäºä»¶ï¼å°å ¶éæ¾å°å¤æ°æ®åºä¹ä¸
Â
2ï¼å®ç°æ¥éª¤
master端ï¼
ï¼1ï¼ vim /etc/my.cnf ç¼è¾ä¸»é ç½®
log-bin=mysql-bin
server-id=1
ï¼2ï¼åå»ºç¨æ·replå¹¶æäºå¤å¶æé
mysql> CREATE USER 'repl'@'192.168.43.%' IDENTIFIED BY 'My12345.';##åå»ºç¨æ·
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.43.%';##å¯¹ç¨æ·ææ
ï¼3ï¼æ¥çmasterç¶æå¹¶è·å主èç¹ä¸äºè¿å¶æä»¶åç§°åä½ç½®
mysql> SHOW MASTER STATUS;
slave端ï¼
ï¼1ï¼é ç½®ä»èç¹Â  vim /etc/my.cnf
server-id=2 ##ä»èç¹ä¸çé
ç½®
ï¼2ï¼ å¨ä»èç¹slaveä¸é 置主èç¹masterçä¿¡æ¯,å¹¶å¼å¯å¤å¶ï¼
mysql> change master to
-> master_host='172.25.11.2',
-> master_user='repl',
-> master_password='[email protected]@0823',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=1200,
-> get_master_public_key=1;
mysql> START SLAVE;##å¼å¯å¤å¶
mysql> SHOW SLAVE STATUS\G ##æ¥çslaveç¶æ
ææï¼
æ¤æ¶å¨master端åå ¥æ°æ®ï¼slave端ä¼åæ¥
Â
2.åºäºGTIDç主ä»å¤å¶
1ï¼åç
使ç¨GTIDæ¶ï¼æ¯ä¸ªäºå¡é½å¯ä»¥å¨æäº¤å°åå§æå¡å¨ä¸å¹¶ç±ä»»ä½ä»å±åºç¨æ¶è¿è¡æ è¯åè·è¸ªãè¿æå³çå¨å¯å¨æ°çä»å±æå¡å¨ææ éè½¬ç§»å°æ°ç主æå¡å¨æ¶ï¼ä¸å¿ 使ç¨GTIDæ¥å¼ç¨æ¥å¿æä»¶æè¿äºæä»¶ä¸çä½ç½®ï¼ä»èæå¤§å°ç®åäºè¿äºä»»å¡ãç±äºåºäºGTIDçå¤å¶å®å ¨åºäºäºå¡ï¼å æ¤å¯ä»¥è½»æ¾ç¡®å®ä¸»æå¡å¨å仿å¡å¨æ¯å¦ä¸è´ãåªè¦å¨ä¸»æå¡å¨ä¸æäº¤çææäºå¡ä¹é½å¨ä»æå¡å¨ä¸æäº¤ï¼åå¯ä»¥ä¿è¯ä¸¤è ä¹é´çä¸è´æ§ã
Â
2ï¼å®ç°æ¥éª¤
master端ï¼
é 置主èç¹ï¼å¯ç¨å¤å¶ä¸»èç¹ï¼å¼å¯gtidæå¡Â  /etc/my.cnf
log-bin=mysql-bin ##åºäºäºè¿å¶æ¥å¿ä½ç½®ç主ä»å¤å¶
server-id=1
gtid_mode=ON ##æå¼gtid
enforce-gtid-consistency=ON
slave端ï¼
ï¼1ï¼é ç½®ä»ç«slaveå¼å¯GTIDçæå¡Â  /etc/my.cnf
server-id=2 ##åºäºäºè¿å¶æ¥å¿ä½ç½®ç主ä»å¤å¶
gtid_mode=ON ##æå¼gtid
enforce-gtid-consistency=ON
ï¼2ï¼ é ç½®ä»ç«slave使ç¨åºäºGTIDçèªå¨å®ä½
mysql> stop slave; ##忢åºäºäºè¿å¶ä½ç½®çå¤å¶
mysql> CHANGE MASTER TO
-> MASTER_HOST = '192.168.43.10',
-> MASTER_USER = 'repl',
-> MASTER_PASSWORD = 'My12345.',
-> MASTER_AUTO_POSITION = 1;
mysql> START SLAVE; ##å¼å¯gtidç主ä»å¤å¶
mysql> SHOW SLAVE STATUS\G ##æ¥çå¤å¶ç¶æ
mysql> show variables like 'gtid%'; æ¥çgtidæ¯å¦å¼å¯
Â
3.ä¸ä¸»å¤ä»å¤å¶
1ï¼åç
a --> b --> cï¼å³bä½ä¸ºaçsalveè·åaçæ°æ®åï¼åä½ä¸ºcç主ï¼å°æ°æ®ä¼ è¾ç»cã
2ï¼å®ç°æ¥éª¤
å®ç°aãbç主ä»å¤å¶åï¼å å ¥èç¹c使cä½ä¸ºbçä»èç¹ãå ·ä½æ¥éª¤å¦ä¸ï¼
ï¼1ï¼å¨bä¸å建å¤å¶ç¨æ·å¹¶ææï¼å¹¶ç¨mysqldumpå°å·²åå¨çæ°æ®å¯¼åºï¼scpè³cä¸ã
ï¼2ï¼å¨cä¸å¯¼å ¥bçæ°æ®åï¼æ§è¡change master to æä¸ºbçä»ï¼å¹¶å¼å¯å¤å¶ã
Â
4.主ä»å¤å¶ï¼å¼æ¥å¤å¶ï¼çä½ç¨ä¸è§£å³çé®é¢ï¼
主ä»å¤å¶çä½ç¨
- ä¸»æ°æ®åºåºç°é®é¢ï¼å¯ä»¥åæ¢å°ä»æ°æ®åºã
- å¯ä»¥è¿è¡æ°æ®åºå±é¢ç读åå离ã
- å¯ä»¥å¨ä»æ°æ®åºä¸è¿è¡æ¥å¸¸å¤ä»½ã
MySQL主ä»å¤å¶è§£å³çé®é¢
- æ°æ®åå¸ï¼éæå¼å§æåæ¢å¤å¶ï¼å¹¶å¨ä¸åå°çä½ç½®å叿°æ®å¤ä»½
- è´è½½åè¡¡ï¼éä½å个æå¡å¨çåå
- é«å¯ç¨åæ é忢ï¼å¸®å©åºç¨ç¨åºé¿å åç¹å¤±è´¥
- å级æµè¯ï¼å¯ä»¥ç¨æ´é«çæ¬çMySQLä½ä¸ºä»åº
Â
ä¸ãå ¨åæ¥å¤å¶ä¸å忥å¤å¶
1.å ¨åæ¥å¤å¶ï¼ç»å¤å¶ï¼
è³å°ä¸ä¸ªæå¡å¨ï¼7个æä¸ºåéï¼ææä¸ºæ¯ä¸ªèç¹é½å¯è¿è¡è¯»å
1ï¼åç
å ¨åæ¥å¤å¶åç§°ç»å¤å¶ï¼æå½ä¸»åºæ§è¡å®ä¸ä¸ªäºå¡ï¼ææçä»åºé½æ§è¡äºè¯¥äºå¡æè¿åç»å®¢æ·ç«¯ãå 为éè¦çå¾ ææä»åºæ§è¡å®è¯¥äºå¡æè½è¿åï¼æä»¥å ¨åæ¥å¤å¶çæ§è½å¿ ç¶ä¼æ¶å°ä¸¥éçå½±åã
MySQLç»å¤å¶ä¸ºåå¸å¼ç¶ææºå¤å¶æä¾äºæå¡å¨ä¹é´ç强大åè°ãæå¡å¨å±äºåä¸ç»æ¶ï¼å®ä»¬ä¼èªå¨è¿è¡åè°ã该ç»å¯ä»¥å¨å ·æèªå¨ä¸»è¦é举çåä¸»è¦æ¨¡å¼ä¸è¿è¡ï¼å ¶ä¸ä¸æ¬¡ä» ä¸ä¸ªæå¡å¨æ¥åæ´æ°ãæè ï¼å¯¹äºæ´é«çº§çç¨æ·ï¼å¯ä»¥å¨å¤ä¸»è¦æ¨¡å¼ä¸é¨ç½²ç»ï¼å¨è¯¥æ¨¡å¼ä¸ï¼æææå¡å¨é½å¯ä»¥æ¥åæ´æ°ï¼å³ä½¿å®ä»¬æ¯åæ¶åå¸çãè¿ç§åè½ç代价æ¯åºç¨ç¨åºå¿ é¡»è§£å³æ¤ç±»é¨ç½²ææ½å çéå¶ã
Â
2ï¼å®ç°æ¥éª¤
master Aï¼
1ï¼vim /etc/my.cnf é ç½®ç»å¤å¶
server_id=1 ##é
ç½®åºæ¬æ¡æ¶
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
plugin_load_add='group_replication.so' ##ç»å¤å¶è®¾ç½®
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="8acb9904-9452-11ea-b4ac-000c29bb3e1d"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "192.168.43.10:33061"
loose-group_replication_group_seeds= "192.168.43.10:33061,192.168.43.20:33061,192.168.43.30:33061"
loose-group_replication_bootstrap_group=off
loose-group_replication_ip_whitelist='127.0.0.1,192.168.43.0/24'
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF
2) å建ä¸ä¸ªå ·æREPLICATION-SLAVEç¹æçMySQLç¨æ·
Â
master BãCï¼
åæ ·é ç½®åºæ¬æ¡æ¶åç»å¤å¶è®¾ç½®ï¼å¹¶è®¾å®ç¨æ·å¹¶ææ
å®ç°çææï¼
æ¤æ¶å¨ä»»æä¸ä¸ªmasterä¸æå ¥æ°æ®ï¼ä¸å°mysqlåå¯è§ï¼å³å¤äºç»å¤å¶ä¸çmysqlåå¯è¯»åã
2.å忥å¤å¶
1ï¼åç
妿å¨ä¸»æå¡å¨ç«¯å¯ç¨äºå忥å¤å¶ï¼å¹¶ä¸è³å°æä¸ä¸ªå忥仿å¡å¨ï¼åå¨ä¸»æå¡å¨ä¸æ§è¡äºå¡æäº¤ç线ç¨å°é»å¡å¹¶çå¾ ï¼ç´å°è³å°ä¸ä¸ªå忥仿å¡å¨ç¡®è®¤å·²æ¥æ¶å°è¯¥äºå¡çææäºä»¶ä¸ºæ¢ï¼æè ç´å°åçè¶ æ¶ã
ä»å±ä» å¨å°äºä»¶åå ¥å ¶ä¸ç»§æ¥å¿å¹¶å·æ°å°ç£çåï¼æç¡®è®¤æ¥æ¶å°äºå¡çäºä»¶ã妿åçè¶ æ¶è没æä»»ä½ä»å±æå¡å¨ç¡®è®¤è¯¥äºå¡ï¼å主æå¡å¨å°è¿åä¸ºå¼æ¥å¤å¶ãå½è³å°æä¸ä¸ªå忥ä»å±æå¡å¨èµ¶ä¸æ¶ï¼ä¸»æå¡å¨å°è¿åå°å忥å¤å¶ã
å¿ é¡»å¨ä¸»æå¡å¨å仿å¡å¨ä¸é½å¯ç¨å忥å¤å¶ã妿å¨ä¸»æå¡å¨ä¸ç¦ç¨äºå忥å¤å¶ï¼æè å¨ä¸»æå¡å¨ä¸ä½æ²¡æä»å±æå¡å¨ä¸å¯ç¨äºå忥å¤å¶ï¼å主æå¡å¨å°ä½¿ç¨å¼æ¥å¤å¶ã
Â
2ï¼å忥çä¸¤ç§æ¹æ¡ï¼After_commitä¸After_sync
     After_commitæ¯MSQL5.6å忥忰ï¼åºå«äºAfter_syncï¼After_syncæ¯å¨æ¥æ¶ack确认以å主åºå¨å¼æå±åæäº¤ï¼èAfter_commitæ¯å å¨å¼æå±åæäº¤åçå¾ ACK确认ãå æ¤ï¼å¨åå ¥æ°æ®åå¹¶ä¸å¨ä»åºç¡®è®¤ä¹åï¼å ¶ä»ç客æ·ç«¯å¯ä»¥çå°å¨è¿ä¸äºå¡ã
æ éåæï¼
1.binlog æªåéå°ä»åº:
    äºå¡Bè·åå°äºå¡Aæäº¤çå å®¹ï¼ æ¤æ¶å®æºæ é忢å°slaveï¼äºå¡Bè·åå°çå 容å´ä¸¢å¤±äºãäºå¡A commitæ²¡ææ¶å°åé¦ä¿¡æ¯(åéè¦ä¸å¡å¤æäº)ã
2.binlog å·²ç»åéç»ä»åº :
    äºå¡Bè·åå°äºå¡Aæäº¤çå å®¹ï¼æ é忢å°salve ï¼Bä»ç¶è·åå°Aæäº¤çå å®¹ï¼æ²¡æ¯ç ãäºå¡A commitæ²¡ææ¶å°åé¦ä¿¡æ¯ï¼è¥éæ°æ§è¡è¯¥äºå¡ï¼åç¸å½äºæ§è¡ä¸¤æ¬¡Aäºå¡(åéè¦ä¸å¡å¤æäº)ã
Â
   After_syncæ¯MySQL5.7宿¹æ°å çç¨ä»¥è§£å³MySQL5.6ååæ¥ç¼ºé·çé项ï¼ä¹æ¯å®æ¹æ¨èçæ¹å¼ãå®é ä¸ï¼å®¢æ·ç«¯ååºcommit请æ±åï¼å¨ä¸»åºä¸åå ¥binlogå¹¶æ¨éç»slaveï¼slaveæ¥æ¶å°binlogå¹¶åå ¥relaylogï¼åéACKç¡®è®¤å·²ç»æ¥æ¶binlogåï¼masterå¨å¼æå±commitï¼å®¢æ·ç«¯æ¥æ¶commitå®æï¼æ¤æ¶å ¶ä»ä¼è¯æå¯ä»¥çè§å·²æäº¤çæ°æ®ã
    æ éåæï¼å设master卿¥æ¶ACK确认æ¶å®æºï¼å 为å¨å¼æå±å¹¶æ²¡ææäº¤ï¼HA忢å°ä»åºï¼å 为binlogå·²ç»åå ¥ä»åºçrelaylogï¼å æ¤ä¸ä¼é ææ°æ®ä¸¢å¤±ï¼ä¸ªäººè®¤ä¸ºæ¯ç®åæ¯è¾å®ç¾çè§£å³æ¹å¼ã
Â
3ï¼å忥çå®ç°è¿ç¨
masterï¼
Â
slaveï¼
知识总结(15)mysql面试考点之源码编译、主从复制(异步复制)、全同步复制、半同步复制、读写分离、MHA高可用一、mysql8.0源码编译过程 二、mysql异步复制三、全同步复制与半同步复制 四、mysql读写分离、分表操作五、MHA高可用六.索引七.引擎
知识总结(15)mysql面试考点之源码编译、主从复制(异步复制)、全同步复制、半同步复制、读写分离、MHA高可用一、mysql8.0源码编译过程 二、mysql异步复制三、全同步复制与半同步复制 四、mysql读写分离、分表操作五、MHA高可用六.索引七.引擎
å®ç°çææï¼
å¨ä¸»æå¡å¨ä¸æ´æ°æ°æ®ï¼ä»æå¡å¨å¯ä»¥æ¶å°æ´æ°ãè¥ä¸æä»æå¡å¨ä¸çIO线ç¨å¹¶å¨ä¸»æå¡å¨ä¸æ´æ°æ°æ®ï¼è¥è¶ æ¶å仿ªæ¶å°ä»æå¡å¨ç确认ï¼ä¸»æå¡å¨ä¼èªå¨è½¬ä¸ºå¼æ¥å¤å¶ãæ¤æ¶å次å¼å¯ä»æå¡å¨ä¸çIO线ç¨ï¼æ¥æ¶å°æ´æ°ã
妿æ³é¿å åå°å¼æ¥å¤å¶ï¼å¯ä»¥å°timeout设为æ 穷大
Â
弿¥ãå忥ãç»å¤å¶ï¼å ¨åæ¥ï¼ç对æ¯
1ï¼å¤å¶éçï¼
弿¥ > å忥 > å ¨åæ¥
å ä¸ºå¼æ¥åªç®¡åéï¼ä¸ç®¡slaveæ¯å¦æ¥æ¶ãå忥éè¦è³å°ä¸ä¸ªslaveçack确认ï¼èå ¨åæ¥éè¦ææack确认æå¯å®æå¤å¶ã
Â
2)Â æ°æ®ä¸è´æ§:
å ¨åæ¥ > å忥 > 弿¥
éçåä¸
Â
åãmysql读åå离ãå表æä½
1.MySQLProxy读åå离åçÂ
MySQLProxyå®é 䏿¯å¨å®¢æ·ç«¯è¯·æ±ä¸MySQLServerä¹é´å»ºç«äºä¸ä¸ªè¿æ¥æ± ãææå®¢æ·ç«¯è¯·æ±é½æ¯ååMySQLProxyï¼ç¶åç»MySQLProxyè¿è¡ç¸åºçåæï¼å¤æåºæ¯è¯»æä½è¿æ¯åæä½ï¼ååè³å¯¹åºçMySQLServerä¸ã对äºå¤èç¹Slaveé群ï¼ä¹å¯ä»¥èµ·åå°è´è½½åè¡¡çææã
Â
2.为ä»ä¹è¦è¯»åå离ï¼
å ä¸ºæ°æ®åºçâåâï¼å10000æ¡æ°æ®å°oracleå¯è½è¦3åéï¼æä½æ¯æ¯è¾èæ¶çãÂ
使¯æ°æ®åºçâ读âï¼ä»oracle读10000æ¡æ°æ®å¯è½åªè¦5ç§éï¼ãÂ
æä»¥è¯»åå离ï¼è§£å³çæ¯ï¼æ°æ®åºçåå ¥ï¼å½±åäºæ¥è¯¢çæçã
Â
3.ä»ä¹æ¶åéè¦è¯»åå离ï¼
Â æ°æ®åºä¸ä¸å®è¦è¯»åå离ï¼å¦æç¨åºä½¿ç¨æ°æ®åºè¾å¤æ¶ï¼èæ´æ°å°ï¼æ¥è¯¢å¤çæ åµä¸ä¼èè使ç¨ï¼å©ç¨æ°æ®åº 主ä»åæ¥ ãå¯ä»¥åå°æ°æ®åºååï¼æé«æ§è½ãå½ç¶ï¼æ°æ®åºä¹æå ¶å®ä¼åæ¹æ¡ãmemcache ææ¯ 表æåï¼ææ¯æç´¢å¼æã齿¯è§£å³æ¹æ³ã
Â
4.主ä»å¤å¶ä¸è¯»åå离
å¨å®é çç产ç¯å¢ä¸ï¼å¯¹æ°æ®åºç读ååé½å¨åä¸ä¸ªæ°æ®åºæå¡å¨ä¸ï¼æ¯ä¸è½æ»¡è¶³å®é éæ±çãæ è®ºæ¯å¨å®å ¨æ§ãé«å¯ç¨æ§è¿æ¯é«å¹¶åçå个æ¹é¢é½æ¯å®å ¨ä¸è½æ»¡è¶³å®é éæ±çãå æ¤ï¼éè¿ä¸»ä»å¤å¶çæ¹å¼æ¥åæ¥æ°æ®ï¼åéè¿è¯»ååç¦»æ¥æåæ°æ®åºçå¹¶åè´è½½è½åãæç¹ç±»ä¼¼äºå颿们å¦ä¹ è¿çrsyncï¼ä½æ¯ä¸åçæ¯rsyncæ¯å¯¹ç£çæä»¶åå¤ä»½ï¼èmysql主ä»å¤å¶æ¯å¯¹æ°æ®åºä¸çæ°æ®ãè¯å¥åå¤ä»½ã
Â
Â
äºãMHAé«å¯ç¨
1.MHAä»ç»
MHAï¼Master High Availabilityï¼ç±ä¸¤é¨åç»æï¼MHA Managerï¼ç®¡çèç¹ï¼åMHA Nodeï¼æ°æ®èç¹ï¼ãMHA Managerå¯ä»¥åç¬é¨ç½²å¨ä¸å°ç¬ç«çæºå¨ä¸ç®¡çå¤ä¸ªmaster-slaveé群ï¼ä¹å¯ä»¥é¨ç½²å¨ä¸å°slaveèç¹ä¸ãMHA Nodeè¿è¡å¨æ¯å°MySQLæå¡å¨ä¸ï¼MHA Managerä¼å®æ¶æ¢æµé群ä¸çmasterèç¹ï¼å½masteråºç°æ éæ¶ï¼å®å¯ä»¥èªå¨å°ææ°æ°æ®çslaveæå为æ°çmasterï¼ç¶åå°ææå ¶ä»çslaveéæ°æåæ°çmasterãæ´ä¸ªæ é转移è¿ç¨å¯¹åºç¨ç¨åºå®å ¨éæã
å¨MHAèªå¨æ é忢è¿ç¨ä¸ï¼MHAè¯å¾ä»å®æºç主æå¡å¨ä¸ä¿åäºè¿å¶æ¥å¿ï¼æå¤§ç¨åº¦çä¿è¯æ°æ®çä¸ä¸¢å¤±ï¼ä½è¿å¹¶ä¸æ»æ¯å¯è¡çãä¾å¦ï¼å¦æä¸»æå¡å¨ç¡¬ä»¶æ éææ æ³éè¿ssh访é®ï¼MHA没æ³ä¿åäºè¿å¶æ¥å¿ï¼åªè¿è¡æ é转移èä¸¢å¤±äºææ°çæ°æ®ãMHAå¯ä»¥ä¸å忥å¤å¶ç»åèµ·æ¥ï¼å¯ä»¥å¤§å¤§é使°æ®ä¸¢å¤±çé£é©ãå¦æåªæä¸ä¸ªslaveå·²ç»æ¶å°äºææ°çäºè¿å¶æ¥å¿ï¼MHAå¯ä»¥å°ææ°çäºè¿å¶æ¥å¿åºç¨äºå ¶ä»ææçslaveæå¡å¨ä¸ï¼å æ¤å¯ä»¥ä¿è¯ææèç¹çæ°æ®ä¸è´æ§ã
ç®åMHAä¸»è¦æ¯æä¸ä¸»å¤ä»çæ¶æãè¦æå»ºMHAï¼è¦æ±ä¸ä¸ªå¤å¶é群ä¸å¿ é¡»æå°æä¸å°æ°æ®åºæå¡å¨ï¼ä¸ä¸»äºä»ï¼å³ä¸å°å å½masterï¼ä¸å°å å½å¤ç¨masterï¼å¦å¤ä¸å°å å½ä»åºãå 为è³å°éè¦ä¸å°æå¡å¨ã
Â
2.å®éªæ¥éª¤
ä¸å ±éè¦åå°ä¸»æº
server1ï¼192.168.43.10ï¼MHA node,ä½ä¸ºmaster
server2ï¼192.168.43.20ï¼MHA node,ä½ä¸ºslaveåå¤ç¨master
server3ï¼192.168.43.30ï¼MHA node,ä½ä¸ºslave
server4ï¼192.168.43.40ï¼MHA manager
1ï¼é ç½®å忥䏻ä»å¤å¶
masterï¼åå»ºç¨æ·å¹¶ææãå®è£ å忥å¤å¶æä»¶å¹¶æ¿æ´»ãå»ºç«æµè¯åº
slaveï¼ç¨change master toé ç½®å¤å¶å¤å¶æ¹å¼ãå®è£ å忥å¤å¶æä»¶å¹¶æ¿æ´»ãéå¯IO线ç¨
Â
2ï¼é ç½®å å¯ç»å½
MHA manager端ï¼server4ï¼çæç§é¥å¹¶åéè³1ã2ã3
Â
3ï¼å¨server1/2/3ä¸å®è£ MHA node
Â
4ï¼å®è£ MHA Managerå¹¶é ç½®MHA
Â
5ï¼æµè¯
æå¨ç¦»çº¿åæ¢ï¼
downæmasteråï¼æå¨å¨manager端设置æ°çmaster
masterha_master_switch --master_state=dead --conf=/etc/masterha/masterha.cnf --
dead_master_host=192.168.43.10 --dead_master_ip=192.168.43.10 --dead_master_port=3306 --
new_master_host=192.168.43.20 --new_master_port=3306 --ignore_last_failover
æå¨å¨çº¿åæ¢ï¼
æ§çmasterä¾ç¶åæ´»ï¼å¨masterç«¯ç´æ¥åæ¢æ°çmaster
masterha_master_switch --conf=/etc/masterha/masterha.cnf --master_state=alive --
new_master_host=192.168.43.10 --new_master_port=3306 --orig_master_is_new_slave --
running_updates_limit=10000**ä½¿åæ¥çmasterå为slaveï¼å¹¶éå¶10s
Â
èªå¨åæ¢ï¼
manager端设置èªå¨åæ¢ï¼æ¤è¿ç¨ä» çæä¸æ¬¡ï¼
nohup masterha_manager --conf=/etc/masterha/masterha.cnf &> /dev/null &
æ¤æ¶ææserver1ä¸çmasterï¼ä¼èªå¨åæ¢
Â
ç»å®vip忢ï¼
Â
å .ç´¢å¼
ä»ä¹æ¯ç´¢å¼ï¼
ç´¢å¼æ¯ä¸ç§ç¹æ®çæä»¶(InnoDBæ°æ®è¡¨ä¸çç´¢å¼æ¯è¡¨ç©ºé´çä¸ä¸ªç»æé¨å)ï¼å®ä»¬å å«çå¯¹æ°æ®è¡¨éææè®°å½çå¼ç¨æéã
ç´¢å¼æ¯ä¸ç§æ°æ®ç»æãæ°æ®åºç´¢å¼ï¼æ¯æ°æ®åºç®¡çç³»ç»ä¸ä¸ä¸ªæåºçæ°æ®ç»æï¼ä»¥åå©å¿«éæ¥è¯¢ãæ´æ°æ°æ®åºè¡¨ä¸æ°æ®ãç´¢å¼çå®ç°é常使ç¨Bæ åå ¶åç§B+æ ã
æ´éä¿ç说ï¼ç´¢å¼å°±ç¸å½äºç®å½ãä¸ºäºæ¹ä¾¿æ¥æ¾ä¹¦ä¸çå 容ï¼éè¿å¯¹å 容建ç«ç´¢å¼å½¢æç®å½ãç´¢å¼æ¯ä¸ä¸ªæä»¶ï¼å®æ¯è¦å æ®ç©ç空é´çã
ç´¢å¼æåªäºä¼ç¼ºç¹ï¼
ç´¢å¼çä¼ç¹
- å¯ä»¥å¤§å¤§å å¿«æ°æ®çæ£ç´¢é度ï¼è¿ä¹æ¯å建索å¼çæä¸»è¦çåå ã
- éè¿ä½¿ç¨ç´¢å¼ï¼å¯ä»¥å¨æ¥è¯¢çè¿ç¨ä¸ï¼ä½¿ç¨ä¼åéèå¨ï¼æé«ç³»ç»çæ§è½ã
ç´¢å¼ç缺ç¹
- æ¶é´æ¹é¢ï¼å建索å¼åç»´æ¤ç´¢å¼è¦èè´¹æ¶é´ï¼å ·ä½å°ï¼å½å¯¹è¡¨ä¸çæ°æ®è¿è¡å¢å ãå é¤åä¿®æ¹çæ¶åï¼ç´¢å¼ä¹è¦å¨æçç»´æ¤ï¼ä¼éä½å¢/æ¹/å çæ§è¡æçï¼
- ç©ºé´æ¹é¢ï¼ç´¢å¼éè¦å ç©ç空é´ã
ç´¢å¼æåªå ç§ç±»åï¼
主é®ç´¢å¼:Â æ°æ®åä¸å 许éå¤ï¼ä¸å 许为NULLï¼ä¸ä¸ªè¡¨åªè½æä¸ä¸ªä¸»é®ã
å¯ä¸ç´¢å¼:Â æ°æ®åä¸å 许éå¤ï¼å 许为NULLå¼ï¼ä¸ä¸ªè¡¨å 许å¤ä¸ªåå建å¯ä¸ç´¢å¼ã
- å¯ä»¥éè¿Â
 å建å¯ä¸ç´¢å¼ALTER TABLE table_name ADD UNIQUE (column);
- å¯ä»¥éè¿Â
 å建å¯ä¸ç»åç´¢å¼ALTER TABLE table_name ADD UNIQUE (column1,column2);
æ®éç´¢å¼:Â åºæ¬çç´¢å¼ç±»åï¼æ²¡æå¯ä¸æ§çéå¶ï¼å 许为NULLå¼ã
- å¯ä»¥éè¿
å建æ®éç´¢å¼ALTER TABLE table_name ADD INDEX index_name (column);
- å¯ä»¥éè¿
å建ç»åç´¢å¼ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);
å ¨æç´¢å¼ï¼Â æ¯ç®åæç´¢å¼æä½¿ç¨çä¸ç§å ³é®ææ¯ã
- å¯ä»¥éè¿
åå»ºå ¨æç´¢å¼ALTER TABLE table_name ADD FULLTEXT (column);
ç´¢å¼çæ°æ®ç»æï¼bæ ï¼hashï¼
ç´¢å¼çæ°æ®ç»æåå ·ä½åå¨å¼æçå®ç°æå ³ï¼å¨MySQLä¸ä½¿ç¨è¾å¤çç´¢å¼æHashç´¢å¼ï¼B+æ ç´¢å¼çï¼èæä»¬ç»å¸¸ä½¿ç¨çInnoDBåå¨å¼æçé»è®¤ç´¢å¼å®ç°ä¸ºï¼B+æ ç´¢å¼ã对äºåå¸ç´¢å¼æ¥è¯´ï¼åºå±çæ°æ®ç»æå°±æ¯åå¸è¡¨ï¼å æ¤å¨ç»å¤§å¤æ°éæ±ä¸ºåæ¡è®°å½æ¥è¯¢çæ¶åï¼å¯ä»¥éæ©åå¸ç´¢å¼ï¼æ¥è¯¢æ§è½æå¿«ï¼å ¶ä½å¤§é¨ååºæ¯ï¼å»ºè®®éæ©BTreeç´¢å¼ã
1ï¼Bæ ç´¢å¼
mysqléè¿åå¨å¼æåæ°æ®ï¼åºæ¬ä¸90%ç人ç¨çå°±æ¯InnoDBäºï¼æç §å®ç°æ¹å¼åï¼InnoDBçç´¢å¼ç±»åç®ååªæä¸¤ç§ï¼BTREEï¼Bæ ï¼ç´¢å¼åHASHç´¢å¼ãBæ ç´¢å¼æ¯Mysqlæ°æ®åºä¸ä½¿ç¨æé¢ç¹çç´¢å¼ç±»åï¼åºæ¬ææåå¨å¼æé½æ¯æBTreeç´¢å¼ãé常æä»¬è¯´çç´¢å¼ä¸åºæå¤æçå°±æ¯ï¼Bæ ï¼ç´¢å¼ï¼å®é æ¯ç¨B+æ å®ç°çï¼å ä¸ºå¨æ¥çè¡¨ç´¢å¼æ¶ï¼mysqlä¸å¾æå°BTREEï¼æä»¥ç®ç§°ä¸ºBæ ç´¢å¼ï¼
æ¥è¯¢æ¹å¼ï¼
主é®ç´¢å¼åº:PI(å ³èä¿åçæ¶æ°æ®çå°å)æä¸»é®æ¥è¯¢,
æ®éç´¢å¼åº:si(å ³èçidçå°å,ç¶ååå°è¾¾ä¸é¢çå°å)ãæä»¥æä¸»é®æ¥è¯¢,é度æå¿«
B+treeæ§è´¨ï¼
1.ï¼n棵åtreeçèç¹å å«nä¸ªå ³é®åï¼ä¸ç¨æ¥ä¿åæ°æ®èæ¯ä¿åæ°æ®çç´¢å¼ã
2.ï¼ææçå¶åç»ç¹ä¸å å«äºå ¨é¨å ³é®åçä¿¡æ¯ï¼åæåå«è¿äºå ³é®åè®°å½çæéï¼ä¸å¶åç»ç¹æ¬èº«ä¾å ³é®åç大å°èªå°è大顺åºé¾æ¥ã
3.ï¼ææçéç»ç«¯ç»ç¹å¯ä»¥çææ¯ç´¢å¼é¨åï¼ç»ç¹ä¸ä» å«å ¶åæ ä¸çæå¤§ï¼ææå°ï¼å ³é®åã
4.ï¼B+ æ ä¸ï¼æ°æ®å¯¹è±¡çæå ¥åå é¤ä» å¨å¶èç¹ä¸è¿è¡ã
5.ï¼B+æ æ2个头æéï¼ä¸ä¸ªæ¯æ çæ ¹èç¹ï¼ä¸ä¸ªæ¯æå°å ³é®ç çå¶èç¹ã
2ï¼åå¸ç´¢å¼
ç®è¦è¯´ä¸ï¼ç±»ä¼¼äºæ°æ®ç»æä¸ç®åå®ç°çHASHè¡¨ï¼æ£å表ï¼ä¸æ ·ï¼å½æä»¬å¨mysqlä¸ç¨åå¸ç´¢å¼æ¶ï¼ä¸»è¦å°±æ¯éè¿Hashç®æ³ï¼å¸¸è§çHashç®æ³æç´æ¥å®åæ³ãå¹³æ¹å䏿³ãæå æ³ã餿°å使³ãéæºæ°æ³ï¼ï¼å°æ°æ®åºåæ®µæ°æ®è½¬æ¢æå®é¿çHashå¼ï¼ä¸è¿æ¡æ°æ®çè¡æéä¸å¹¶åå ¥Hash表ç对åºä½ç½®ï¼å¦æåçHash碰æï¼ä¸¤ä¸ªä¸åå ³é®åçHashå¼ç¸åï¼ï¼åå¨å¯¹åºHashé®ä¸ä»¥é¾è¡¨å½¢å¼åå¨ãå½ç¶è¿åªæ¯ç®ç¥æ¨¡æå¾ã
ç´¢å¼è®¾è®¡çååï¼
- éåç´¢å¼ç忝åºç°å¨whereåå¥ä¸çåï¼æè è¿æ¥åå¥ä¸æå®çå
- åºæ°è¾å°çç±»ï¼ç´¢å¼ææè¾å·®ï¼æ²¡æå¿ è¦å¨æ¤å建ç«ç´¢å¼
- 使ç¨çç´¢å¼ï¼å¦æå¯¹é¿å符串åè¿è¡ç´¢å¼ï¼åºè¯¥æå®ä¸ä¸ªåç¼é¿åº¦ï¼è¿æ ·è½å¤èç大éç´¢å¼ç©ºé´
- ä¸è¦è¿åº¦ç´¢å¼ãç´¢å¼éè¦é¢å¤çç£ç空é´ï¼å¹¶éä½åæä½çæ§è½ãå¨ä¿®æ¹è¡¨å å®¹çæ¶åï¼ç´¢å¼ä¼è¿è¡æ´æ°çè³éæï¼ç´¢å¼åè¶å¤ï¼è¿ä¸ªæ¶é´å°±ä¼è¶é¿ãæä»¥åªä¿æéè¦çç´¢å¼æå©äºæ¥è¯¢å³å¯ã
å建索å¼çååï¼éä¸ä¹éï¼
ç´¢å¼è½å¥½ï¼ä½ä¹ä¸æ¯æ éå¶ç使ç¨ï¼æå¥½ç¬¦åä¸ä¸å 个åå
1ï¼ æå·¦åç¼å¹é ååï¼ç»åç´¢å¼é常éè¦çååï¼mysqlä¼ä¸ç´åå·¦å¹é ç´å°éå°èå´æ¥è¯¢(>ã<ãbetweenãlike)就忢å¹é ï¼æ¯å¦a = 1 and b = 2 and c > 3 and d = 4 å¦æå»ºç«(a,b,c,d)顺åºçç´¢å¼ï¼dæ¯ç¨ä¸å°ç´¢å¼çï¼å¦æå»ºç«(a,b,d,c)çç´¢å¼åé½å¯ä»¥ç¨å°ï¼a,b,dç顺åºå¯ä»¥ä»»æè°æ´ã
2ï¼è¾é¢ç¹ä½ä¸ºæ¥è¯¢æ¡ä»¶çåæ®µæå»å建索å¼
3ï¼æ´æ°é¢ç¹å段ä¸éåå建索å¼
4ï¼åºå度ä½çåæ®µä¸éååç´¢å¼ï¼æ¯å¦æ§å«
5ï¼å°½éçæ©å±ç´¢å¼ï¼ä¸è¦æ°å»ºç´¢å¼ãæ¯å¦è¡¨ä¸å·²ç»æaçç´¢å¼ï¼ç°å¨è¦å (a,b)çç´¢å¼ï¼é£ä¹åªéè¦ä¿®æ¹åæ¥çç´¢å¼å³å¯ã
6ï¼å®ä¹æå¤é®çæ°æ®åä¸å®è¦å»ºç«ç´¢å¼ã
7ï¼å¯¹äºé£äºæ¥è¯¢ä¸å¾å°æ¶åçåï¼éå¤å¼æ¯è¾å¤çåä¸è¦å»ºç«ç´¢å¼ã
8ï¼å¯¹äºå®ä¹ä¸ºtextãimageåbitçæ°æ®ç±»åçåä¸è¦å»ºç«ç´¢å¼ã
Bæ åB+æ çåºå«
- å¨Bæ ä¸ï¼ä½ å¯ä»¥å°é®åå¼åæ¾å¨å é¨èç¹åå¶åèç¹ï¼ä½å¨B+æ ä¸ï¼å é¨èç¹é½æ¯é®ï¼æ²¡æå¼ï¼å¶åèç¹åæ¶åæ¾é®åå¼ã
- B+æ çå¶åèç¹æä¸æ¡é¾ç¸è¿ï¼èBæ çå¶åèç¹åèªç¬ç«ã
知识总结(15)mysql面试考点之源码编译、主从复制(异步复制)、全同步复制、半同步复制、读写分离、MHA高可用一、mysql8.0源码编译过程 二、mysql异步复制三、全同步复制与半同步复制 四、mysql读写分离、分表操作五、MHA高可用六.索引七.引擎
使ç¨Bæ ç好å¤
Bæ å¯ä»¥å¨å é¨èç¹åæ¶åå¨é®åå¼ï¼å æ¤ï¼æé¢ç¹è®¿é®çæ°æ®æ¾å¨é è¿æ ¹èç¹çå°æ¹å°ä¼å¤§å¤§æé«çç¹æ°æ®çæ¥è¯¢æçãè¿ç§ç¹æ§ä½¿å¾Bæ å¨ç¹å®æ°æ®éå¤å¤æ¬¡æ¥è¯¢çåºæ¯ä¸æ´å 髿ã
使ç¨B+æ ç好å¤
ç±äºB+æ çå é¨èç¹åªåæ¾é®ï¼ä¸åæ¾å¼ï¼å æ¤ï¼ä¸æ¬¡è¯»åï¼å¯ä»¥å¨å å页ä¸è·åæ´å¤çé®ï¼æå©äºæ´å¿«å°ç¼©å°æ¥æ¾èå´ã B+æ çå¶èç¹ç±ä¸æ¡é¾ç¸è¿ï¼å æ¤ï¼å½éè¦è¿è¡ä¸æ¬¡å ¨æ°æ®éåçæ¶åï¼B+æ åªéè¦ä½¿ç¨O(logN)æ¶é´æ¾å°æå°çä¸ä¸ªèç¹ï¼ç¶åéè¿é¾è¿è¡O(N)ç顺åºéåå³å¯ãèBæ åéè¦å¯¹æ çæ¯ä¸å±è¿è¡éåï¼è¿ä¼éè¦æ´å¤çå åç½®æ¢æ¬¡æ°ï¼å æ¤ä¹å°±éè¦è±è´¹æ´å¤çæ¶é´
ç¾ä¸çº§å«æä»¥ä¸çæ°æ®å¦ä½å é¤
å ³äºç´¢å¼ï¼ç±äºç´¢å¼éè¦é¢å¤çç»´æ¤ææ¬ï¼å ä¸ºç´¢å¼æä»¶æ¯åç¬åå¨çæä»¶,æä»¥å½æä»¬å¯¹æ°æ®çå¢å ,ä¿®æ¹,å é¤,é½ä¼äº§çé¢å¤çå¯¹ç´¢å¼æä»¶çæä½,è¿äºæä½éè¦æ¶èé¢å¤çIO,ä¼éä½å¢/æ¹/å çæ§è¡æçãæä»¥ï¼å¨æä»¬å 餿°æ®åºç¾ä¸çº§å«æ°æ®çæ¶åï¼æ¥è¯¢MySQL宿¹æåå¾ç¥å 餿°æ®çé度åå建çç´¢å¼æ°éæ¯ææ£æ¯çã
- æä»¥æä»¬æ³è¦å é¤ç¾ä¸æ°æ®çæ¶åå¯ä»¥å å é¤ç´¢å¼ï¼æ¤æ¶å¤§æ¦èæ¶ä¸åå¤éï¼
- ç¶åå é¤å ¶ä¸æ ç¨æ°æ®ï¼æ¤è¿ç¨éè¦ä¸å°ä¸¤åéï¼
- å é¤å®æåéæ°å建索å¼(æ¤æ¶æ°æ®è¾å°äº)å建索å¼ä¹é常快ï¼çº¦ååéå·¦å³ã
- ä¸ä¹åçç´æ¥å é¤ç»å¯¹æ¯è¦å¿«éå¾å¤ï¼æ´å«è¯´ä¸ä¸å é¤ä¸æ,ä¸åå é¤ä¼åæ»ã飿´æ¯åäºã
Â
ä¸.弿
MySQLåå¨å¼æMyISAMä¸InnoDBåºå«
åå¨å¼æStorage engineï¼MySQLä¸çæ°æ®ãç´¢å¼ä»¥åå ¶ä»å¯¹è±¡æ¯å¦ä½åå¨çï¼æ¯ä¸å¥æä»¶ç³»ç»çå®ç°ã
常ç¨çåå¨å¼ææä»¥ä¸ï¼
- Innodb弿ï¼Innodb弿æä¾äºå¯¹æ°æ®åºACIDäºå¡çæ¯æãå¹¶ä¸è¿æä¾äºè¡çº§éåå¤é®ç约æãå®ç设计çç®æ å°±æ¯å¤çå¤§æ°æ®å®¹éçæ°æ®åºç³»ç»ã
- MyIASM弿(忬Mysqlçé»è®¤å¼æ)ï¼ä¸æä¾äºå¡çæ¯æï¼ä¹ä¸æ¯æè¡çº§éåå¤é®ã
- MEMORYå¼æï¼ææçæ°æ®é½å¨å åä¸ï¼æ°æ®çå¤çé度快ï¼ä½æ¯å®å ¨æ§ä¸é«ã
MyISAMä¸InnoDBåºå«
 | MyISAM | Innodb |
---|---|---|
åå¨ç»æ | æ¯å¼ è¡¨è¢«åæ¾å¨ä¸ä¸ªæä»¶ï¼frm-è¡¨æ ¼å®ä¹ãMYD(MYData)-æ°æ®æä»¶ãMYI(MYIndex)-ç´¢å¼æä»¶ | ææç表é½ä¿åå¨åä¸ä¸ªæ°æ®æä»¶ä¸ï¼ä¹å¯è½æ¯å¤ä¸ªæä»¶ï¼æè æ¯ç¬ç«çè¡¨ç©ºé´æä»¶ï¼ï¼InnoDB表ç大å°åªåéäºæä½ç³»ç»æä»¶ç大å°ï¼ä¸è¬ä¸º2GB |
åå¨ç©ºé´ | MyISAMå¯è¢«å缩ï¼åå¨ç©ºé´è¾å° | InnoDBç表éè¦æ´å¤çå åååå¨ï¼å®ä¼å¨ä¸»å åä¸å»ºç«å ¶ä¸ç¨çç¼å²æ± ç¨äºé«éç¼å²æ°æ®åç´¢å¼ |
å¯ç§»æ¤æ§ãå¤ä»½åæ¢å¤ | ç±äºMyISAMçæ°æ®æ¯ä»¥æä»¶çå½¢å¼åå¨ï¼æä»¥å¨è·¨å¹³å°çæ°æ®è½¬ç§»ä¸ä¼å¾æ¹ä¾¿ãå¨å¤ä»½åæ¢å¤æ¶å¯åç¬é对æä¸ªè¡¨è¿è¡æä½ | å è´¹çæ¹æ¡å¯ä»¥æ¯æ·è´æ°æ®æä»¶ãå¤ä»½ binlogï¼æè ç¨ mysqldumpï¼å¨æ°æ®éè¾¾å°å åGçæ¶åå°±ç¸å¯¹çè¦äº |
æä»¶æ ¼å¼ | æ°æ®åç´¢å¼æ¯åå«åå¨çï¼æ°æ® ï¼ç´¢å¼ | æ°æ®åç´¢å¼æ¯éä¸åå¨çï¼ |
è®°å½åå¨é¡ºåº | æè®°å½æå ¥é¡ºåºä¿å | æä¸»é®å¤§å°æåºæå ¥ |
å¤é® | 䏿¯æ | æ¯æ |
äºå¡ | 䏿¯æ | æ¯æ |
鿝æï¼éæ¯é¿å èµæºäºç¨çä¸ä¸ªæºå¶ï¼MySQLéå¯¹ç¨æ·å 乿¯éæçï¼ | 表级éå® | è¡çº§éå®ã表级éå®ï¼éå®å度å°å¹¶åè½åé« |
SELECT | MyISAMæ´ä¼ | Â |
INSERTãUPDATEãDELETE | Â | InnoDBæ´ä¼ |
select count(*) | myisamæ´å¿«ï¼å 为myisamå é¨ç»´æ¤äºä¸ä¸ªè®¡æ°å¨ï¼å¯ä»¥ç´æ¥è°åã |  |
ç´¢å¼çå®ç°æ¹å¼ | B+æ ç´¢å¼ï¼myisam æ¯å 表 | B+æ ç´¢å¼ï¼Innodb æ¯ç´¢å¼ç»ç»è¡¨ |
åå¸ç´¢å¼ | 䏿¯æ | æ¯æ |
å ¨æç´¢å¼ | æ¯æ | 䏿¯æ |
MyISAMç´¢å¼ä¸InnoDBç´¢å¼çåºå«ï¼
- InnoDBç´¢å¼æ¯èç°ç´¢å¼ï¼MyISAMç´¢å¼æ¯éèç°ç´¢å¼ã
- InnoDBç主é®ç´¢å¼çå¶åèç¹åå¨çè¡æ°æ®ï¼å æ¤ä¸»é®ç´¢å¼é叏髿ã
- MyISAMç´¢å¼çå¶åèç¹åå¨çæ¯è¡æ°æ®å°åï¼éè¦å寻å䏿¬¡æè½å¾å°æ°æ®ã
- InnoDBé主é®ç´¢å¼çå¶åèç¹åå¨çæ¯ä¸»é®åå ¶ä»å¸¦ç´¢å¼çåæ°æ®ï¼å æ¤æ¥è¯¢æ¶åå°è¦çç´¢å¼ä¼é叏髿ã
InnoDB弿ç4å¤§ç¹æ§
- æå ¥ç¼å²ï¼insert buffer)
- äºæ¬¡å(double write)
- èªéåºåå¸ç´¢å¼(ahi)
- é¢è¯»(read ahead)
åå¨å¼æéæ©
å¦ææ²¡æç¹å«çéæ±ï¼ä½¿ç¨é»è®¤ç
Innodb
å³å¯ã
MyISAMï¼ä»¥è¯»åæå ¥ä¸ºä¸»çåºç¨ç¨åºï¼æ¯å¦å客系ç»ãæ°é»é¨æ·ç½ç«ã
Innodbï¼æ´æ°ï¼å é¤ï¼æä½é¢çä¹é«ï¼æè è¦ä¿è¯æ°æ®ç宿´æ§ï¼å¹¶åéé«ï¼æ¯æäºå¡åå¤é®ãæ¯å¦OAèªå¨ååå ¬ç³»ç»ã