Saturday, October 14, 2017

MySQL InnoDBテーブルスペース暗号化

MySQL Tablespace暗号化は設定が比較的簡単です。 MySQL 5.7、innodb_file_per_tableを使用する必要があります 


MySQLのドキュメントには、これを設定するために必要なものすべてが含まれています。 


しかし、リンクを共有しただけでは私のブログ投稿は非常に短くなります。 そう.... 

アップグレード後、MySQL 5.7では、キーファイルの有効な場所が必要です。 私はMySQLのdatadirを/ var / lib / mysql / dataとして持っています。これにより、必要に応じてデフォルトの場所を見つけることができますが、必要に応じてさらに多くのディスクを簡単にマウントできます。 これにより、/ var / lib / mysqlがすでに許可されているため、selinuxなどの追加編集を行う必要もありません。 

/ var / lib / mysql / keyringをタッチする 
chmod 750 / var / lib / mysql / keyring * 
chown mysql:mysql / var / lib / mysql / keyring 

mysql .cnfファイルを編集します。 

ls /usr/lib64/mysql/plugin/keyring_file.so 
/usr/lib64/mysql/plugin/keyring_file.so 

[mysqld] 
#Keyring Pluginのインストール 
early-plugin-load = keyring_file.so 
keyring_file_data = / var / lib / mysql / keyring 

MySQLの起動後にあなたのプラグインをチェックしてください: 

mysql> SELECT PLUGIN_NAME、PLUGIN_STATUS 
- >情報シチェラから 
- > WHERE PLUGIN_NAME LIKE 'キーリング%'; 
+ -------------- + --------------- + 
| PLUGIN_NAME | PLUGIN_STATUS | 
+ -------------- + --------------- + 
| keyring_file | アクティブ| 
| keyring_udf | アクティブ| 
+ -------------- + --------------- + 


プラグインをインストールするkeyring_udf SONAME 'keyring_udf.so'; 
CREATE FUNCTION keyring_key_generate RETURNS INTEGER SONAME 'keyring_udf.so'; 
CREATE FUNCTION keyring_key_fetchストリングSONAMEを戻します 'keyring_udf.so'; 
CREATE FUNCTION keyring_key_length_fetch INTEGER SONAMEを戻します。 'keyring_udf.so'; 
CREATE FUNCTION keyring_key_type_fetchストリングSONAMEを戻します 'keyring_udf.so'; 
CREATE FUNCTION keyring_key_store戻り値INTEGER SONAME 'keyring_udf.so'; 
CREATE FUNCTION keyring_key_remove RETURNS INTEGER SONAME 'keyring_udf.so'; 


mysql>テストを使用する。 
mysql> SELECT keyring_key_generate( 'MyKey1'、 'AES'、32); 

mysql> CREATE TABLE `enc_test`( 
`enc_test_id` varchar(255)NOT NULL、 
PRIMARY KEY( `enc_test_id`) 
)ENGINE = InnoDB; 

mysql>テーブルを変更するtest.enc_test encryption = 'Y'; 

mysql> show create table enc_test \ G 
**************************** 1.行******************** ******* 
テーブル:enc_test 
テーブルの作成:CREATE TABLE `enc_test`( 
`enc_test_id` varchar(255)NOT NULL、 
PRIMARY KEY( `enc_test_id`) 
)ENGINE = InnoDB DEFAULT CHARSET = latin1 ENCRYPTION = 'Y' 
1行セット(0.00秒) 

Friday, April 22, 2016

MySQLで数学

The Original post: http://anothermysqldba.blogspot.com/2016/04/math-with-mysql.html


私はまあ...私はずっと前にこの投稿を思いました....

我々は、すべての数学はすべての生命の基本的な側面ではなく、超えた場合は世界中で使用される共通言語であることを知っています。 MySQLは、すべてのデータベースのように、数学の多くの側面であなたを助けることができます。

ここでは関数のリストは、次のとおりです。 https://dev.mysql.com/doc/refman/5.6/en/mathematical-functions.html

ここでは、始めるためにいくつかの簡単な例です。
  • 二次式の斧^ 2 + bxの+ C = 0

# 2x^2 – 4x – 3 = 0.
SET @a= 1;
SET @b= 3;
SET @c= -4;
SET @XX = ( -(@b) - SQRT( POW(@b,2) -4 * @a * @c) / POW(@a,2) ) ;
SET @YY = ( -(@b) + SQRT( POW(@b,2) -4 * @a * @c) / POW(@a,2) ) ;
SET @XXX = MOD(@YY, @XX);

SELECT @XX / @XXX as X;
+------+
| X |
+------+
| -4 |
+------+
SELECT @YY / @XXX as X ;
+------+
| X |
+------+
| 1 |
+------+

  • ピタゴラスの定理(ジオメトリ101を覚えておいてください)​​:A ^ 2 + B ^ 2 = C ^ 2

SET @A = 14;
SET @B = 48;
SELECT @C := SQRT(POW(@A,2) + POW(@B,2) );
+-------------------------------------+
| @C := SQRT(POW(@A,2) + POW(@B,2) ) |
+-------------------------------------+
| 50 |
+-------------------------------------+


だから、Cを解決し、もちろんあなたにものために解決するためにこれを使用します。

SELECT @A := SQRT(POW(@C,2) - POW(@B,2)) ;
+-----------------------------------+
| @A := SQRT(POW(@C,2) - POW(@B,2)) |
+-----------------------------------+
| 14 |
+-----------------------------------+


  • 対数とそのアイデンティティは、xy =ログX +ログyとログ
http://www.businessinsider.com/the-17-equations-that-changed-the-world-2012-7#the-logarithm-and-its-identities-2


SET @X = 2;
SET @Y = 3;
SELECT concat(log(@X * @Y) ,' = ', log(@X) + log(@Y) ) as "logarithm and its identities" ;
+---------------------------------------+
| logarithm and its identities |
+---------------------------------------+
| 1.791759469228055 = 1.791759469228055 |
+---------------------------------------+

  • 多面体のためのオイラーの公式:F - E + V = 2
http://www.businessinsider.com/the-17-equations-that-changed-the-world-2012-7#eulers-formula-for-polyhedra-6

SET @V = 4; # Vertices
SET @E = 6; # Edges
SET @F = 4; # Faces
SELECT @V - @E + @F as Tetrahedron;

SET @V = 8; # Vertices
SET @E = 12; # Edges
SET @F = 6; # Faces
SELECT @V - @E + @F as Hexahedron;

SET @V = 12; # Vertices
SET @E = 30; # Edges
SET @F = 20; # Faces
SELECT @V - @E + @F as Icosahedron;

SET @V = 12; # Vertices
SET @E = 30; # Edges
SET @F = 20; # Faces
SELECT @V - @E + @F as Icosahedron;

  • 相対性理論Eのアインシュタインの理論= MC ^ 2

SET @lbs = 190; # lbs
SET @lb2gram = 453.6; # 1 lbs = 453.6g
SET @lbstograms := @lbs * @lb2gram / 1;
SET @m := @lbstograms * 1 / 1000;
SET @c := POW(3.00 * POW(10,8), 2 );
SELECT @E := @m * @c ;
+----------------+
| @E := @m * @c |
+----------------+
| 7.75656e18 |
+----------------+

  • 1 = 0.9999 .....

SELECT SUM(.9/(9/10));
+----------------+
| SUM(.9/(9/10)) |
+----------------+
| 1.00000 |
+----------------+

Sunday, July 26, 2015

MySQLのクイックパスワード生成

Original post http://anothermysqldba.blogspot.com/2015/07/quick-password-generation-with-mysql.html

ここではMySQLを使用して、パスワード、あなたのアプリケーションを生成するために迅速かつ簡単な方法です。 
このクエリは、長さと値の大文字と小文字ランダムに生成されたパスワードを作成します。 


SELECT CONCAT(UCASE(SUBSTRING( SUBSTRING(MD5(RAND()), FLOOR( 1 + (RAND() * 5)) , FLOOR( 8 + (RAND() * 15 )) ) , FLOOR( 1 + (RAND() * 4 )) , FLOOR( 4 + (RAND() * 12 )) )), 
SUBSTRING('!@#$%^&*', FLOOR( 1 + (RAND() * 4)) , FLOOR( 1 + (RAND() * 8)) ), 
SUBSTRING( SUBSTRING(MD5(RAND()), FLOOR( 1 + (RAND() * 5)) , FLOOR( 8 + (RAND() * 15 )) ) , 5)) as password \G 


それは一部の記号を追加すると、適用後、後半このクエリでは、MD5は自動的にそれを行うために、残りは小文字である動的パスワードの最初の部分と上ケースそれのためのランダムな値になります。 もちろん、あなたが好むものは何でもシンボル調整することができます。 

結果の一例: 

