ラベル procedure の投稿を表示しています。 すべての投稿を表示
ラベル procedure の投稿を表示しています。 すべての投稿を表示

2015年6月29日月曜日

フィボナッチ数列手順

Original post: http://anothermysqldba.blogspot.com/2015/06/fibonacci-sequence-procedure.html

 私は、そのことについて申し訳ありません掲示ので、まあそれはしばらくしています。 今日、私はテレビ番組のフリンジの再放送を見ていたウォルターは、フィボナッチ数列を参照するとき、私は、このためのMySQLオプションを使用して追跡側を得ました。 

今、この投稿はすでに存在していました: 

だから私は少しそのポストを取って、その上に展開、結果はあなたが後にしているフィボナッチ数列範囲を呼び出し、返すことができプロシージャです。 

手順は以下の通りです: 

delimiter // 
CREATE PROCEDURE `Fibonacci`(IN POS INT, IN RANG INT, IN LIMTED INT) 
BEGIN 
select FORMAT(Fibonacci,0) AS Fibonacci from ( 
select @f0 Fibonacci, @fn:=@f1+@f0, @f0:=@f1, @f1:=@fn 
from (select @f0:=0, @f1:=1, @fn:=1) x, 
information_schema.STATISTICS p limit LIMTED) y LIMIT POS, RANG; 
END// 
delimiter ; 


あなたはこれを呼び出して、あなたが後にしている範囲でどのような値と渡すことができます。 

