日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql aa复制_MySQL的复制架构与优化

發(fā)布時(shí)間:2023/12/1 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql aa复制_MySQL的复制架构与优化 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL的復(fù)制架構(gòu)與優(yōu)化

###########原理###########

1.主服務(wù)器將更新的數(shù)據(jù)的sql語句(例如,insert,update,delete等)寫入到

二進(jìn)制文件中(由log-bin選項(xiàng)開啟)。此二進(jìn)制文件由一個(gè)索引文件跟蹤維護(hù)。

2.從服務(wù)器連接(使用I/O線程連接)主服務(wù)器,將自己最后一次更新的位置通知

主服務(wù)器。然后,主服務(wù)器將把從‘從服務(wù)器’得知的位置開始之后的所有更新發(fā)

送給‘從服務(wù)器’(使用Binlog Dump線程來發(fā)送),而后‘從服務(wù)器’再次使用I/O

線程讀取由Binlog Dump線程發(fā)送過來的數(shù)據(jù),并將數(shù)據(jù)拷貝到本地的‘中繼二進(jìn)

制文件'中。最后,再由SQL線程讀取’中繼二進(jìn)制文件‘并執(zhí)行其中的更新。

注:mysql的復(fù)制由三個(gè)線程來完成,一是,主服務(wù)器上的Binlog Dump線程;二

是,從服務(wù)器上的I/O線程(用來連接和讀取主服務(wù)更新,并拷貝到中繼二進(jìn)制文

件)和SQL線程(用來讀取中繼二進(jìn)制日志和執(zhí)行更新)。

#######################################

#? ????? 主從架構(gòu)????? #

#######################################

#############配置#############

注:此處使用的是 mysql-5.5.28的二進(jìn)制包。安裝過程略。直接進(jìn)行主從復(fù)制配置

##主服務(wù)器

1. 更改/etc/my.cnf:

server-id = 1???? #設(shè)置服務(wù)器唯一標(biāo)識(shí)

log-bin=mysql-bin #開啟二進(jìn)制日志功能

2. 添加復(fù)制用戶:

GRANT REPLICATION CLIENT,REPLICATION SLAVE TO 'repl'@'192.168.1.103'

IDENTIFIED BY '123';

##從服務(wù)器

1. 更改/etc/my.cnf:

server-id = 2?????#同主服務(wù)器

relay-log=relay-bin??? ?#開啟中繼日志

relay-log-index=relay-bin.index #開啟跟蹤中繼日志的索引,若未設(shè)置此選

項(xiàng)系統(tǒng)也會(huì)自動(dòng)生成索引文件。

2. 啟動(dòng)mysql并設(shè)置為從服務(wù)器

1. mysql -uroot -p

2. CHANGE MASTER TO MASTER_HOST='192.168.1.102',

MASTER_USER='repl',

MASTER_PASSWORD='123',

MASTER_PORT='3306';

3. START SLAVE;

4. SHOW SLAVE STATUS \G; 若Slave_IO_Running:和Slave_SQL_Running: 均顯示

Yes則說明從服務(wù)器配置成功。

注: SHOW SLAVE STATUS \G;顯示信息中的Seconds_Behind_Master: 表示從服務(wù)

器和主服務(wù)器數(shù)據(jù)相差的時(shí)間間隔。

5. 測試:在主服務(wù)上創(chuàng)建表或數(shù)據(jù)庫,查看是否在從服務(wù)器上有相同的表和數(shù)據(jù)庫。

若有,則主從復(fù)制搭建成功。

#############安全############

##阻止寫從服務(wù)器

1.修改/etc/my.cnf

[mysqld]

read-only = 1 # 此選項(xiàng)只對(duì)普通用戶起作用,對(duì)有SUPER權(quán)限的用戶無效。

2. FLUSH TABLES WITH READ LOCK;#為全局讀鎖命令,此時(shí)除了讀操作,其他操作無法執(zhí)行

##實(shí)現(xiàn)半同步

說明:主——>從,為異步模式。mysql從5.5開始支持半同步模式復(fù)制,半同步插件為semisync,存儲(chǔ)

在/usr/local/mysql/plugin下。

1. 在主服務(wù)器,安裝semisync插件

CHANGE INSTALL rpl_semi_sync_master SONAME 'semisync_master.so';

查看是否安裝成功:

SHOW PLUGINS; #若有rpl_semi_sync_master 則安裝成功。

啟用半同步功能和設(shè)置超時(shí)時(shí)間:

SET GLOBAL rpl_semi_sync_master_enabled=1;

