MySQL數據庫修復辦法(MyISAM/InnoDB)。本站提示廣大學習愛好者:(MySQL數據庫修復辦法(MyISAM/InnoDB))文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL數據庫修復辦法(MyISAM/InnoDB)正文
這裡是顯示彭羅斯點陣的Python的劇本。是的,這是可以運轉的有用Phython代碼。
譯注:彭羅斯點陣,物理學術語。上世紀70年月英國數學家彭羅斯第一次提出了這個概念,稱為彭羅斯點陣(Pen-rose tiles)。
_ =\
"""if!
1:"e,V=100
0,(0j-1)**-.2;
v,S=.5/ V.real,
[(0,0,4 *e,4*e*
V)];w=1 -v"def!
E(T,A, B,C):P
,Q,R=B*w+ A*v,B*w+C
*v,A*w+B*v;retur n[(1,Q,C,A),(1,P
,Q,B),(0,Q,P,A)]*T+[(0,C ,R,B),(1,R,C,A)]*(1-T)"f
or!i!in!_[:11]:S =sum([E (*x)for !x!in!S],[])"imp
ort!cair o!as!O; s=O.Ima geSurfac
e(1,e,e) ;c=O.Con text(s); M,L,G=c.
move_to ,c.line_to,c.s et_sour
ce_rgb a"def!z(f,a) :f(-a.
imag,a. real-e-e)"for!T,A,B,C!in[i !for!i!
in!S!if!i[""";exec(reduce(lambda x,i:x.replace(chr
(i),"\n "[34-i:]), range( 35),_+"""0]]:z(M,A
);z(L,B);z (L,C); c.close_pa
th()"G (.4,.3 ,1);c.
paint( );G(.7 ,.7,1)
;c.fil l()"fo r!i!in
!range (9):"! g=1-i/
8;d=i/ 4*g;G(d,d,d, 1-g*.8
)"!def !y(f,a):z(f,a+(1+2j)*( 1j**(i
/2.))*g)"!for!T,A,B,C!in!S:y(M,C);y(L,A);y(M
,A);y(L,B)"!c.st roke()"s.write_t
o_png('pen rose.png')
""" ))
當這個法式運轉時,它輸入了一個1000×1000的圖象文件,包括年夜約2212個由3D平面效應襯著的彭羅斯點陣。這裡是該圖象的一部門(點擊縮小)。
運轉該劇本須要Pycairo。它只在Python它是尺度的Python劇本,但我盡力想把它變得更簡練,因而我又從中刪減了一些。
編注:Pycairo是一組Python版本的Cario圖形庫。
彭羅斯點陣很酷,由於它們非周期性地籠罩了全部立體——圖片的轉換正本與原型歷來不會分歧。它們是由Roger Penrose師長教師經由過程將五邊形的立體平鋪在一路的一系列測驗考試而創造的。
與C或Perl比擬,Python其實不是讓人困惑的編程說話。這類比擬仿佛也從未產生,並且在網上也沒有若干讓人隱晦的Python的例子:你可以在官方的Python罕見成績中或各類網頁如這裡和這裡找到一些例子。在2011年的PyCon對此還有專題評論辯論。
我信任輸入一個高分辯率的圖象是第一個讓人隱晦的Python法式。假如你曉得其它的例子,可以在評論中告知我。
假如MyISAM表自增計數變得雜亂,你就不克不及再拔出新的記載。
平日你可以告知自增計數器它如今任務不正常,經由過程將最初一條記載的自增字段設為-1。
處理成績-找到最初一條自增記載的有用值(履行以下敕令)
SELECT max(id) from tablename
然後更新此表的自增計數器,以下:
ALTER TABLE tablename AUTO_INCREMENT = id+1
6、太多銜接數
數據庫變得相當忙碌,由於銜接數比它能處置的多。並且如今你都不克不及銜接上你的數據庫。
起首,停滯數據庫:
/usr/local/mysql/bin/mysqladmin -uUSERNAME -pPASSWORD shutdown
假如上條敕令不論用,可以嘗嘗 "killall mysql" 和 "killall mysqld"
當數據庫停滯後,編纂/etc/my.cnf文件,增長銜接數。不要癡狂的增長這個數字,不然你會把你的整台機械弄崩。
在一台公用數據庫機械上,我們平日用:
max_connections = 200
wait_timeout = 100
試側重啟數據庫看看能否有贊助。
假如你被查詢弄的措手不及,須要銜接數據庫停止表修正操作,那末在/etc/my.cnf文件中設置一個分歧的端標語,開啟數據庫,停止修正操作。然後將端口修正回來(master-port = 3306)再重啟。
7、InnoDB表瓦解
InnoDB表是我最寵愛的。事物緩存,靠得住,不像MyISAM,InnoDB支撐對統一表的並發寫。
InnoDB的外部恢復機制也相當不錯。假如數據庫瓦解,InnoDB將測驗考試停止修復,經由過程從最初一個時光戳開端運轉日記文件。年夜多半情形都邑勝利,全部進程是通明的。
不外,假如InnoDB自行修復掉敗,那末“全部”數據庫將不克不及啟動。MySQL將會收回一個毛病信息並加入,你的全部庫將處於離線狀況。你可以赓續測驗考試重啟數據庫,然則假如修復過程掉敗,數據庫將謝絕啟動。
這就是為何須要運轉master/master當應用InnoDB時——當一個master宕失落時,還有一台冗余master做後備。
在持續操作前,先閱讀下MySQL的日記文件,肯定數據庫不是由於InnoDB表的瓦解而瓦解。
有一種辦法是更新InnoDB的日記文件計數器以跳過惹起瓦解的查詢,然則經歷告知我們這不是個好辦法。這類情形下,將形成數據的紛歧致性並且會常常使主從復制中止。
一旦因InnoDB瓦解形成數據庫沒法啟動,你就應當按以下五個步調處置成績:
第一:添加此行到/etc/my.cnf文件中:
[mysqld]
innodb_force_recovery = 4
第二:重啟MySQL。你的數據庫如今將啟動,然則在innodb_force_recovery參數感化下,一切的拔出與更新操作將被疏忽。
第三:導出一切的表(Dump all tables)
第四:封閉數據庫,刪除一切的數據文件。運轉mysql_install_db 創立默許MySQL表。
第五:從/etc/my.cnf文件中去失落innodb_force_recovery參數,重啟數據庫。(庫如今應當能正常啟動)
第六:從備份文件中恢復一切數據。
續:
比來碰到了個讓人辣手的義務——修復一個掉敗的InnoDB數據庫。這個數據庫因瓦解而沒法啟動。
第一步將InnoDB在force-recovery形式下開啟,此時InnoDB雖開啟了然則將疏忽一切更新(UPDATEs)與拔出(INSERTs)操作。
在/etc/my.cnf文件中添加此行:
innodb_force_recovery = 2
如今重啟數據庫:
/usr/local/bin/mysqld_safe &
(留意:假如MySQL沒有啟動,持續增長 innodb_force_recovery 的數值直到將參數值設為8( innodb_force_recovery =)
將一切數據保留莅臨時文件alldb.sql(下個敕令須要花必定時光):
mysqldump --force --compress --triggers --routines --create-options -uUSERNAME -pPASSWORD --all-databases > /usr/alldb.sql
再次封閉數據庫:
mysqladmin -uUSERNAME -pPASSWORD shutdown
刪除數據庫目次。(留意:我的數據目次在/usr/local/var下。你的設置有能夠分歧,確保刪除的是准確的文件夾。)
rm -fdr /usr/local/var
重建數據庫文件夾,裝置MySQL基本表
mkdir /usr/local/var
chown -R mysql:mysql /usr/local/var
/usr/local/bin/mysql_install_db
chown -R mysql:mysql /usr/local/var
從/etc/my.cnf文件中刪除innodb_force_recovery ,重啟數據庫:
/usr/local/bin/mysqld_safe &
導入一切備份文件(下一敕令須要花一段時光):
mysql -uroot --compress < /usr/alldb.sql
最初,刷新MySQL的權限(由於我們也更新了MySQL的表)
/usr/local/bin/mysqladmin -uroot flush-privileges
留意:為了獲得最好的成果,添加port=8819(或任何其他隨機端口)到/etc/my.cnf文件中在重啟MySQL之前,然後將--port=8819添加到mysqldump敕令中。這類辦法防止了MySQL數據庫過於系忙碌當修復過程正在停止時。