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

■ Ubuntu学習 #6:MySQL使ってみる



第2回 MySQLにはじめてのデータを入れてみる:MySQL道普請便り|gihyo.jp … 技術評論社

上記サイトのサンプルデータその3をやってみたがエラーでインポートできなかった。
mysql> LOAD DATA INFILE '/tmp/KEN_ALL_UTF8.CSV' INTO TABLE zipcode.zipcode FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (code, old_zipcode, zip_code, prefecture_kana, city_kana, town_kana, prefecture, city, town, @dummy, @dummy, @dummy, @dummy, @dummy, @dummy);
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
mysql>

既定では決められた場所以外からのインポートはできない模様
@@global.secure_file_prev を確認
mysql>  SELECT @@global.secure_file_priv;
+---------------------------+
| @@global.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/     |
+---------------------------+
1 row in set (0.00 sec)

上記のようになっているので
インポート対象のファイルは /var/lib/mysql-files/ に置く必要がある

ということで、ファイルをコピーし、
user@user:~$ sudo cp /tmp/KEN_ALL_UTF8.CSV /var/lib/mysql-files/

LOAD DATAのパスを変更しインポート
mysql> LOAD DATA INFILE '/var/lib/mysql-files/KEN_ALL_UTF8.CSV' INTO TABLE zipcode.zipcode FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (code, old_zipcode, zip_code, prefecture_kana, city_kana, town_kana, prefecture, city, town, @dummy, @dummy, @dummy, @dummy, @dummy, @dummy);
Query OK, 124433 rows affected (4.73 sec)
Records: 124433  Deleted: 0  Skipped: 0  Warnings: 0



技術メモ, Linux, Ubuntu, MySQL

Ubuntu:#5 MySQL初期設定

"mysql_secure_installation" コマンドで初期化を行う

user@user:~$ sudo mysql_secure_installation
[sudo] user のパスワード:

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No:
VALIDATEP PASSWORDコンポーネントをセットアップしますか?
→ "y"

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
パスワード検証ポリシーを選択
STRONGが最も強力だが、今回は面倒なので"LOW"(0)を選択

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :
パスワード強度は 50 とのこと。
問題ないので "y" で続行

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :
匿名ユーザーを削除するか? "y" を入力

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
リモートからのrootログインを禁止するか?
本当は"y"が良いと思われるが、今回はテストなので "n" を入力

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
"test"データベースを削除するか?
使わないので "y" を入力

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
特権テーブルを今すぐ再ロードするか?
どちらでも良さそう。"y" を入力

これで終了

SSHでMySQLにrootで接続してみる。
user@user:~$ sudo mysql -u root -p
[sudo] user のパスワード:
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.20-0ubuntu0.20.04.1 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

※ mysqlコマンドは "sudo" を付けないと実行できない



技術メモ, Linux, Ubuntu, MySQL

Ubuntu:#1 MySQLインストール

OS:Ubuntu 20.04 LTS
MySQLをインストールしてみる

端末より以下コマンドを実行
sudo apt install mysql-server

サービス起動確認 (通常はインストールと同時に起動している模様)
systemctl status mysql

上記コマンドを実行すると "linues 1-13/13 (END)" のような感じでプロンプトが止まる
"q" を押せばコマンドを抜けれる

"Active : active (running)" が表示されていれば起動中
"inactive (dead)" が表示されていれば停止中

停止していたら以下コマンドで起動
systemctl start mysql



技術メモ, Ubuntu, MySQL

MySQL:PHP:設定

PHPからMySQLを使うための設定を行う。

PHPからMySQLへアクセスする方法は"mysqli"と"pdo_mysql"の2つあるみたい。
どちらが良いのか? http://php.net/manual/ja/mysqlinfo.api.choosing.php

今回は "mysqli" を有効にしてみる。
PHP.ini (D:\php\php.ini)より "extension=mysqli"を検索し、行頭の";"を外し上書き保存。
IISの再起動で設定を有効にする。

設定が有効となったかは phpinfo で確認。
mysqliの項目があれば問題無いと思われる。


[MySQL][PHP]

MySQL:OracleからMySQLへの移行2


OracleからDDL情報を取得

2通りの取得方法がある。
■1:「DBMS_METADATA」パッケージ「GET_DDL」ファンクションを使用する
DDL取得例
SQL> set long 2000000
SQL> set pages 0
SQL> select dbms_metadata.get_ddl('TABLE','SHAIN', 'APR1') from dual;
 
CREATE TABLE "APR1"."SHAIN"
(   "SHAIN_ID"     NUMBER(10), 
(省略)
"KOUSHIN_DATE" DATE,
PRIMARY KEY ("SHAIN_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
(省略) 
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "APRDATA1"

■2:Data Pumpユーティリティーを使う
1. 「expdp」コマンドでメタデータをエクスポート
例)
expdp USER/PASSWD FULL=Y CONTENT=METADATA_ONLY DUMPFILE=IKO_DIR:full_meta.dmp 
EXCLUDE=STATISTICS LOGFILE=IKO_DIR:exp_full_meta.log

2. 「impdp」コマンドでメタデータからSQL文(DDL:Data Definition Languageなど)を生成
例)
impdp USER/PASSWD DUMPFILE=IKO_DIR:full_meta.dmp SQLFILE=full_meta.sql
LOGFILE=IKO_DIR:cr_sql.log


[Database][Oracle][MySQL]
https://www.atmarkit.co.jp/ait/articles/1704/18/news007.html

MySQL:OracleからMySQLへの移行1


【1】「インスタンスの違い」を理解して、正しく設定する

■ポイント
・innodb_buffer_pool_sizeやinnodb_log_buffer_sizeなどのパラメータは、DBA自身が指定する
・特に、innodb_buffer_pool_sizeのパラメータはパフォーマンスに大きく影響する
・innodb_buffer_pool_sizeは「サーバに搭載される物理メモリ量の70~80%程度」の値を設定する

【2】「ユーザーの違い」を理解して、正しく設定する

■ポイント
・MySQLの「ユーザー」は、「アクセス制御のみ」を行う役割を持つ
・内部的には、「ap_user@192.168.0.1」のように、「ユーザー名と接続元の組み合わせ」を1つのユーザーアカウントとして解釈する
・MySQLには「プロファイル」の概念がない。ユーザーアカウントごとのリソース制御はできないが、「パスワードポリシー」は個別に指定できる

【3】「権限」「ロール」の違いを理解し、正しく設定する

■ポイント
・MySQLは、ユーザー権限の種類がOracle Databaseより少ない
・権限の付与は、Oracle Databaseと同じく「GRANT」文で行える
・MySQLにはロールがないため、ユーザーアカウントごとに権限を付与する

【4】「表領域管理の違い」を理解し、正しく設定する

■ポイント
・Oracle DatabaseとMySQLでは、(一部を除き)物理ファイルの構成/名称に違いがある
・可能ならば、ディスク負荷や障害時を想定して「データファイル」「一時ファイル」「REDOログファイル」「UNDOファイル」を分散させる設計をしておく
・「ib_logfile(REDOログファイル)」はコミットごとにアクセスがあり、I/O負荷が上昇する原因になるため、別ディスクに保管するよう設定することで書き込み負荷を分散できる

【5】「監査の違い」を理解して、正しく設定する

■ポイント
・全てのクエリをログに出力する「一般クエリログ」を利用するならば、Linuxの「logrotate」などでログローテーションの仕組みを構築しておく
・普段使われるクエリ以外の実行をブロックするには、ホワイトリスト形式の「MySQL Enterprise Firewall」を使う
・ホワイトリストを自動的に作成する「自動学習モード」がある
・未許可のクエリが検知されたら「拒否」か「許可するが、監査ログに記録する」かを選べる

【6】「ロック/トランザクション分離レベルの違い」を理解して、正しく設定する

■ポイント
・MySQLにはトランザクション分離レベルが4段階ある(「SERIALIZABLE」「REPEATABLE-READ」「READ-COMMITTED」「READ-UNCOMMITTED」)
・デフォルト設定REPEATABLE-READだが、「READ-COMMITTED」に修正することを推奨する
・その理由は、「ネクストキーロック」によってパフォーマンス劣化を招く可能性があるため
・ネクストキーロックは、「READ-COMMITTED」への設定変更で回避できる

【7】「オプティマイザの違い」を理解して、正しく設定する

■MySQLにおけるSQL改善のアプローチ
・スロークエリログなどから、問題になっているクエリを特定
・EXPLAINで実行計画を確認し、想定通りのインデックスを使用しているかどうかを確認
・インデックスの追加、クエリに対してHINT句でチューニングする

■ポイント
・MySQLのオプティマイザは「コストベース」のみ
・MySQL 5.7で大幅なオプティマイザのリファクタリングが行われたため、「MySQL 5.7」以降を推奨する
・実行計画を確認するには、MySQL Workbenchにある「ビジュアルEXPLAIN」を使うと便利


[Database][Oracle][MySQL]
https://www.atmarkit.co.jp/ait/articles/1612/01/news009.html

その他の記事