SET GLOBAL rpl_semi_sync_master_timeout=1000; #單位是ms,如果半同步在此設(shè)置的

時(shí)間內(nèi)無法同步,則自動(dòng)降回異步模式。

注:若使設(shè)置永久有效,把以上兩項(xiàng)寫入my.cnf的[mysqld]下即可。

2. 在從服務(wù)器,安裝semisync插件

CHANGE INSTALL rpl_semi_sync_slave SONAME 'semisync_slave.so';

查看是否安裝成功:

SHOW PLUGINS; #若有rpl_semi_sync_slave 則安裝成功。

啟用半同步功能和設(shè)置超時(shí)時(shí)間:

SET GLOBAL rpl_semi_sync_slave_enabled=1;

重啟slave:

stop slave;

start slave;

3. 檢測半同步功能是否已經(jīng)生效

SHOW STATUS LIKE ‘rpl_%';

若Rpl_semi_sync_master_clients 的值不為0,則說明半同步功能已經(jīng)生效。

##如何讓從服務(wù)器的mysql服務(wù)在啟動(dòng)的時(shí)候,不自動(dòng)啟動(dòng)從服務(wù)線程?

說明:從服務(wù)器之所以在啟動(dòng)的時(shí)候會(huì)自動(dòng)啟動(dòng)線程,是因?yàn)閙aster.info和relay-log.info文件的存在。

master.info記錄的是CHANGE MASTER TO命令傳遞的參數(shù);relay-log.info記錄的是當(dāng)前從服務(wù)器所使用的

中繼日志的位置和從主服務(wù)器復(fù)制的二進(jìn)制文件和所處的位置。

1. 在從服務(wù)器上,禁止自動(dòng)啟動(dòng)線程

更改my.cnf,加入以下選項(xiàng):

[mysqld]

skip-slave-start=1

##數(shù)據(jù)庫復(fù)制過濾

主服務(wù)器:

1.[mysqld]

binlog-do-db=test ? #只復(fù)制test數(shù)據(jù)庫,相當(dāng)于白名單。

binlog-ignore-db=mysql #除了mysql數(shù)據(jù)庫外不復(fù)制外,其他的都要復(fù)制,相當(dāng)于黑名單。

注:一般這兩項(xiàng)不同時(shí)使用,若同時(shí)存在,則白名單生效。不過,在主服務(wù)器上做過濾有個(gè)缺陷,就是任何

涉及不到的數(shù)據(jù)庫,都不會(huì)記錄在二進(jìn)制日志中。因此,大多情況下不在主服務(wù)器上做過濾。

從服務(wù)器:

1.[mysqld]

replicate-do-db=test1

replicate-ignore-db=test1

replicate-do-table=test2.t1

replicate-ignore-table=test2.t2

replicate-wild-do-table=test3.ta%

replicate-wild-ignore-table=test3.tb%

##防止事務(wù)提交和寫入日志,期間的服務(wù)器崩潰問題

主服務(wù)器:

1. [mysqld]

sync_binlog=1 #每次事件后立即同步到磁盤上的二進(jìn)制日志文件中

innodb_flush_logs_at_trx_commit=1 #

#######################################

#? ????? 主主架構(gòu)????? #

#######################################

說明:主主架構(gòu),即服務(wù)器互為主從。配置基本上和主從差不多。此處關(guān)鍵的是如果

數(shù)據(jù)庫的表中使用了auto_incremnet 關(guān)鍵字,則需要設(shè)置auto-increment-increment

和auto-increment-offset兩項(xiàng)以防止鍵值沖突。

##主服務(wù)器

1. GRANT REPLICATION CLIENT,REPLICATION SLAVE TO 't1'@'192.168.1.103'

IDENTIFIED BY '123';

2.?[mysqld]

server-id=10

log-bin=mysql-bin

auto-increment-increment=2

auto-increment-offset=1

3. mysql -uroot -p

4. CHANGE MASTER TO MASTER_HOST='192.168.1.102',

MASTER_USER='t2',

MASTER_PASSWORD='123',

MASTER_PORT='3306';

##從服務(wù)器

1. GRANT REPLICATION CLIENT,REPLICATION SLAVE TO 't2'@'192.168.1.102'

IDENTIFIED BY '123';

2.?[mysqld]

server-id=10

log-bin=mysql-bin

auto-increment-increment=2

auto-increment-offset=1

3. mysql -uroot -p

4. CHANGE MASTER TO MASTER_HOST='192.168.1.103',

MASTER_USER='t1',

MASTER_PASSWORD='123',

MASTER_PORT='3306';

#################MySQL復(fù)制架構(gòu)解決方案###############

1.主——>從(解決應(yīng)用程序與耦合度較高的問題)

1.分三層:

1.讀寫分離器,產(chǎn)品有:MySQL Proxy和Amoeba

2.主服務(wù)器

3.從服務(wù)器

2.分四層:

1.讀寫分離器

2.主服務(wù)器

3.偽從服務(wù)器(所用引擎BLACKHOLE)

4.從服務(wù)器

2.主——>主(解決更新數(shù)據(jù)時(shí),數(shù)據(jù)不一致的情況)

1.主動(dòng)/被動(dòng)模式

即,將兩個(gè)主機(jī)server-id設(shè)置為相同值。

產(chǎn)品:mmm,Multi Master Manager

#####################故障解決################

##解決:出現(xiàn)錯(cuò)誤時(shí),不能啟動(dòng)從服務(wù)器

1. SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; #此語句可以跳過來自主服務(wù)的下一個(gè)語句

START SLAVE;

或?2. 使用pt-slave-restart工具,來自percona-toolkit包。

##解決:數(shù)據(jù)出現(xiàn)不一致

1. 檢查一致性使用:

pt-table-checksum #此工具四種功能:1.校驗(yàn)主從數(shù)據(jù)

2.監(jiān)控復(fù)制延遲時(shí)間

3.系統(tǒng)開銷很小

4.檢查數(shù)據(jù)一致性

2. 修復(fù)不一致性使用:

pt-table-sync

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

######################MySQL的優(yōu)化#######################

##技巧

1.使用正則表達(dá)式REGEXP,取出匹配數(shù)據(jù)

例:SELECT name,email FROM t WHERE email REGEXP '@126[.,]com$';

如果使用like方式查詢

例:SELECT name,email FROM t WHERE email LIKE '%126.com' or email LIKE '%126,com';

注:使用正則比使用like的一個(gè)缺點(diǎn)是系統(tǒng)資源的開銷會(huì)更大一下。

2.使用RAND()隨機(jī)取出數(shù)據(jù)

例:SELECT * FROM t ORDER BY RAND();

SELECT * FROM t ORDER BY RAND() LIMIT 3;

3.使用GROUP BY的WITH ROLLUP,進(jìn)一步分組聚合數(shù)據(jù)。

例:SELECT cname,pname,COUNT(cname) FROM demo GROUP BY cname,pname WITH ROLLUP;

注:WITH ROLLUP 不能與ORDER BY 同時(shí)使用

##優(yōu)化

一.優(yōu)化SQL語句常用命令

1.通過SHOW STATUS命令查詢各種SQL的執(zhí)行頻率。

SHOW [SESSION|GLOBAL] STATUS;

其中:SESSION(默認(rèn))表示當(dāng)前連接。

GLOBAL表示自數(shù)據(jù)庫啟動(dòng)至今。

@@主要查詢以com開頭的參數(shù):

SHOW STATUS LIEK 'com_%'; #Com_XXX表示每個(gè)XXX語句執(zhí)行的次數(shù)

@@需要查看的主要的以com開頭的參數(shù)

com_select:執(zhí)行select操作的次數(shù),一次查詢只累計(jì)加1

com_update:執(zhí)行update操作的次數(shù)

com_insert:執(zhí)行insert操作的次數(shù),對(duì)批量插入只算一次

com_delete:執(zhí)行delete操作的次數(shù)

注:以上參數(shù)是對(duì)所有引擎的。

@@以下是只針對(duì)InnoDB存儲(chǔ)引擎的。

InnoDB_rows_read:執(zhí)行select操作的次數(shù)

InnoDB_rows_updated:執(zhí)行update操作的次數(shù)

InnoDB_rows_inserted:執(zhí)行insert操作的次數(shù)

InnoDB_rows_deleted:執(zhí)行delete操作的次數(shù)

注:以上針對(duì)InnoDB的操作次數(shù)是影響的數(shù)據(jù)的“行”數(shù),而不是相應(yīng)語句的次數(shù)。

@@其他重要參數(shù)

connections:連接mysql的次數(shù),包括成功和不成功的。

uptime:服務(wù)器已經(jīng)工作的秒數(shù)。

slow_queries:慢查詢的次數(shù)。#可通過SHOW VARIABLES LIKE '%slow_queries%';查看是否開啟

2.定位執(zhí)行效率較低的SQL語句

1.explain(或describe) select * from table where id=1000;

2.優(yōu)化SQL語句

1.查詢慢查詢?nèi)罩?/p>

2.解析查詢語句

3.判斷是否要加索引和索引是否可使用上

3.索引優(yōu)化

1.添加索引,主要是在WHERE,HAVING,GROUP BY,OREDER BY后所使用的字段上。

2.使用LIKE時(shí),不要把%通配符放在前面,否則索引就無法使用的到。

3.在使用OR和AND時(shí),前后的兩個(gè)條件都要使用索引,否則索引就用不到

4.如果給定的條件表達(dá)式的值的數(shù)據(jù)類型和定義的不一樣,則無法用到索引

5.查看索引使用情況:SHOW STATUS LIKE 'Handler_read%';

其中所顯示的參數(shù):Handler_read_key的值,表示讀取索引的次數(shù)。

Handler_read_rnd_next的值越高則,需要添加索引的列越多。

4.表優(yōu)化

1.分析和檢查表

CHECK TABLE t1; #檢查表t1是否有錯(cuò)誤

2.優(yōu)化表空間

OPTIMIZE TABLE t1; #最好在非工作時(shí)間使用

5.常用SQL優(yōu)化

1.導(dǎo)入導(dǎo)出優(yōu)化

@@導(dǎo)出使用:SELECT * FROM table INTO OUTFILE '/tmp/table.txt';

@@導(dǎo)入使用:LOAD DATA INFILE ‘/tmp/table.txt' INTO TABLE table;

2.關(guān)閉索引使導(dǎo)入速度更快

1.@@關(guān)閉索引:ALTER TABLE tbl_name DISABLE KEYS;

@@導(dǎo)入數(shù)據(jù)

@@開啟索引:ALTER TABLE tbl_name ENABLE KEYS;

注:以上只對(duì)MyISAM表的數(shù)據(jù)導(dǎo)入能提高速度,對(duì)InnoDB無效

2.@@關(guān)閉唯一索引:SET unique_checks=0

@@導(dǎo)入數(shù)據(jù)

@@恢復(fù)唯一索引:SET unique_checks=1

注:如果能確定數(shù)據(jù)的唯一性,則可以使用關(guān)閉唯一索引來提高速度。否則不建議關(guān)閉。

3.針對(duì)InnoDB表類型的數(shù)據(jù)導(dǎo)入的優(yōu)化

1.將導(dǎo)入的數(shù)據(jù)按主鍵的順序來排列,可提高導(dǎo)入速度

2.@@關(guān)閉自動(dòng)提交:SET autocommit=0

@@導(dǎo)入數(shù)據(jù)

@@恢復(fù)自動(dòng)提交:SET autocommit=1

6.INSERT語句的優(yōu)化

1.插入數(shù)據(jù)時(shí),使用INSERT INTO tbl_name VALUES('aa'),('bb')......('zz');

7.GROUP BY語句的優(yōu)化

1.禁用分組排序,使用SELECT * FROM tbl_name GROUP BY cloumn ORDER BY NULL;

8.嵌套優(yōu)化查詢

1.使用嵌套查詢,內(nèi)部嵌套的查詢會(huì)用到索引,而外層的用不到。

將嵌套查詢改為,內(nèi)連接或是外連接,則可優(yōu)化查詢。

二.數(shù)據(jù)庫優(yōu)化

1.使用中間表

@@創(chuàng)建新表。#不夠靈活

@@創(chuàng)建視圖。#推薦做法

2.分區(qū)(海量數(shù)據(jù)的優(yōu)化,在Mysql5.1及以后提供)

##MyISAM引擎:

@@RANGE類型:

CREATE TABLE t1(id int,name varchar(30))

-->PARTITION BY RANGE(id)(

-->PARTITION p0 VALUES LESS THAN (11),

-->PARTITION p1 VALUES LESS THAN (21)

-->);

@@LIST類型:

CREATE TABLE t1(id int,name varchar(30))

-->PARTITION BY LIST(id)(

-->PARTITION p0 VALUES IN(1,3,6,7,10),

-->PARTITION p1 VALUES IN(2,4,5,8,11)

-->);

@@HASH類型:

CREATE TABLE t1(id int,name varchar(30))

-->PARTITION BY HASH(id)

-->PARTITIONS 2;

##InnoDB引擎

@@修改my.cnf

[mysqld]

innodb_file_per_table=1 #開啟InnoDB的獨(dú)立存儲(chǔ)空間

@@其他的和MyISAM相同

三. Mysql服務(wù)器優(yōu)化

##鎖機(jī)制

1.MyISAM讀鎖定

@@命令:LOCK TABLE tbl_name READ #所有用戶只能讀,不能更新,刪除等。

2.MyISAM寫鎖定

