前置き ・パラメータ名がハイフン表記か、アンダースコア表記か常に意識しておく必要有 ・初めてMySQLを起動する前に設定すべき 後でも直せなくはないが、苦行 また、mysql/performance/sysスキーマをalter文で変更するの怖い(一部放置している…) 前提 ・MySQL5.7/8.0におけるmy.cnf(Linux)/パラメータグループ(AmazonRDS)での設定を考慮 ・文字コードはutf8mb4、照合順序はutf8mb4_general_ciに設定 ・データベースのことをスキーマ、MySQLサーバーのプロセス全体をサーバーと記述する 文字コード 1.文字コードとは ・みんな大好き文字コードのため割愛 ・MySQL5.7も8.0もutf8mb4が無難 (cp932で保管しないといけないシステムもあるであろうが…) 2.文字コードに関するパラメータ 2.1.charact
MySQL で文字コードを utf8mb4 を使うことになったので、照合順序を決めるための自分用メモです 巷にたくさん記事はあるけど、現時点(2021/03)でまとめておきたかった 条件 MySQL バージョン: 8.0.22 OS: MacOS クライアント: MySQL Workbench 確認手法 次のクエリを実行する。照合順序だけ変更して確認 SELECT 'はは' <> 'ハハ' COLLATE utf8mb4_bin, 'びょういん' <> 'びよういん' COLLATE utf8mb4_bin, 'はは' <> 'ぱぱ' COLLATE utf8mb4_bin, 'ハハ' <> 'ハハ' COLLATE utf8mb4_bin, 'A' <> 'a' COLLATE utf8mb4_bin, '🍣' <> '🍺' COLLATE utf8mb4_bin ;
MySQLではcharacter set(以後、charset)やcollationをグローバル、データベース、テーブルやカラムレベルで設定することができます。今回はMySQLのデフォルトcollationの注意点を紹介したいと思います。使用するMySQLのバージョンは8.0.26です。 charsetやcollationとはなにかについては説明はしません。よって、charsetやcollationについてご存知ない方は、先にマニュアル「第10章 文字セット、照合順序、Unicode」をご確認ください。 charsetやcollationの各レベルの設定方法 グローバル 以下のシステム変数を設定します。 character_set_server… サーバーのデフォルトのcharset collation_server… サーバーのデフォルトのcollation データベース CREATE
こんにちは。クラウド運用チームの飯塚です。 私たちは cybozu.com 本番環境の MySQL を昨年末から順次 8.0 系へアップグレードしており、前回の定期メンテナンスにおいて全てのインスタンスのアップグレードを完了しました。この記事では、私たちが MySQL 8.0 への移行に取り組んだ理由と必要になった対応について紹介します。 なぜ MySQL 8.0 へ移行したのか GTID-based レプリケーションにおける制限の緩和 再起動時に AUTO_INCREMENT のカウンタが巻き戻る問題の解消 実際に対応が必要だった MySQL 8.0 の変更点 utf8mb4 の照合順序のデフォルト値の変更 SQL_CALC_FOUND_ROWS と FOUND_ROWS() が deprecated に Connector/J のメタデータ取得処理の性能低下 sys.innodb_lo
このエントリーは MySQL Advent Calendar 2020 の 12/7 のエントリーです。 照合順序(COLLATION)とは 照合順序は文字列の比較やソート順のルールのことです。各キャラクタセットごとに照合順序が定義されています。 -- SHOW COLLATIONS で一覧が見れる mysql> SHOW COLLATIONS; +----------------------------+----------+-----+---------+----------+---------+---------------+ | Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute | +----------------------------+----------+-----+-------
環境 AmazonLinux AMI release 2014.03 MySQL 5.5 OpenSSL 1.0.0 MySQLのインストール パッケージでのインストール mysql> show variables like '%ssl%'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_key | | +---------------+----------+ 7 rows in set (0.00 sec) $ openssl ge
はじめに 昨今のWebサービスでは常時SSL/TLS化が当たり前となっています。 HTTPだけに限らず、リモートとの通信をする場合はできる限り暗号化して、セキュリティを高めていきたいところです。 そこで改めてMySQLでSSL/TLSについて確認してみます。 現在では脆弱性等の問題でSSLを使用することはないと思いますが、便宜上まとめてSSL/TLSと表記します。 SSL(Secure Socket Layer)/TLS(Transport Layer Security) まず簡単にSSL/TLSの概要として 【暗号鍵を使いデータを暗号化し、メッセージ認証コードを使用し改ざんを検出し、デジタル署名で正当な相手との通信をする】 というものになるかと思います。 これらによって下記のようなセキュリティ向上が期待できます。 (自己署名証明書ではその限りではありません) 盗聴を防ぐ データの書き換え
<景品表示法に基づく表記> 本サイトのコンテンツには、商品プロモーションが含まれている場合があります。 この疑問に回答します。 私はCentOSを利用してApacheをインストールしています。OSの違いによりパッケージ管理のコマンドが違いますが、Apacheには直接関係ありません。Debian系のディストリビューションを利用している場合は、パッケージコマンドを読み替えてください。 MySQLパッケージのインストールepel リポジトリMySQL本体とは直接関係ありませんが、よく利用するパッケージを多く含んでいるので忘れずにリポジトリを追加しておきましょう。 # dnf install epel-release MySQLのインストールMySQLをインストールします。 # dnf install mysql-serverあとはMySQLサービスの起動と、自動起動設定を行います。 # syst
Ubuntu 20.04 LTS が、2020年4月24日にリリースされた。 先日の記事では Ubuntu 18.04 LTS Server からのアップグレードだったが、新規に「Ubuntu 20.04 LTS Server」をインストー... 準備 MySQLサーバとクライアントツールのインストール $ sudo apt install mysql-server mysql-client サービスの起動確認 $ sudo service mysql status ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020
スロークエリは、アプリケーション側のボトルネックとしてよく現れる、処理速度が遅いSQLです。意図せずフルスキャンをしているケースが多く、データ件数が増えるにつれて急激に性能問題を引き起こします。負荷テスト実施時には1秒以上かかるものは把握しておくとよいでしょう。 スロークエリへの対処は次の3ステップで行います。 スロークエリを特定する スロークエリを解析する スロークエリを改修する MySQL、PostgreSQL、Oracleなど複数のRDBMSがありますが、基本的な流れは共通となります。 この記事では、MySQL8を対象に3ステップについて解説します。 1.スロークエリを特定する スロークエリの設定確認 「show variables」コマンドで確認を行います。 mysql> show variables like 'slow_query%'; +-------------------
こんにちは!エンジニアの福間(fkm_y)です。 先日、弊社でデータベースの技術顧問をして頂いてる三谷(mita2)さんに開発部向けのMySQLロックのデータベース勉強会を実施したのでそのレポートをお伝えします。 開催背景 弊社では三谷さんによるデータベース勉強会を定期的に開催しています。以前にもロックに関するMySQL勉強会を開催していたのですが、1年半経過しており参加していない開発メンバーのほうが多くなっていたことやプロダクトの成長によりデッドロックなどのロックに起因する問題が目立ち始めていたことから増強版のMySQLロックのデータベース勉強会を開催することになりました。 概要 データベースのロックについて ロックタイムアウトについて デッドロックについて まとめ データベースのロックについて なぜデータベースにロック機構があるのかから知ることが重要です。性能と安全性を両立するためにあ
2021/05/24 サイボウズ開運研修 動画が以下のサイトからリンクされています - https://blog.cybozu.io/entry/2021/07/20/100000 - これに矢印を書きながらぐりぐりやっていたわけなので、資料単体だとわかりづらいと思います…
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろうkeroyonn
InnoDBはクラスタインデックスという構造になっている。今日はクラスタインデックスがどういうことかということを、皆さんに理解して頂きたい。もっとも理解して頂きたいポイントは「セカンダリインデックスのリーフノードには主キーの値が含まれている」ということだ。 主キーの構造InnoDBの主キーは次の図のように「データが主キーのリーフノードに含まれる」という構造になっている。このような構造をクラスタインデックスという。 このような構造になっていることには利点と欠点があるが、大きな利点は主キーの値で検索をすると非常に高速だということだ。主キーのリーフノードにたどり着いたときには、既にデータのフェッチも完了している。データとインデックスが別々に格納されているタイプのストレージエンジンでは、インデックスからデータの位置を読み取って、その後データファイルからデータをフェッチする。このように二段階の操作が
2008年09月03日00:53 MySQL MySQLのLEFT JOIN, RIGHT JOIN, INNER JOINの自分用まとめ MySQL の LEFT JOIN, RIGHT JOIN, INNER JOIN について、ちょっと混乱することが多いので自分用に簡単にまとめてみます。まぁ、タイトルのまんまです(・∀・;) まず、テスト用のテーブル (test1, test2) を用意します。 CREATE TABLE test1 ( test_id VARCHAR(255) PRIMARY KEY, hoge VARCHAR(255) ); CREATE TABLE test2 ( id INT PRIMARY KEY AUTO_INCREMENT, test_id VARCHAR(255) NOT NULL, fuga VARCHAR(255) ); テーブルの中身はこんな感じ
perl の DBI で utf8 な文字列を扱う場合には、 接続時に、 $dbh->do('set names utf8'); と指定するが、 DBIx::Skinny でこれ相当のことをやるには、Model で次のように定義すればそさそう。 package MyApp::Model; use strict; use warnings; use DBIx::Skinny connect_info => +{ dsn => 'dbi:xxx', username => 'xxxx', password => 'xxxx', connect_options => { mysql_enable_utf8 => 1 } on_connect_do => [ 'SET NAMES utf8', ] }; on_connect_do で指定するのは、ドキュメントにも書いておらず、 ソースを見ないとわ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く