mysql
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
mysql [2015/09/12 09:08] – [外から接続できない] nullpon | mysql [2024/01/18 01:41] (現在) – [DDLクエリが終わらない] nullpon | ||
---|---|---|---|
行 3: | 行 3: | ||
* [[http:// | * [[http:// | ||
- | ネットの情報は間違いも多い。鵜呑みにせず公式のマニュアルで確認すること。公式サイト、オライリーの書籍(実践ハイパフォーマンス等)はほぼ無条件で信用してもいいだろう。もちろんこのページの情報も鵜呑みにしないこと。きちんとマニュアルで調べる。すべての情報はマニュアルに掲載されている。 | + | ネットの情報は間違いも多い。鵜呑みにせず公式のマニュアルで確認すること。もちろんこのページの情報も鵜呑みにしないこと。きちんとマニュアルで調べる。すべての情報はマニュアルに掲載されている。公式サイト以外でもオライリーの書籍(実践ハイパフォーマンス等)はほぼ無条件で信用してもいいだろう。 |
+ | |||
+ | ===== DDLクエリが終わらない ===== | ||
+ | |||
+ | alter tableがなかなか終わらない場合、プロセスリストを見てみよう | ||
+ | |||
+ | < | ||
+ | show processlist | ||
+ | |||
+ | or | ||
+ | |||
+ | show full processlist | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | ありがちなのはGUIのデータベースクライアントツールがトランザクションを張っているケース(例えばDBeaverはテーブルを開くだけでトランザクションを作成する)。アプリを閉じましょう | ||
+ | |||
+ | ===== readonlyが効かない ===== | ||
+ | |||
+ | < | ||
+ | set global read_only = 1; | ||
+ | </ | ||
+ | |||
+ | を実行しても書き込みできてしまう。 | ||
+ | |||
+ | super権限を持っているユーザにはread_onlyは効かない。セキュリティ上の観点からもアプリからはsuper権限を持たないユーザで接続するのをオススメする。 | ||
+ | ===== rootログインできない! ===== | ||
+ | |||
+ | Ubuntu 18.08 + MySQL 5.7で発生。 | ||
+ | |||
+ | 認証方法がauth_socketとなっており、OSのrootユーザのみMySQLのrootユーザでログイン可能な設定にされている。なので sudo すればOK | ||
+ | |||
+ | sudo mysql -u root | ||
+ | |||
+ | 認証方法を以前と同じ(mysql_native_password)に変更するには | ||
+ | |||
+ | < | ||
+ | $ sudo mysql -u root | ||
+ | mysql> use mysql; | ||
+ | mysql> ALTER USER ' | ||
+ | </ | ||
+ | |||
+ | なお、認証方法がauth_socketの状態では '' | ||
+ | |||
+ | ==== パスワード要件 ==== | ||
+ | |||
+ | 5.7以降、デフォルトのパスワード要件がmedium policyとなっており、 | ||
+ | |||
+ | * パスワードが最低 1 つの数値文字を含み、1 つの小文字および大文字を含み、1 つの特殊文字 (英数字以外) を含む | ||
+ | * 長さ8文字以上 | ||
+ | |||
+ | でないと設定できない。 | ||
===== データ無いのに非常に遅い ===== | ===== データ無いのに非常に遅い ===== | ||
行 58: | 行 111: | ||
bind-address = :: | bind-address = :: | ||
bind-address = 0.0.0.0 | bind-address = 0.0.0.0 | ||
+ | | ||
+ | ===== mysql_upgrade ===== | ||
+ | 例えば5.6→5.7へアップグレードするとshow variablesでエラー。 | ||
+ | |||
+ | < | ||
+ | mysql> show variables; | ||
+ | ERROR 1146 (42S02): Table ' | ||
+ | </ | ||
+ | |||
+ | 他にも5.7→8.0へアップグレードするとshow databasesでエラーなど | ||
+ | |||
+ | < | ||
+ | mysql> show databases; | ||
+ | ERROR 1449 (HY000): The user specified as a definer (' | ||
+ | </ | ||
+ | |||
+ | これはバージョン間の互換性がなくなっているため | ||
+ | |||
+ | < | ||
+ | $ mysql_upgrade -u root | ||
+ | </ | ||
+ | |||
+ | で、mysqldを再起動する(不要かも)。バージョンアップした時は場合はmysql_upgradeを実行! | ||
+ | |||
+ | |||
+ | ===== 踏み台 ===== | ||
+ | ローカルホストから直接mysql接続できない場合、踏み台サーバ経由の方法 | ||
+ | |||
+ | * 踏み台サーバ、ホスト名 proxy.example.com、sshを22222でサーブ | ||
+ | * MySQLサーバ、ホスト名 remote-mysql.example.com、mysqlを3306でサーブ | ||
+ | |||
+ | sshトンネルの設定 | ||
+ | |||
+ | ssh -f -N -L 33306: | ||
+ | |||
+ | 別のターミナルでリモートのMySQLに接続 | ||
+ | |||
+ | mysql db_name -u mysql_user_name -p -P 33306 | ||
+ | |||
+ | sshをバックグラウンドで動かす(終了後SSHをkillし忘れないように) | ||
+ | |||
+ | ssh -f -N -L 33306: | ||
+ | mysql db_name -u mysql_user_name -p -P 33306 | ||
+ | |||
+ | 自動でkillする方法(sleep 10の場合、10秒以内に接続しないとsshが終了するので注意) | ||
+ | |||
+ | ssh -f -L 33306: | ||
+ | mysql db_name -u mysql_user_name -p -P 33306 | ||
===== テーブルの種類(ストレージエンジン) ===== | ===== テーブルの種類(ストレージエンジン) ===== | ||
* MyISAM - テーブルロック、フルテキストインデックス、Rツリーインデックス、超爆速count、超爆速insert(ただし同時にselectされないこと) | * MyISAM - テーブルロック、フルテキストインデックス、Rツリーインデックス、超爆速count、超爆速insert(ただし同時にselectされないこと) | ||
行 375: | 行 476: | ||
Fulltextインデックスは再構築にも時間がかかるしメンテナンスが死ぬほどめんどくさいのでオススメしない。他の全文検索ライブラリを併用するのがいいだろう。 | Fulltextインデックスは再構築にも時間がかかるしメンテナンスが死ぬほどめんどくさいのでオススメしない。他の全文検索ライブラリを併用するのがいいだろう。 | ||
+ | |||
+ | |||
+ | ===== JSON型カラム ===== | ||
+ | |||
+ | JSONフィールドの値で検索する | ||
+ | |||
+ | <code sql> | ||
+ | where colName->' | ||
+ | |||
+ | where JSON_EXTRACT(colName, | ||
+ | </ | ||
+ |
mysql.1442048913.txt.gz · 最終更新: 2015/09/12 09:08 by nullpon