#author("2023-08-18T12:13:38+00:00","default:hotate","hotate")
#author("2024-04-24T22:46:45+00:00","default:hotate","hotate")
#contents
&tag(MySQL);

* インデックス [#m327809e]
#taglist(tag=MySQL)

* [[コマンド]] [#b414e776]
- [[MySQL 逆引きリファレンス>http://mysql.javarou.com/]]
 「MySQL 逆引きリファレンス」はオープンソースの RDBMS である MySQL のコマンドや TIPS などをリファレンス形式でまとめているサイトです。

** system [#o4c565c8]
- [[第77回 mysqlコマンドラインクライアント:MySQL道普請便り|gihyo.jp … 技術評論社>https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0077]]
 \! (systemコマンド)
 systemコマンドはUnixのshellコマンドを実行します。
- [[よく使うMySQLコマンド集 - Qiita>https://qiita.com/CyberMergina/items/f889519e6be19c46f5f4]]
 pagerコマンドでクエリの結果を見やすくする ~pager less~

** 更新通知 [#xe151dcd]
- [[GitHub - Cyclonecode/mysql-notification: Example of a user defined function (UDF) in MySQL>https://github.com/Cyclonecode/mysql-notification]]
 A simple example of using a user defined function (UDF) in mysql to make real-time notifications on a table change. 
-- 関連:[[PostgresSQL]]
-- コメント:[[MySQL/8.0]].22, [[BigSur]]にて通知の受信を確認した。([[2021]]/05/02)
- [[cybozu.com の MQ と性能問題 - Cybozu Inside Out | サイボウズエンジニアのブログ>https://blog.cybozu.io/entry/1294]]
 UDF は MySQL plugin の仕組みの1つで、SQL から利用可能な関数を自由に定義・追加することができます。この仕組みを利用して、ワーカーに通知を行う関数を作成しましょう。

* [[ツール]] [#f498d7f4]
- [[MySQL :: Download MySQL Workbench>http://dev.mysql.com/downloads/tools/workbench/]]
- [[Sequel Pro>http://www.sequelpro.com/]]
-- [[MacからMySQLをさわるならSequel Proをオススメする5つの理由 | CreativeStyle>http://kadoppe.com/archives/2013/02/mac-mysql-sequel-pro.html]]

** [[Ruby]] [#y3978e79]
- [[ruby-mysql · GitHub>https://github.com/tmtm/ruby-mysql]]
 MySQL connector for Ruby. pure Ruby version.
- [[YUKASHIKADO Inc. 開発ブログ • HomebrewなMySQLを使っている時のgem install mysql2のエラー>http://dev.yukashikado.co.jp/post/53813418976/homebrew-mysql-gem-install-mysql2]]
 gem install mysql2 -- --with-mysql-lib=/usr/local/Cellar/mysql/5.6.10/lib --with-mysql-dir=/usr/local/Cellar/mysql/5.6.10 
 --with-mysql-config=/usr/local/Cellar/mysql/5.6.10/bin/mysql_config --with-mysql-include=/usr/local/Cellar/mysql/5.6.10/include
- [[bundle install 時、mysql2でエラー - Qiita>https://qiita.com/tktcorporation/items/0ef8c930fc18ce72c301]]
 解決策
 $ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
- [[bundlerでmysql2のインストールが失敗する - NullPointer's>https://paulownia.hatenablog.com/entry/2018/04/14/143739]]
 $ brew install openssl 
 $ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

** [[Homebrew]] [#qfc1f5ec]
- [[HomebrewでMySQLをインストールする時に知っておきたいこと | Macとかの雑記帳>http://tukaikta.blog135.fc2.com/blog-entry-197.html]]

** [[Java]] [#bbfe29f0]
- [[JavaでMySQLに接続してデータ操作をする - TASK NOTES>http://www.task-notes.com/entry/20150414/1428980400]]
 JavaからMySQLへ接続するにはJDBCドライバが必要です。 MySQL :: Download Connector/J からダウンロードして下さい。
 ダウンロードしたら解凍して、中のjarファイルを使用します。
- [[JavaでMySQLのデータベースにトランザクション処理 | Developers.IO>http://dev.classmethod.jp/server-side/java/java_mysql_transaction/]]
 今回は複数のSQL文の登録とトランザクション処理を紹介します。 トランザクション処理を行うと、複数のSQL文の内の1つ以上でエラーが
 発生した場合に、その全ての処理を無かった事にしてくれます。
- [[[Java]iciqlで簡単DBアクセス[ORマッパー] | Developers.IO>http://dev.classmethod.jp/server-side/java/iciql/]]
 iciqlの特徴は以下のとおり。
 ・単一のjarで提供される
 ・設定ファイルなしで使える
 ・DBからモデル生成できるツール付き

* データ [#l99f3552]
** [[日時]]型 [#i4fe5743]
- [[いぞるで雑記annex mysqlのtimestamp型を使って更新日時と生成日時の両方を記録する>http://isoldeblog.blog93.fc2.com/blog-entry-14.html]]
 CREATE TABLE `test` (
 name varchar(10) ,
 modified_date timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 create_date timestamp NOT NULL default '0000-00-00 00:00:00',
 )
 INSERT INTO test ( name , create_date ) VALUES ( 'foo' , NULL );
- [[[MySql] 登録日時の初期値と更新日時の自動更新 | So-Kai-App Note>http://so-kai-app.sakura.ne.jp/blog/122/2011/12/04/]]
 current_timestamp を設定できるのは1カラムだけ
- [[[ MySQL ] n分前, n時間前, n日後の日付を取得する ( INTERVAL ) – 行け!偏差値40プログラマー>http://hensa40.cutegirl.jp/archives/873]]
 7日後の日時を取得する
 mysql> SELECT CURRENT_TIMESTAMP + INTERVAL 7 DAY;


** Upsert  (Insert or Update) [#sa71a3d1]
- [[mysql - If exists then update else insert - Database Administrators Stack Exchange>http://dba.stackexchange.com/questions/99120/if-exists-then-update-else-insert]]
 delimiter $$
 create procedure select_or_insert()
 begin
  IF EXISTS (select * from users where username = 'something') THEN
    update users set id= 'some' where username = 'something';
  ELSE 
    insert into users (username) values ('something');
  END IF;
 end $$
 delimiter ;
- [[MySQLでUPSERTする方法 - TIPS | Code Macchiato - よりいいコードを、よりDRYで>https://code-macchiato.com/tips/mysql-upsert]]
 upsertとは? 
 tableにレコードがなければINSERT, 存在すればUPDATEという操作


* [[運用管理]] [#rb803307]
** トラブル [#jcb1baa3]
- [[誰も教えてくれなかったMySQLの障害解析方法 - Qiita>http://qiita.com/muran001/items/14f19959d4723ffc29cc]]
 それほどDBに詳しくないアプリエンジニアが何かトラブった時にすぐさま行動して問題把握できるようになる情報を列挙しておきます。

** mysql_upgrade [#m1f5f6de]
- [[yum で MySQL バージョンアップ後に実行するチェックコマンド、それは mysql_upgrade – oki2a24>http://oki2a24.com/2013/06/20/1-yum-2-mysql-upgrade/]]
 アップグレードした新しい MySQL のシステムとの互換性が保たれているかチェックし、おかしければ修正するコマンドとのこと
-- [[MySQL 8で、mysql_upgradeがdeprecatedになった - Qiita>https://qiita.com/tana6/items/c925ff2648e395c004ac]]
 MySQL 8.0.16から、mysql_upgradeはdeprecatedとのこと

** 設定(メモリ) [#q21a3fbe]
- [[MySQL最低限のメモリ設定 - Qiita>http://qiita.com/zaburo/items/65bac3b8e0a635ada68c]]
 環境にもよりますが、MySQLのデフォルトのメモリ関連の設定は控えめな感じになっています(私のCentOS環境では、key_buffer_sizeが8M,innodb_buffer_pool_sizeも8Mとなっています)ので、適切な状態への変更が必要です。
- [[5分で出来るMySQLのお手軽チューニング - わーくあうと!>http://nick.hateblo.jp/entry/2014/01/26/183822]]
 今回はスレッド数が多すぎたので max_connections を 151ー>31 と設定しました。
- [[MySQLメモリ設定を変更して、前後の設定値を比較してみた | Check!Site>http://www.checksite.jp/mysql-myisam-memory-conf/]]
 MySQLメモリ設定を変更しました。設定項目は抜粋になります。備忘録として記載しておきます。
- [[MySQLのメモリ設定の勘所 – sawara.me>http://sawara.me/mysql/1428/]]
 MySQLで使用する全体的なメモリ使用量を計算するには
  グローバルバッファ + (スレッドバッファ × コネクション数) = メモリ使用量
 という計算式に当てはめればいいことになります。
- [[MySQL 5.6のインストール後にチューニングすべき項目 | Yakst>https://yakst.com/ja/posts/61]]
 innodb_buffer_pool_size - デフォルトは128M。これは、メモリにロードされるデータとインデックスのためにInnoDBがどのくらい
 メモリを使うかを指定するものなので、設定すべき重要な値だ。
- [[innodb_buffer_pool_sizeのチューニング:どれくらい割り当てる?>http://corporate.inter-edu.com/developper/1373]]
 よく「サーバの全メモリの50%から70%くらい」とか「80%」くらいとか言われますが、それはどちらかというとスワップしないための限界値を示すものであって、理想値ではないですよね。それでいろいろ調べてみたところ、なかなか日本語で良いまとめがなかったので、ここでまとめてみようと思います。
- [[DSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!>http://dsas.blog.klab.org/archives/50860867.html]]
 innodb_buffer_pool_size
 InnoDBのデータやインデックスをキャッシュするためのメモリ上の領域です。グローバルバッファなので、どかんと割り当ててください。

** [[バックアップ]] [#ua7a02ef]
- [[mysqldumpでMySQLのデータをバックアップ - シングスブログ>http://blog.thingslabo.com/archives/000039.html]]
- [[MySQLのバックアップ/復元(ダンプ/インポート/dump/import) 基本コマンド - 酒と泪とRubyとRailsと>http://morizyun.github.io/blog/mysql-dump-import-recover-export/]]
 mysqldump -u root -p -x --all-databases > dump.sql
- [[MySQLのコマンドラインで-pオプションを使わずにパスワードを指定する方法 - インフラエンジニアway - Powered by HEARTBEATS>http://heartbeats.jp/hbblog/2010/03/mysql-p.html]]
 mysql --defaults-file=<( printf '[client]\npassword=%s\n' ${DBPASSWORD} ) -u ${DBUSER} ${DBNAME}
 /bin/shだと多分エラーになるのでbashで。
- [[mysqldump に必要な権限は - Enjoi Blog>http://blog.enjoitech.com/article/200]]
 GRANT SELECT, LOCK TABLES, SHOW VIEW ON  `db_name` . * TO  'user'@192.168.0.200';
- [[mysqldumpに必要な権限 - Qiita>https://qiita.com/makisyu/items/f9110f4342541dd1dec2]]
 GRANT SELECT, LOCK TABLES, SHOW VIEW, RELOAD, REPLICATION CLIENT ON *.* TO 'backup'@'%' identified by 'backup';

** ログ [#lacc8029]
- 起動に失敗した場合、下記にエラーが出力される。
-- /usr/local/var/mysql/foo.local.err
- 通常のログ対象や出力先は、下記のファイルで設定する。
-- /usr/local/etc/my.cnf

** 監視 [#e25b0438]
- [[MySQLでALTER TABLE文の進捗状況を確認する - SH2の日記>https://sh2.hatenablog.jp/entry/20110615]]
 ALTER TABLE文は内部的に作業用テーブルへのINSERT処理を実行するので、ステータス変数Handler_writeにINSERTされたレコード件数が記録されていきます。
- [[mysqldumpリカバリの進捗を表示する #MySQL - Qiita>https://qiita.com/shouta-dev/items/af9bebecaeabff5fb62f]]
 pvコマンドはPipe Viewerの略で、その名の通りLinuxのパイプで通り過ぎていくデータの容量をモニタしてプログレスバーに表示してくれるというものです。

* ユーザ権限 [#g22ce89b]
- [[ユーザ権限の確認・追加 - Qiita>http://qiita.com/pinohara/items/481c95dc4c8c2568bf8d]]
 権限付与
 GRANT ALL PRIVILEGES ON `DB名`.テーブル TO 'ユーザ名'@'ホスト名';
- [[権限の設定(GRANT文) - ユーザーの作成 - MySQLの使い方>https://www.dbonline.jp/mysql/user/index6.html]]
 例えばグローバルレベルでCREATE権限を設定するには次のように入力します。
 grant create on *.* to 'user'@'localhost';

* 認証 [#aadb3d0b]
** MySQL/5.6 [#z52cff32]
- [[Suppress warning messages using mysql from within Terminal, but password written in bash script - Stack Overflow>http://stackoverflow.com/questions/20751352/suppress-warning-messages-using-mysql-from-within-terminal-but-password-written]]
 mysql_config_editor set --login-path=local --host=localhost --user=username --password
 mysql --login-path=local  -e "statement"
- [[MySQL5.6で-pオプションをつけてコマンド&スクリプトを実行する時のWarningを回避する方法 - Qiita>http://qiita.com/e_tei/items/bbfc90bfae28799d2176]]
 環境変数MYSQL_PWDを使います。

** [[MySQL/5.7]] [#wfd898e4]
- [[MySQL5.7以降でユーザ作成時にパスワードポリシーで怒られるときの回避策 - モヒカンは正義>https://blog.pinkumohikan.com/entry/workaround_for_mysql_password_policy]]
 5.7.8以降では validate_password プラグインがデフォルトでインストールされるようになっており、その影響で脆弱なパスワードはプラグインによって怒られるようになっている

* 導入 [#v5a33664]
- [[MySQL 5.7 をインストールしたら最初に行うセットアップ | WEB ARCH LABO>https://weblabo.oscasierra.net/mysql-57-init-setup/]]
 次に最低限のセキュリティ設定をしてくれる mysql_secure_installation について解説します。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS