新聞中心
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,數(shù)據(jù)處理和存儲(chǔ)已經(jīng)成為了一個(gè)必須面對(duì)的問(wèn)題。在這個(gè)背景下,數(shù)據(jù)庫(kù)成為了處理大量數(shù)據(jù)的重要工具。但是,在使用數(shù)據(jù)庫(kù)過(guò)程中,我們經(jīng)常會(huì)遇到很多問(wèn)題,比如數(shù)據(jù)重復(fù)、數(shù)據(jù)不完整等等。本文將介紹數(shù)據(jù)庫(kù)的ignore功能,它可以讓我們更輕松地進(jìn)行數(shù)據(jù)操作。

什么是ignore?
ignore是數(shù)據(jù)庫(kù)中的一個(gè)關(guān)鍵字,它的作用是在進(jìn)行insert或update操作時(shí),忽略掉某些數(shù)據(jù)行。當(dāng)數(shù)據(jù)已經(jīng)存在時(shí),ignore可以幫助我們自動(dòng)過(guò)濾掉這些重復(fù)數(shù)據(jù)行,避免數(shù)據(jù)重復(fù)或者數(shù)據(jù)不完整的問(wèn)題。
ignore的用法
在insert或update操作中使用ignore關(guān)鍵字,我們需要指定一個(gè)unique或primary key。這個(gè)關(guān)鍵字的語(yǔ)法如下:
insert ignore into 表名(字段名) values(值);
update ignore 表名 set 字段名=值 where 關(guān)鍵字=值;
其中,insert ignore表示在插入數(shù)據(jù)時(shí),如果數(shù)據(jù)已經(jīng)存在,則忽略掉這些數(shù)據(jù)。update ignore表示在更新數(shù)據(jù)時(shí),如果數(shù)據(jù)不存在,則忽略掉這些數(shù)據(jù)。
ignore的優(yōu)點(diǎn)
使用ignore關(guān)鍵字,在進(jìn)行數(shù)據(jù)操作時(shí),可以幫助我們減少許多不必要的麻煩。下面我們來(lái)介紹一下在實(shí)際應(yīng)用中,使用ignore的優(yōu)點(diǎn)。
1. 避免數(shù)據(jù)重復(fù)
在進(jìn)行大量數(shù)據(jù)處理時(shí),我們經(jīng)常會(huì)導(dǎo)入一些已經(jīng)存在的數(shù)據(jù)。如果沒(méi)有忽略重復(fù)數(shù)據(jù)這個(gè)功能,我們就需要手動(dòng)操作來(lái)避免重復(fù)數(shù)據(jù)的出現(xiàn)。而有了ignore,這個(gè)問(wèn)題就可以得到有效的避免。
2. 簡(jiǎn)化數(shù)據(jù)操作
在復(fù)雜的數(shù)據(jù)庫(kù)操作中,我們經(jīng)常需要進(jìn)行大量的數(shù)據(jù)篩選和處理。如果數(shù)據(jù)不完整或者重復(fù),就需要額外的操作來(lái)處理。這些額外的操作會(huì)增加我們的工作難度和時(shí)間。使用ignore,我們可以直接忽略掉這些不必要的操作,從而簡(jiǎn)化數(shù)據(jù)操作。
3. 提高數(shù)據(jù)處理效率
在大型數(shù)據(jù)庫(kù)中,如果不使用ignore,每次數(shù)據(jù)操作都需要先檢查數(shù)據(jù)庫(kù)中是否存在該數(shù)據(jù)。這會(huì)消耗大量的時(shí)間和性能。而使用ignore,數(shù)據(jù)庫(kù)會(huì)自動(dòng)過(guò)濾掉重復(fù)數(shù)據(jù),從而大大提高數(shù)據(jù)處理的效率。
4. 減少數(shù)據(jù)處理錯(cuò)誤
在進(jìn)行復(fù)雜的數(shù)據(jù)操作時(shí),如果數(shù)據(jù)不完整或者重復(fù),就容易出現(xiàn)錯(cuò)誤。而使用ignore,我們可以避免這些錯(cuò)誤的出現(xiàn)。這可以降低我們數(shù)據(jù)處理的風(fēng)險(xiǎn)。
在數(shù)據(jù)庫(kù)操作中,使用ignore關(guān)鍵字可以幫助我們減少重復(fù)數(shù)據(jù)、簡(jiǎn)化數(shù)據(jù)操作、提高數(shù)據(jù)處理效率和減少數(shù)據(jù)處理錯(cuò)誤等方面的問(wèn)題。因此,在實(shí)際應(yīng)用中,我們應(yīng)該積極地使用ignore關(guān)鍵字,從而實(shí)現(xiàn)更加高效和準(zhǔn)確的數(shù)據(jù)處理。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220數(shù)據(jù)庫(kù)數(shù)據(jù)歸檔,有什么好辦法
首先,數(shù)據(jù)存檔(data archiving)是將不再經(jīng)常使用的數(shù)據(jù)移到一個(gè)單獨(dú)的存儲(chǔ)設(shè)備來(lái)進(jìn)行長(zhǎng)期保存的過(guò)程。唯拿
Mysql:
1、復(fù)制表并且按照條件插入數(shù)據(jù)(此種方法除了主鍵索引不包括其他索引)
CREATE TABLE lime_survey_549656_as select 指隱搭* from lime_survey_where submitdate
ALTER TABLE lime_survey_549656_change id id int primary key auto_increment;
CREATE TABLE lime_survey_186194_as select * from lime_survey_where submitdate
ALTER TABLE lime_survey_186194_change id id int primary key auto_increment;
CREATE TABLE lime_survey_279575_as select * from lime_survey_where submitdate
ALTER TABLE lime_survey_279575_change id id int primary key auto_increment;
2、數(shù)據(jù)歸檔成功后清理數(shù)據(jù)sql:
deletefrom lime_survey_where submitdate
deletefrom lime_survey_攜枯 where submitdate
deletefrom lime_survey_where submitdate
SQL Server:
利用SQL Server提供的分區(qū)表
pt-archiver原理解析
作為MySQL DBA,可以說(shuō)應(yīng)該沒(méi)有不知道pt-archiver了,作為pt-toolkit套件中的重要成員,往往能夠輕松幫助DBA解決數(shù)據(jù)歸檔的問(wèn)題。例如線上一個(gè)流水表,業(yè)務(wù)僅僅只需要存放最近3個(gè)月的流水?dāng)?shù)據(jù),三個(gè)月前的數(shù)據(jù)做歸檔即可,那么pt-archiver就可以輕松幫你完成這件事情,甚至你可以配置成自動(dòng)任務(wù),無(wú)需人工干預(yù)。
作為DBA,我們應(yīng)該知其然更應(yīng)該知其所以然,這樣我們也能夠放心地使用pt工具。相信很多DBA都研究過(guò)pt-online-schema-change的原理,那么今天我們深入刨一刨pt-archiver的工作原理。
一、原理觀察
土人有土辦法,我們直接開(kāi)啟general log來(lái)觀察pt-archiver是如何完成歸檔的。
命令
pt-archiver –source h=127.0.0.1,u=xucl,p=xuclxucl,P=3306,D=xucl,t=t1 –dest h=127.0.0.1,P=3306,u=xucl,p=xuclxucl,D=xucl_archive,t=t1 –progress 5000 \
–statistics –charset=utf8mb4 –limit=txn-sizesleep 30
常用選項(xiàng)
–yze
指定工具完成數(shù)據(jù)歸檔后對(duì)表執(zhí)行’ANAZE TABLE’操作。指定方法如’–yze=ds’,s代表源端表,d代表目標(biāo)端表,也可以單獨(dú)指定。
–ask-pass
命令行提示密碼輸入,保護(hù)密碼安全,前提需安裝模塊perl-TermReadKey。
–buffer
指定緩沖區(qū)數(shù)據(jù)刷新到選項(xiàng)’–file’指定的文燃讓首件并且在提交時(shí)刷新。
只有當(dāng)事務(wù)提交時(shí)禁用自動(dòng)刷新到’–file’指定的文件和刷新文件到磁盤,這意味著文件是作系統(tǒng)塊進(jìn)行刷新,因此在事務(wù)進(jìn)行提交之前有一些數(shù)據(jù)隱式刷新到磁盤。默認(rèn)是每一行操作后進(jìn)行文件刷新到磁盤。
–bulk-delete
指定單個(gè)語(yǔ)句刪除chunk的方式來(lái)批量刪除行,會(huì)隱式執(zhí)行選項(xiàng)’–commit-each’。
使用單個(gè)DELETE語(yǔ)句刪除每個(gè)chunk對(duì)應(yīng)的表行,通常的做法是通過(guò)主鍵進(jìn)行逐行的刪除,批量刪除在速度上會(huì)有很大的提升,但如果有復(fù)雜的’WHERE’條件就可能會(huì)更慢。
–bulk-delete-limit
默認(rèn)值:yes
指定添加選項(xiàng)’–bulk-delete’和’–limit’到進(jìn)行歸檔的語(yǔ)句中。
–bulk-insert
使用LOAD DATA LOCAL INFILE的方法,通過(guò)批量插入chunk的方式來(lái)插入行(隱式指定選項(xiàng)’–bulk-delete’和’–commit-each’)
而不是通過(guò)逐行單獨(dú)插入的方式進(jìn)行,它比單行執(zhí)行INSERT語(yǔ)句插入的速度要快。通過(guò)隱式創(chuàng)建臨時(shí)表來(lái)存儲(chǔ)需要批量插入的行(chunk),而不是直接進(jìn)行批量插入操作,當(dāng)臨時(shí)表中完成每個(gè)chunk之后再進(jìn)行統(tǒng)一數(shù)據(jù)加載。為了保證數(shù)據(jù)皮數(shù)的安全性,該選項(xiàng)會(huì)強(qiáng)制使用選項(xiàng)’–bulk-delete’,這樣能夠有效保證刪除是在插入完全成功之后進(jìn)行的。
–channel
指定當(dāng)主從復(fù)制環(huán)境是多源復(fù)制時(shí)需要進(jìn)行歸檔哪個(gè)主庫(kù)的數(shù)據(jù),適用于多源復(fù)制中多個(gè)主庫(kù)對(duì)應(yīng)一個(gè)從庫(kù)的情形。
–charset,-A
指定連接字符集。
–check-charset
默認(rèn)值:yes
指定檢查確保數(shù)據(jù)庫(kù)連接時(shí)字符集和表字符集相同。
–check-columns
默認(rèn)值:yes
指定檢查確保選項(xiàng)’–source’指定的源端表和’–dest’指定的目標(biāo)表具有相同的字段。
不檢查字段在表的排序和字段類型,只檢查字段是否在源端表和目標(biāo)表當(dāng)中都存在,如果有不相同滑皮的字段差異,則工具報(bào)錯(cuò)退出。如果需要禁用該檢查,則指定’–no-check-columns’。
–check-slave-lag
指定主從復(fù)制延遲大于選項(xiàng)’–max-lag’指定的值之后暫停歸檔操作。默認(rèn)情況下,工具會(huì)檢查所有的從庫(kù),但該選項(xiàng)只作用于指定的從庫(kù)(通過(guò)DSN連接方式)。
–check-interval
默認(rèn)值:1s
如果同時(shí)指定了選項(xiàng)’–check-slave-lag’,則該選項(xiàng)指定的時(shí)間為工具發(fā)現(xiàn)主從復(fù)制延遲時(shí)暫停的時(shí)間。每進(jìn)行操作100行時(shí)進(jìn)行一次檢查。
–columns,-c
指定需要?dú)w檔的表字段,如有多個(gè)則用’,'(逗號(hào))隔開(kāi)。
–commit-each
指定按每次獲取和歸檔的行數(shù)進(jìn)行提交,該選項(xiàng)會(huì)禁用選項(xiàng)’–txn-size’。
在每次獲取表數(shù)據(jù)并進(jìn)行歸檔之后,在獲取下一次數(shù)據(jù)和選項(xiàng)’–sleep’指定的休眠時(shí)間之前,進(jìn)行事務(wù)提交和刷新選項(xiàng)’–file’指定的文件,通過(guò)選項(xiàng)’–limit’控制事務(wù)的大小。
–host,-h
指定連接的數(shù)據(jù)庫(kù)IP地址。
–port,-P
指定連接的數(shù)據(jù)庫(kù)Port端口。
–user,-u
指定連接的數(shù)據(jù)庫(kù)用戶。
–password,-p
指定連接的數(shù)據(jù)庫(kù)用戶密碼。
–socket,-S
指定使用SOCKET文件連接。
–databases,-d
指定連接的數(shù)據(jù)庫(kù)
–source
指定需要進(jìn)行歸檔操作的表,該選項(xiàng)是必須指定的選項(xiàng),使用DSN方式表示。
–dest
指定要?dú)w檔到的目標(biāo)端表,使用DSN方式表示。
如果該選項(xiàng)沒(méi)有指定的話,則默認(rèn)與選項(xiàng)’–source’指定源端表為相同表。
–where
指定通過(guò)WHERE條件語(yǔ)句指定需要?dú)w檔的數(shù)據(jù),該選項(xiàng)是必須指定的選項(xiàng)。不需要加上’WHERE’關(guān)鍵字,如果確實(shí)不需要WHERE條件進(jìn)行限制,則指定’–where 1=1’。
–file
指定表數(shù)據(jù)需要?dú)w檔到的文件。使用類似MySQL DATE_FORMAT()格式化命名方式。
文件內(nèi)容與MySQL中SELECT INTO OUTFILE語(yǔ)句使用相同的格式,文件命名選項(xiàng)如下所示:
%Y:年,4位數(shù)(Year, numeric, four digits)
%m:月,2位數(shù)(Month, numeric (01..12))
%d:日,2位數(shù)(Day of the month, numeric (01..31))
%H:小時(shí)(Hour (00..23))
%i:分鐘(Minutes, numeric (00..59))
%s:秒(Seconds (00..59))
%D:數(shù)據(jù)庫(kù)名(Database name)
%t:表名(Table name)
例如:–file ‘/var/log/archive/%Y-%m-%d-%D.%t’
–output-format
指定選項(xiàng)’–file’文件內(nèi)容輸出的格式。
默認(rèn)不指定該選項(xiàng)是以制表符進(jìn)行字段的分隔符,如果指定該選項(xiàng),則使用’,'(逗號(hào))作為字段分隔符,使用'”‘(雙引號(hào))將字段括起。用法示例:’–output-format=dump’。
–for-update
指定為每次歸檔執(zhí)行的SELECT語(yǔ)句添加FOR UPDATE子句。–share-lock
指定為每次歸檔執(zhí)行的SELECT語(yǔ)句添加LOCK IN SHARE MODE子句。
–header
指定在文件中之一行寫入字段名稱作為標(biāo)題。
–ignore
指定為INSERT語(yǔ)句添加IGNORE選項(xiàng)。
–limit
默認(rèn)值:1
指定每條語(yǔ)句獲取表和歸檔表的行數(shù)。
–local
指定不將OPTIMIZE和ANAZE語(yǔ)句寫入binlog。
–max-lag
默認(rèn)值:1s
指定允許主從復(fù)制延遲時(shí)長(zhǎng)的更大值,單位秒。如果在每次獲取行數(shù)據(jù)之后主從延遲超過(guò)指定的值,則歸檔操作將暫停執(zhí)行,暫停休眠時(shí)間為選項(xiàng)’–check-interval’指定的值。待休眠時(shí)間結(jié)束之后再次檢查主從延遲時(shí)長(zhǎng),檢查方法是通過(guò)從庫(kù)查詢的’Seconds_Behind_Master’值來(lái)確定。如果主從復(fù)制延遲一直大于該參數(shù)指定值或者從庫(kù)停止復(fù)制,則操作將一直等待直到從庫(kù)重新啟動(dòng)并且延遲小于該參數(shù)指定值。
–no-delete
指定不刪除已被歸檔的表數(shù)據(jù)。
–optimize
指定工具完成數(shù)據(jù)歸檔后對(duì)表執(zhí)行’OPTIMIZE TABLE’操作。指定方法如’–yze=ds’,s代表源端表,d代表目標(biāo)端表,也可以單獨(dú)指定。
–primary-key-only
指定只歸檔主鍵字段,是選項(xiàng)’–columns=主鍵’的簡(jiǎn)寫。
如果工具歸檔的操作是進(jìn)行DELETE清除時(shí)最有效,因?yàn)橹恍枳x取主鍵一個(gè)字段而無(wú)需讀取行所有字段。
–progress
指定每多少行打印進(jìn)度信息,打印當(dāng)前時(shí)間,已用時(shí)間以及多少行進(jìn)行歸檔。
–purge
指定執(zhí)行的清除操作而不是歸檔操作。允許忽略選項(xiàng)’–dest’和’–file’進(jìn)行操作,如果只是清除操作可以結(jié)合選項(xiàng)’–primary-key-only’會(huì)更高效。
–quiet,-q
指定工具靜默執(zhí)行,不輸出任何的執(zhí)行信息。
–replace
指定寫入選項(xiàng)’–dest’指定目標(biāo)端表時(shí)改寫INSERT語(yǔ)句為REPLACE語(yǔ)句。
–retries
默認(rèn)值:1
指定歸檔操作遇到死鎖或超時(shí)的重試次數(shù)。當(dāng)重試次數(shù)超過(guò)該選項(xiàng)指定的值時(shí),工具將報(bào)錯(cuò)退出。
–run-time
指定工具歸檔操作在退出之前需要運(yùn)行的時(shí)間。允許的時(shí)間后綴名為s=秒,m=分,h=小時(shí),d=天,如果沒(méi)指定,默認(rèn)為s。
–safe-auto-increment
默認(rèn)值:yes
指定不使用自增列(AUTO_INCREMENT)更大值對(duì)應(yīng)的行進(jìn)行歸檔。
該選項(xiàng)在進(jìn)行歸檔清除時(shí)會(huì)額外添加一條WHERE子句以防止工具刪除單列升序字段具有的具有AUTO_INCREMENT屬性更大值的數(shù)據(jù)行,為了在數(shù)據(jù)庫(kù)重啟之后還能使用到AUTO_INCREMENT對(duì)應(yīng)的值,但這會(huì)引起無(wú)法歸檔或清除字段對(duì)應(yīng)更大值的行。
–set-vars
默認(rèn):
wait_timeout=10000
innodb_lock_wait_timeout=1
lock_wait_timeout=60
工具歸檔時(shí)指定參數(shù)值,如有多個(gè)用’,'(逗號(hào))分隔。如’–set-vars=wait_timeout=5000’。
–skip-foreign-key-checks
指定使用語(yǔ)句SET FOREIGN_KEY_CHECKS = 0禁用外鍵檢查。
–sleep
指定工具在通過(guò)SELECT語(yǔ)句獲取歸檔數(shù)據(jù)需要休眠的時(shí)間,默認(rèn)值是不進(jìn)行休眠。在休眠之前事務(wù)并不會(huì)提交,并且選項(xiàng)’–file’指定的文件不會(huì)被刷新。如果指定選項(xiàng)’–commit-each’,則在休眠之前會(huì)進(jìn)行事務(wù)提交和文件刷新。
–statistics
指定工具收集并打印操作的時(shí)間統(tǒng)計(jì)信息。
統(tǒng)計(jì)信息示例如下:
‘
Started atT07:18:53, ended atT07:18:53
Source: D=db,t=table
SELECT 4
INSERT 4
DELETE 4
ActionCountTimePct
commit 0..27
select 0..87
deleting 0..29
inserting 0..28
other..29
–txn-size
默認(rèn):1
指定每個(gè)事務(wù)處理的行數(shù)。如果是0則禁用事務(wù)功能。
–version
顯示工具的版本并退出。
–version-check
默認(rèn)值:yes
檢查Percona Toolkit、MySQL和其他程序的最新版本。
–why-quit
指定工具打印當(dāng)非因完成歸檔行數(shù)退出的原因。
在執(zhí)行一個(gè)自動(dòng)歸檔任務(wù)時(shí)該選項(xiàng)與選項(xiàng)’–run-time’一起使用非常方便,這樣可以確定歸檔任務(wù)是否在指定的時(shí)間內(nèi)完成。如果同時(shí)指定了選項(xiàng)’–statistics’,則會(huì)打印所有退出的原因。
二、原理解析
根據(jù)general log的輸出,我們整理出時(shí)序表格如下
三、其他說(shuō)明
咋一看這個(gè)過(guò)程貌似也沒(méi)有什么問(wèn)題,但是,假如在原表掃描出數(shù)據(jù),插入到新表的過(guò)程中,舊數(shù)據(jù)發(fā)生了變化怎么辦?
帶著這個(gè)疑問(wèn),我們進(jìn)行了源碼的跟蹤,我們?cè)趐t-archiver的6839行打上了斷點(diǎn)
然后我分別在幾個(gè)session窗口做了如下動(dòng)作
最后pt-archiver輸出如下:
# A software update is available:
TIME ELAPSED COUNT
T09:13: 0
T09:13: 1
Started atT09:13:21, ended atT09:13:51
Source: A=utf8mb4,D=xucl,P=3306,h=127.0.0.1,p=…,t=t1,u=xucl
Dest: A=utf8mb4,D=xucl_archive,P=3306,h=127.0.0.1,p=…,t=t1,u=xucl
SELECT 1
INSERT 1
DELETE 1
ActionCountTimePct
sleep..89
inserting 0..07
commit 0..03
select 0..01
deleting 0..00
other..00
很明顯,id=3這條記錄并沒(méi)有進(jìn)行歸檔(我們這里是改了條件列,實(shí)際生產(chǎn)中可能是更改了其他列,造成歸檔數(shù)據(jù)不準(zhǔn)確)
那么如何來(lái)解決這種情況的發(fā)生呢?
顯然,數(shù)據(jù)庫(kù)在數(shù)據(jù)庫(kù)中可以通過(guò)加排它鎖來(lái)防止其他程序修改對(duì)應(yīng)的數(shù)據(jù),pt-archiver其實(shí)早就已經(jīng)幫我們考慮到了這樣的情況,pt-archiver提供了兩種選擇
–for-update:Adds the FOR UPDATE modifier to SELECT statements
–share-lock:Adds the LOCK IN SHARE MODE modifier to SELECT statements
四、總結(jié)
pt-archiver作為歸檔工具無(wú)疑是MySQL DBA日常運(yùn)維的大利器之一,在使用過(guò)程中在知道如何使用的基礎(chǔ)上也能夠知曉其原理
歸檔過(guò)程中更好能對(duì)歸檔記錄進(jìn)行加鎖操作,以免造成歸檔數(shù)據(jù)不準(zhǔn)確
在主從環(huán)境中,歸檔過(guò)程更好控制速度,以免造成主從延遲
為什么在MySQL數(shù)據(jù)庫(kù)中建立檢查約束不成功呢,語(yǔ)句是這樣的
這是一項(xiàng)新功能,用于指定在插入或更新到一行之前檢查值的條件。如果表的任何行的搜索條件的結(jié)果為 FALSE,則約束可能返回錯(cuò)誤(但如果結(jié)果為 UNKNOWN 或 TRUE,則約束不會(huì)返回錯(cuò)誤)。此功能開(kāi)始在 MySQL 8.0.16 上運(yùn)行,在以前的版本中,我們可以創(chuàng)建它,但它不起作用,這意味著支持語(yǔ)法,但不起作用。要牢記的使用規(guī)則:
AUTO_INCREMENT 自增列不允許使用
引用另一個(gè)表中的另一列不允許使用
存儲(chǔ)的函數(shù)和用戶定義的函數(shù)不允許使用
存儲(chǔ)過(guò)程和函數(shù)參數(shù)不允許使用
子查詢不允許使用
在外鍵中用于后續(xù)操作(ON UPDATE,ON DELETE)的列不允許使用
為下一條語(yǔ)句 INSERT,UPDATE,REPLACE,巖差租LOAD DATA 和 LOAD XML 評(píng)估此次監(jiān)測(cè)。此外,還會(huì)為 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 評(píng)估此監(jiān)測(cè)約束。對(duì)于這些語(yǔ)句,如果約束的評(píng)估結(jié)慶則果為 FALSE,則會(huì)發(fā)生警告。插入或更新被跳過(guò)。
我們可以使用此粗兆功能在表中添加更多的邏輯,但是根據(jù)我以前作為程序員的經(jīng)驗(yàn),我不建議在表中添加邏輯,因?yàn)槌悄鸁o(wú)法訪問(wèn)應(yīng)用程序代碼,否則很難找到或調(diào)試錯(cuò)誤。
其實(shí)在mysql中就念乎褲沒(méi)有檢查約束,都是騙人的,我學(xué)的時(shí)候老師就說(shuō)了,你在訪問(wèn)數(shù)據(jù)庫(kù)時(shí)對(duì)數(shù)據(jù)用
正頃銀則表達(dá)式
驗(yàn)證一下就仔簡(jiǎn)行了!
mysql檢查約束是有問(wèn)題。。。只是注釋的作用。。。在程序控制吧
replicate-ignore-db=mysql 為什么無(wú)效
dear, 我可能碰到了跟你一樣的問(wèn)題。你可以參考下
首先我的環(huán)境是mysql5.5
然后我的主機(jī)上設(shè)置了binlog記錄數(shù)據(jù)庫(kù)為db1和db2.
然后備機(jī)上設(shè)置了同步數(shù)據(jù)庫(kù)db1,并且忽略數(shù)據(jù)庫(kù)db2.
但是此時(shí)我使用客戶端連接主機(jī),并執(zhí)行的sql插入到db1和db2。
但是發(fā)現(xiàn)db1和db2的數(shù)據(jù)都同步到了備機(jī)上。
找了好久的原因發(fā)現(xiàn)我在連接后,設(shè)置了use db1這個(gè)命令,然后插入到db2的sql使用的是insert into db2.test () values ();的sql,梁襪
修改插入到db2的sql時(shí)鬧叢使用use db2;發(fā)現(xiàn)設(shè)置的不同液渣櫻步該庫(kù)才成功
replicate-ignore-db=mysql 為什么無(wú)效
MySQL 提供了數(shù)據(jù)庫(kù)的同步功能,這對(duì)我們實(shí)現(xiàn)數(shù)據(jù)庫(kù)的冗災(zāi)、備份、恢復(fù)、負(fù)載均衡等都是有極大幫助的。本文描述了常見(jiàn)的同步設(shè)置方法。
一、準(zhǔn)備服務(wù)器
由于MySQL不同版本之間的(二進(jìn)制日志)binlog格輪簡(jiǎn)式可能會(huì)不一樣,因此更好的搭配組合是Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高于Slave版本。
本文中,我們假設(shè)主服務(wù)器(以下簡(jiǎn)稱Master)和從服務(wù)器(以下簡(jiǎn)稱Slave)的版本都是5.0.15,操作系統(tǒng)是Linux Ubuntu 5.0.x。
假設(shè)同步Master的主機(jī)名為:rep1,Slave主機(jī)名為:rep2,2個(gè)MySQL的basedir目錄都是/usr/local/mysql,datadir都是:/usr/local/mysql/data。
二、設(shè)置同步服務(wù)器
1、設(shè)置同步Master
每個(gè)同步服務(wù)器都必須設(shè)定一個(gè)唯一的編號(hào),否則同步就不能正常運(yùn)行了。接下來(lái)開(kāi)始修改 my.cnf,增加以下幾行:
server-id = 1
log-bin
set-variable=binlog-ignore-db=mysql
然后在Master上增加一個(gè)賬號(hào)專門用于同步,如下:
mysql>GRANT REPLICATION SLAVE ON *.* TO rep@rep2 IDENTIFIED BY ‘rep’;
如果想要在Slave上有權(quán)限執(zhí)行臘衡褲 “LOAD TABLE FROM MASTER” 或 “LOAD DATA FROM MASTER” 語(yǔ)句的話,必須授予全局的 FILE 和 SELECT 權(quán)限:
mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep@rep2 IDENTIFIED BY ‘rep’;
第三行表示不記攔純錄數(shù)據(jù)庫(kù)mysql的更新日志,這就避免了Master上的權(quán)限設(shè)置等被同步到Slave上,如果對(duì)這方面沒(méi)有限制,就可以不設(shè)置這個(gè)參數(shù)。
接下來(lái)備份Master上的數(shù)據(jù),首先執(zhí)行如下SQL語(yǔ)句:
mysql>FLUSH TABLES WITH READ LOCK;
不要退出這個(gè)終端,否則這個(gè)鎖就不生效了;接著導(dǎo)出數(shù)據(jù),可以直接打包壓縮數(shù)據(jù)文件,也可以使用mysqldump工具來(lái)做,推薦前者的方法,這樣更為快捷簡(jiǎn)便。
root$cd /usr/local/mysql
root$tar zcf data.tar.gz ./data (在這里也可能是 “var” 等其它實(shí)際存放數(shù)據(jù)文件的目錄,根據(jù)實(shí)情而定)
然后將這些數(shù)據(jù)拷貝到Slave服務(wù)器上,解開(kāi),設(shè)置好正確的權(quán)限及屬主等;之后,執(zhí)行 “UNLOCK TABLES” 語(yǔ)句來(lái)釋放鎖。
數(shù)據(jù)庫(kù)的ignore的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫(kù)的ignore,數(shù)據(jù)庫(kù)的ignore:讓你的數(shù)據(jù)操作更輕松!,數(shù)據(jù)庫(kù)數(shù)據(jù)歸檔,有什么好辦法,為什么在MySQL數(shù)據(jù)庫(kù)中建立檢查約束不成功呢,語(yǔ)句是這樣的,replicate-ignore-db=mysql 為什么無(wú)效的信息別忘了在本站進(jìn)行查找喔。
成都網(wǎng)站建設(shè)選創(chuàng)新互聯(lián)(?:028-86922220),專業(yè)從事成都網(wǎng)站制作設(shè)計(jì),高端小程序APP定制開(kāi)發(fā),成都網(wǎng)絡(luò)營(yíng)銷推廣等一站式服務(wù)。
網(wǎng)站標(biāo)題:數(shù)據(jù)庫(kù)的ignore:讓你的數(shù)據(jù)操作更輕松!(數(shù)據(jù)庫(kù)的ignore)
分享地址:http://www.5511xx.com/article/cdhghid.html


咨詢
建站咨詢