@@命令:LOCK TABLE tbl_name WRITE #只有當(dāng)前用戶可增刪改查,其他用戶無法進(jìn)行任何操作。

3.解鎖:UNLOCK TABLES;

##字符集

1.@@使用:STATUS或\s,可查看基本信息和字符集。

其中,有服務(wù)器字符集、數(shù)據(jù)庫字符集、客戶端字符集、連接字符集,可設(shè)置。

@@客戶端和連接字符集設(shè)定

[client]

default-character-set=utf8

@@服務(wù)器和數(shù)據(jù)庫字符集設(shè)定

[mysqld]

character-set-server=utf8

@@校驗(yàn)字符集

[mysqld]

collation-server=utf8_general_ci

注:可使用SHOW CHARACTER SET;查看字符集對(duì)應(yīng)的校驗(yàn)字符集。

##開啟慢查詢?nèi)罩?/p>

1.@@使用:SHOW VARIABLES LIKE '%slow%';查看慢查詢?nèi)罩臼欠耖_啟

@@開啟:[mysqld]

slow_query_log=slow.log

@@慢查詢時(shí)間:[mysqld]

long_query_time=5

##socket問題

1.如果mysql.sock丟失,則可使用mysql -uroot -p --protocol tcp -h localhost

注:只是臨時(shí)的啟動(dòng)解決方法。

2. Mysql 密碼丟失

@@跳過授權(quán)表:mysqld_safe --skip-grant-tables --user=mysql &

總結(jié)

以上是生活随笔為你收集整理的mysql aa复制_MySQL的复制架构与优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲一区二区三区电影在线观看 | 成人久久影院 | 另类小说色 | 成人免费看片网站 | 九色精品在线 | 国产精品成人无码 | 久久日本视频 | 亚洲精品婷婷 | 久久午夜鲁丝 | 嫩模被强到高潮呻吟不断 | av天天色| 亚洲综合成人av | 中文精品在线观看 | 成人激情视频网 | 最好看的2019中文大全在线观看 | 四虎在线免费播放 | 四虎视频在线观看 | 美女试爆场恐怖电影在线观看 | 动漫大乳美女 | 久久久久亚洲av片无码下载蜜桃 | 三上悠亚ssⅰn939无码播放 | 免费国产羞羞网站视频 | 日批视频 | 欧美绿帽交换xxx | 国产99999 | 男同激情视频 | 伊人亚洲影院 | 69日影院| 偷偷操不一样的久久 | 综合国产精品 | 黄色污污网站在线观看 | 久色资源 | 国产黄色小视频在线观看 | 免费视频黄色 | 日韩黄色录像 | 久久午夜av | free性中国hd国语露脸 | 伊人网av在线 | 在线观看不卡的av | 成人免费视频国产免费麻豆 | 狠狠插影院 | 精品一区二区久久久 | 国产黄av| 久久天堂网 | 永久免费看mv网站入口亚洲 | 五月天婷婷伊人 | 一级二级毛片 | 中文字幕综合在线 | 男女黄床上色视频 | 午夜免费| 爱爱视频在线免费观看 | 五月天婷婷丁香花 | 99久久久无码国产精品 | 亚洲一区二区三区四区五区六区 | 亚洲人在线视频 | 国产在线视频99 | 福利视频在线 | 香蕉在线视频观看 | 翔田千里88av中文字幕 | 成人福利视频网 | 先锋av网| 自拍第一页 | 久色网站 | 国产成人啪免费观看软件 | 国产夫妻在线视频 | 黄色免费小视频 | 粉嫩av懂色av蜜臀av分享 | 亚洲第一天堂影院 | 欧美精品一区二区三区视频 | 无码国产69精品久久久久网站 | 97自拍偷拍视频 | 91嫩草视频在线观看 | 免费看爱爱视频 | 久久久久九九九九 | 婷婷在线免费观看 | 国产欧美一级 | 久久久免费高清视频 | 男女一进一出视频 | 30一40一50老女人毛片 | 专干中国老太婆hd | 亚洲欧洲成人精品久久一码二码 | 成人在线视频免费播放 | 亚洲自拍偷拍网 | 欧美一区2区三区4区公司 | 四虎视频国产精品免费 | 成人在线观看a | 精品国产无码一区二区三区 | 国产欧美一区二区三区免费看 | 中文字幕91在线 | 国产精品91在线 | 98国产精品 | 少妇激情在线 | 久草视频手机在线观看 | 木下凛凛子av一区二区三区 | 在线观看日本一区二区 | 丰满秘书被猛烈进入高清播放在 | 亚洲黄色成人网 | 99精品国产一区二区 | 中文字幕免费看 |