CREATE TABLE `generated` ( 
`password` varchar(255) NOT NULL 
) ENGINE=InnoDB ; 

MariaDB [(none)]> INSERT INTO test.generated SELECT CONCAT(UCASE(SUBSTRING( SUBSTRING(MD5(RAND()), FLOOR( 1 + (RAND() * 5)) , FLOOR( 8 + (RAND() * 15 )) ) , FLOOR( 1 + (RAND() * 4 )) , FLOOR( 4 + (RAND() * 12 )) )), SUBSTRING('!@#$%^&*', FLOOR( 1 + (RAND() * 4)) , FLOOR( 1 + (RAND() * 8)) ),SUBSTRING( SUBSTRING(MD5(RAND()), FLOOR( 1 + (RAND() * 5)) , FLOOR( 8 + (RAND() * 15 )) ) , 5)) as password; 

MariaDB [(none)]> select * from test.generated; 
+-----------------------------------+ 
| password | 
+-----------------------------------+ 
| 7232E1D9$%^&*f7de22c1b14f15c8a6 | 
| DEE22B7F7#$%541adcdd1b8e2 | 
| 2C4BB81001@#$%^&d0d9a2126 | 
| 941D3B92D@#$%^a4b7be92 | 
| 1CF2563254FC@#a79bb5 | 
| 2AE86E7D6!@#$%^&*4ca03f2e8 | 
| 074DD8D3#$e70a1 | 
| B2DDC!@#$%^47a252f79 | 
| 3A6D0A#$%^&*01ce9278a2a | 
| E9FB4CD16E19!739db9faa1616505c | 
| 1ED7A2E1379B4!@#$%ebe60b | 
| E9B57D71DB1@#$%^e9a4f8c2e94bf3d35 | 
| C97982!@#$8b5c534653c06 | 
| DE8998057C8!@#$%^8977a807 | 
| 7C7172EB1AE5$%^&*79d2b27 | 
| B52CE71@#$%^&*4508 | 
| AB17714F!@#$%^&203ba4ff80f8a6 | 
| 558D@#$04087871e29ff54 | 
| 27A78E8EF#$%^b8cee8628d81593 | 
| 315F2EC4#ad9913ec0595c | 
+-----------------------------------+
 

Monday, June 29, 2015

フィボナッチ数列手順

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 | 
+-----------+ 


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

Saturday, December 27, 2014

文字列の中から文字列を解析/検索

Original post: http://anothermysqldba.blogspot.com/2014/12/findparse-string-from-within-string.html

だから私は最近、別の文字列から文字列を解析に関するいくつかの異なる質問や投稿に気づいた。 いくつかのソリューションは、新しい機能やなどの作成に含まれるものの、それはいくつかのケースでは、単一のクエリ内でもを行うことができます。 

たとえば、私たちはURLからドメインを引き出すために探しているとしましょう​​。 私はなぜ、どのようにこの作品を詳細に入るためにしようとします。 
我々は、次の表を持っている。 

CREATE TABLE `parse_example` ( 
`id` int(11) NOT NULL AUTO_INCREMENT, 
`urldemo` varchar(150) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 
+----+----------------------------+ 
| id | urldemo | 
+----+----------------------------+ 
| 1 | http://www.mysql.com/ | 
| 2 | http://www.percona.com/ | 
| 3 | https://tools.percona.com/ | 
| 4 | https://mariadb.com/ | 
| 5 | http://planet.mysql.com/ | 
| 6 | http://dev.mysql.com/doc/ | 
+----+----------------------------+ 


.comの後に//と何も://またはhttps:この例の目標は、httpを無視することです。 だから我々は場所を見つけるためにLOCATE使用しています。 

.comの基準は、我々はそれに始めることができるので、それは一定であるので簡単です。 

SELECT LOCATE('.com', urldemo), urldemo FROM parse_example; 
+-------------------------+----------------------------+ 
| LOCATE('.com', urldemo) | urldemo | 
+-------------------------+----------------------------+ 
| 17 | http://www.mysql.com/ | 
| 19 | http://www.percona.com/ | 
| 22 | https://tools.percona.com/ | 
| 16 | https://mariadb.com/ | 
| 20 | http://planet.mysql.com/ | 
| 17 | http://dev.mysql.com/doc/ | 
+-------------------------+----------------------------+ 


[OK]をので、私たちは/を削除したい、それがどのような場所ですか? 

SELECT LOCATE('.com', urldemo) as start, LOCATE('.com', urldemo) +4 as end, SUBSTRING(urldemo FROM LOCATE('.com', urldemo) + 4 ) AS resulting , urldemo FROM parse_example; 
+-------+-----+-----------+----------------------------+ 
| start | end | resulting | urldemo | 
+-------+-----+-----------+----------------------------+ 
| 17 | 21 | / | http://www.mysql.com/ | 
| 19 | 23 | / | http://www.percona.com/ | 
| 22 | 26 | / | https://tools.percona.com/ | 
| 16 | 20 | / | https://mariadb.com/ | 
| 20 | 24 | / | http://planet.mysql.com/ | 
| 17 | 21 | /doc/ | http://dev.mysql.com/doc/ | 
+-------+-----+-----------+----------------------------+

これは私が唯一従って結果を容易にするためのフィールドのエイリアスを入れて、私たちの終了位置を与えます。 

今、httpの後整理とhttpsするのも、どちらも持っているように、実際には非常に簡単です://それらの後、私たちは単なる文字列で/秒の場所を必要とする。 


SELECT LOCATE('/', urldemo) as first, LOCATE('/', urldemo) +1 as second, urldemo 
FROM parse_example; 
+-------+--------+----------------------------+ 
| first | second | urldemo | 
+-------+--------+----------------------------+ 
| 6 | 7 | http://www.mysql.com/ | 
| 6 | 7 | http://www.percona.com/ | 
| 7 | 8 | https://tools.percona.com/ | 
| 7 | 8 | https://mariadb.com/ | 
| 6 | 7 | http://planet.mysql.com/ | 
| 6 | 7 | http://dev.mysql.com/doc/ | 
+-------+--------+----------------------------+ 


これらのクエリはちょうど最後のクエリの異なる側面がやってされるかを示している。 だから、私たちは一緒にそれをすべて入れてみましょう。 


SELECT 
TRIM(TRAILING SUBSTRING(urldemo FROM LOCATE('.com', urldemo) + 4 ) 
FROM SUBSTRING(urldemo FROM LOCATE('/', urldemo) + 2 ) ) AS parsed_domain , 
urldemo as original_url 
FROM parse_example; 
+-------------------+----------------------------+ 
| parsed_domain | original_url | 
+-------------------+----------------------------+ 
| www.mysql.com | http://www.mysql.com/ | 
| www.percona.com | http://www.percona.com/ | 
| tools.percona.com | https://tools.percona.com/ | 
| mariadb.com | https://mariadb.com/ | 
| planet.mysql.com | http://planet.mysql.com/ | 
| dev.mysql.com | http://dev.mysql.com/doc/ | 
+-------------------+----------------------------+ 


今、うまくいけばそれはあなたが何が必要を解析することができるのに役立ちます。 この例では、URLに限られている。 しかし、すでにここの機能のいくつかの例以来、あなたは何が必要構文解析するために使用できる機能の私の例である。 



CREATE FUNCTION PARSE_STRING(delimiterA VARCHAR(50), delimiterB VARCHAR(50), passed_string VARCHAR(255) ) 
RETURNS VARCHAR(255) DETERMINISTIC 
RETURN 
TRIM(TRAILING SUBSTRING(passed_string FROM LOCATE(delimiterB, passed_string) ) 
FROM SUBSTRING(passed_string FROM LOCATE(delimiterA, passed_string) + CHAR_LENGTH(delimiterA) ) ) ; 

SELECT PARSE_STRING('//','.com', urldemo) FROM parse_example; 
+------------------------------------+ 
| PARSE_STRING('//','.com', urldemo) | 
+------------------------------------+ 
| www.mysql | 
| www.percona | 
| tools.percona | 
| mariadb | 
| planet.mysql | 
| dev.mysql | 
+------------------------------------+ 


フルネームフィールドから姓を引き出し: 

SELECT PARSE_STRING('John ','', 'John Smith') ; 
+----------------------------------------+ 
| PARSE_STRING('John ','', 'John Smith') | 
+----------------------------------------+ 
| Smith | 
+----------------------------------------+ 


最初の名前を引いて 

SELECT PARSE_STRING('',' Smith', 'John Smith') ; 
+-----------------------------------------+ 
| PARSE_STRING('',' Smith', 'John Smith') | 
+-----------------------------------------+ 
| John | 
+-----------------------------------------+ 


名の例で付与あなたは、区切りの値を知っている必要があります。 しかし、これはあなたが構築できるだけの例です。