だから、配列および次の値で5番目の値(0から始まる  したい場合 

> CALL Fibonacci(5,2,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 5 | 
| 8 | 
+-----------+ 


あなたは30日の値をたいのであればシーケンスと次の値(0から始まります  

> CALL Fibonacci(30,2,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 832,040 | 
| 1,346,269 | 
+-----------+ 


だから、配列および次の値に(0から始まる )150番目の値が必要な場合 

> CALL Fibonacci(150,2,1000); 
+--------------------------------------------+ 
| Fibonacci | 
+--------------------------------------------+ 
| 9,969,216,677,189,305,000,000,000,000,000 | 
| 16,130,531,424,904,583,000,000,000,000,000 | 
+--------------------------------------------+ 


だから、あなたのアイデアを得ます。 あなたは2だけのプロシージャ·コールの2番目の値を変更する以上のことをしたい場合今、あなたはまた、結果の範囲を拡大することができます。 

> CALL Fibonacci(0,10,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 0 | 
| 1 | 
| 1 | 
| 2 | 
| 3 | 
| 5 | 
| 8 | 
| 13 | 
| 21 | 
| 34 | 
+-----------+ 

> CALL Fibonacci(30,5,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 832,040 | 
| 1,346,269 | 
| 2,178,309 | 
| 3,524,578 | 
| 5,702,887 | 
+-----------+ 


とにかく、誰かがオリジナルのポストに行くんクエリのベースのため、それが役に立つとクレジット見つけたいと考えています

2014年11月28日金曜日

mysqlbinlogはポイント·イン·タイム·リカバリの例で失われたMySQLのデータを回復

Original post: http://anothermysqldba.blogspot.com/2014/11/recover-lost-mysql-data-with.html

バックアップ...バックアップ...バックアップ...しかし、もちろん..あなたもそうでない場合、彼らは価値のない可能性があり、多くの場合、それらのバックアップを監視し、テストする必要があります。 MySQLの持つバイナリログは、確かにだけでなく、緊急時にあなたを助けることができる可能にした。 MySQLのバイナリログは、多くの場合、MySQLのレプリケーションに関してで参照され、正当な理由のために、彼らはデータ(変更するクエリまたはイベントをすべて保存し、行ベースが少し異なっているが、この例を)。 それらが提供する回復オプションを検討する際にバイナリログには、サーバーのパフォーマンスへの影響を最小限に抑えています。 


[anothermysqldba]> show variables like 'log_bin%'; 
+---------------------------------+--------------------------------------------+ 
| Variable_name | Value | 
+---------------------------------+--------------------------------------------+ 
| log_bin | ON | 
| log_bin_basename | /var/lib/mysql/binlogs/mysql-binlogs | 
| log_bin_index | /var/lib/mysql/binlogs/mysql-binlogs.index | 

show variables like 'binlog_format%'; 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| binlog_format | MIXED | 
+---------------+-------+ 


だから、これはバイナリログからデータを回復し、それをデータベースに戻って適​​用するためにmysqlbinlogはを使用して単純な例です。 

まず、失うために何かを必要とする。 何かが私達のデータベースに起こることだった場合は、我々はデータを回復できるようにする必要がありますまたは多分それはちょうど誰かのミスから回復するための方法です。 


CREATE TABLE `table_w_rdata` ( 
`id` int(11) NOT NULL AUTO_INCREMENT, 
`somedata` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
`moredata` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

私たちはここにふりをし、我々は非常によく、通信および/またはそのコードのコピーを保存していない開発者/ DBAはを持っていると仮定することができます。 


delimiter // 
CREATE PROCEDURE populate_dummydata( IN rowsofdata INT ) 
BEGIN 

SET @A = 3; 
SET @B = 15 - @A; 
SET @C = 16; 
SET @D = 25 - @C; 

WHILE rowsofdata > 0 DO 
INSERT INTO table_w_rdata 
SELECT NULL, SUBSTR(md5(''),FLOOR( @A + (RAND() * @B ))) as somedata, SUBSTR(md5(''),FLOOR( @C + (RAND() * @D ))) AS moredata ; 
SET rowsofdata = rowsofdata - 1; 
END WHILE; 
END// 
delimiter ; 
call populate_dummydata(50); 

> SELECT NOW() \G 
*************************** 1. row *************************** 
NOW(): 2014-11-27 17:32:25 
1 row in set (0.00 sec) 

> SELECT * from table_w_rdata WHERE id > 45; 
+----+----------------------------+------------------+ 
| id | somedata | moredata | 
+----+----------------------------+------------------+ 
| 46 | b204e9800998ecf8427e | 0998ecf8427e | 
| 47 | d98f00b204e9800998ecf8427e | 8ecf8427e | 
| 48 | b204e9800998ecf8427e | 800998ecf8427e | 
| 49 | 98f00b204e9800998ecf8427e | e9800998ecf8427e | 
| 50 | 98f00b204e9800998ecf8427e | 998ecf8427e | 
+----+----------------------------+------------------+ 

1プロシージャが作成されている間、それは後に、他の間違って誰かによって上書きされる。 

DROP PROCEDURE IF EXISTS populate_dummydata ; 
delimiter // 
CREATE PROCEDURE populate_dummydata( IN rowsofdata INT ) 
BEGIN 

SET @A = 3; 
SET @B = 15 - @A; 
SET @C = 16; 
SET @D = 25 - @C; 

WHILE rowsofdata > 0 DO 
INSERT INTO table_w_rdata 
SELECT NULL, SUBSTR(md5(''),FLOOR( @C + (RAND() * @A ))) as somedata, SUBSTR(md5(''),FLOOR( @B + (RAND() * @D ))) AS moredata ; 
SET rowsofdata = rowsofdata - 1; 
END WHILE; 
END// 
delimiter ; 

call populate_dummydata(50); 
> SELECT NOW(); SELECT * from table_w_rdata WHERE id > 95; 
+---------------------+ 
| NOW() | 
+---------------------+ 
| 2014-11-27 17:36:28 | 
+---------------------+ 
1 row in set (0.00 sec) 

+-----+-------------------+---------------------+ 
| id | somedata | moredata | 
+-----+-------------------+---------------------+ 
| 96 | 4e9800998ecf8427e | 00998ecf8427e | 
| 97 | 9800998ecf8427e | 800998ecf8427e | 
| 98 | e9800998ecf8427e | 204e9800998ecf8427e | 
| 99 | e9800998ecf8427e | 4e9800998ecf8427e | 
| 100 | 9800998ecf8427e | 04e9800998ecf8427e | 
+-----+-------------------+---------------------+ 


手続きの置き換えバージョンは思ったチームのようなランダムな値を生成していません。 手続きの元の作成者は、ちょうど欲求不満から終了します。 だから何をするか? それは同様に作成されてから少し時間が過去を持っています。 私たちは私たちのために、データベース名、ルーチン名と誤った手順が作成された一般的な時間枠と幸運を知っているビンログの周りに残っているので、我々はそれを取りに行くことができます。 

私たちはちょうどたいので、周りの一般的な外観を取らなければならないポイント·イン·タイム·リカバリーこのprocedure.Weの手順とその前後バイナリログ内の位置を見つけることが起こる。 


NOW(): 2014-11-27 19:46:17 
# mysqlbinlog --start-datetime=20141127173200 --stop-datetime=20141127173628 --database=anothermysqldba mysql-binlogs.000001 | more 

at 253053 
at 253564 

# mysql anothermysqldba --login-path =local -e "DROP PROCEDURE populate_dummydata"; 
# mysqlbinlog --start-position=253053 --stop-position=253564 --database=anothermysqldba mysql-binlogs.000001 | mysql --login-path =local anothermysqldba 


> SHOW CREATE PROCEDURE populate_dummydata\G 
*************************** 1. row *************************** 
Procedure: populate_dummydata 
sql_mode: NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `populate_dummydata`( IN rowsofdata INT ) 
BEGIN 

SET @A = 3; 
SET @B = 15 - @A; 
SET @C = 16; 
SET @D = 25 - @C; 

WHILE rowsofdata > 0 DO 
INSERT INTO table_w_rdata 
SELECT NULL, SUBSTR(md5(''),FLOOR( @A + (RAND() * @B ))) as somedata, SUBSTR(md5(''),FLOOR( @C + (RAND() * @D ))) AS moredata ; 
SET rowsofdata = rowsofdata - 1; 
END WHILE; 
END 
character_set_client: utf8 
collation_connection: utf8_general_ci 
Database Collation: latin1_swedish_ci 
1 row in set (0.00 sec) 

NOW(): 2014-11-27 19:51:03 
> call populate_dummydata(50); 
> SELECT * from table_w_rdata WHERE id > 145; 
+-----+-----------------------------+------------------+ 
| id | somedata | moredata | 
+-----+-----------------------------+------------------+ 
| 146 | 98f00b204e9800998ecf8427e | 800998ecf8427e | 
| 147 | cd98f00b204e9800998ecf8427e | 800998ecf8427e | 
| 148 | 204e9800998ecf8427e | 98ecf8427e | 
| 149 | d98f00b204e9800998ecf8427e | e9800998ecf8427e | 
| 150 | 204e9800998ecf8427e | 9800998ecf8427e | 
+-----+-----------------------------+------------------+ 


私たちは、経由で、バイナリログから私たちの手順を回復したポイント·イン·タイム·リカバリー  
これは単純な例ですが、それはあなたが前進して使用できるツールの例です。 

バイナリログは非常に価値があるのはこのためです。 

参考URL: