この記事はGMOペパボ Advent Calendar 2017の13日目の記事です。 最近まで取り組んでいたこととして、10年以上ペパボを支えてきたサービスの一部Webアプリケーションにおいて、PEAR::DBの使用をやめて、PDOの使用に変更するというものがありました。 この記事では、取り組みの動機や、どのようなアプローチを採ったのか、また、そこから得られた知見などを紹介します。おそらく、相応に老舗であるPHPアプリケーションでしか、PEAR::DBと向き合う機会はないと思われますので、万人向けの記事ではないことを予めお断りしておきます。 動機と背景 まずはじめに、PEAR::DBとPDOについて、簡単に触れたうえで、今回の取り組みの動機と背景について整理します。 PEAR::DBとは PEAR::DBとは、PEARで提供されているデータベース抽象化のためのライブラリです。PEARのサ
MySQL 8.0 では、テーブル全件に対するSELECT COUNT(*)がパラレルスキャンによって高速化されましたが、MySQL 5.7 以前よりも遅くなるケースが発生したので、少し調べてみました。 テストの内容 インスタンスを再起動してバッファプールをクリアした状態から、3 つあるテーブルの全件SELECT COUNT(*)を続けて実行し、実行時間を計測 ①〜④ ではテストデータのサイズ>バッファプールのサイズ ⑤ ではテストデータのサイズ<バッファプールサイズ テストケースは 5 つ ①:test_short[1]→test_long[2]→test_long_uk[3]の順に、SELECT COUNT(*) FROM テーブル名をそれぞれ 10 回以上連続で実行する test_short→test_long→test_long_ukを 1 セットとして 10 回繰り返すのではなく
2021年9月、当「稲葉サーバーデザインWebサイト」のWebサーバーを、CentOS 7からRocky Linux 8に移行しました。 ※うちは会社ではないので、厳密には「自社」ではないのですが、便宜上の表現として「自社」としています。 CentOS から Rocky Linux への切り替え手順については、マイグレーションツールを実行するだけで特に難しくはなく、既にネット上に多くの情報があるので、詳しくは記載しません。 ここでは、Rocky Linux の選定理由と、マイグレーションツールを使用した CentOS 8 から Rocky Linux 8 への切り替え時に発生した現象やわかったことなどを記載します。 Rocky Linuxの選定理由 CentOS 8は、2021年12月でサポートが終了するため、サーバーの運用を継続する場合は、移行先のOSディストリビューションを検討する必要
概要 この記事では、MySQLでのSQLクエリのパフォーマンスを最大限に引き出すための効率的な書き方を解説します。アプリケーションの応答速度を向上させることは、ユーザーエクスペリエンスの大幅な改善に直結します。この記事を通じて、初心者から中級者のデータベース管理者や開発者は、SQLクエリの基本から高度な最適化テクニックまで、幅広い知識を習得できることを目指しています。 MySQL 8.0での検証を基にしていますが、その他のバージョンでの動作は保証されません。この記事は継続的に更新されます。 主な内容 このセクションでは、検証データの作成手順を含め、インデックスの利用、JOIN操作の最適化、サブクエリとビューの利用、クエリキャッシュの活用など、効率的なクエリの書き方について解説します。 検証データの作成 MySQLサーバーへの接続方法から始め、テスト用データベースとテーブルの作成、ダミーデー
AWS re:Invent 2022 にて RDS の Blue/Green が発表されたことを受けて、この辺の具体的な運用をどのように改善できるのか考えていきます。 たいした内容ではないですが、丁寧に最適化して慣れれば、それなりに強い効果を発揮できそうな感じはあります。 ALTER TABLE の辛み まず復習からですが、RDS に Blue/Green が実装されるほど辛い運用はなんだったかというと、重い ALTER TABLE にあります。 ALTER には色々あるのでアレですが大雑把に言うと、容量や行数が大きいテーブルに対して実行すると、数時間単位~の処理時間がかかることが多く、しかもパッと見で進捗を把握できないという問題を抱えていました。それに対して色んな対策を取っていたと思います。例えば…… Handler_write SHOW GLOBAL STATUS LIKE ‘Hand
サービスの急成長は嬉しいお知らせですが、その反面機能追加時のALTERがどんどん大変に。普通にALTERを行うと、メンテナンス時間何時間とったら、良いのかわからないですよね。1時間程度のメンテナンス時間で、RDS上のデカイテーブルをALTERする方法を紹介します。 戦略 1.リードレプリカを追加する 2.オンラインでリードレプリカにALTER文を実行 3.レプリケーションがおいつたタイミングで、アプリケーションの向き先をリードレプリカに変更 4.リードレプリカをマスターに昇格させる 手順 1.リードレプリカに書き込み権限を与える デフォルトの状態では、「Parameter Groups」のread_onlyが{TrueIfReplica}になっているので、これを「0」にします。この変更は再起動なしで各インスタンスに適用されるのでで、間違って「1」にしてMasterへの書き込みが止まらないよ
MariaDB 10.4 (XAMPP) で「Got error 176 "Read page with wrong checksum" from storage engine Aria」への対応記録 2020.3.9 MariaDB はじめに XAMPP を起動して、ローカル環境で開発をしようと思ったら、急にデータベースへの接続ができなくなりました。 そして phpMyAdmin で当該データベースの特権を確認しようとしたところ、下記エラーが出ました。 Got error 176 "Read page with wrong checksum" from storage engine Aria 調査しても明確な解決方法は見つからなかったのですが、とりあえず解決はしたのでその手順を紹介します。 ただし、下記手順により各データベースの特権情報がリセットされました。 (ユーザー情報は残っていまし
MySQL は、あるリリースシリーズから次の上位リリースシリーズへのレプリケーションをサポートしています。 たとえば、MySQL 5.6 を実行しているソースから MySQL 5.7 を実行しているレプリカ、MySQL 5.7 を実行しているソースから MySQL 8.0 を実行しているレプリカなどにレプリケートできます。 ただし、ソースがステートメントを使用しているか、レプリカで使用されている MySQL のバージョンでサポートされなくなった動作に依存している場合、古いソースから新しいレプリカにレプリケートするときに問題が発生することがあります。 たとえば、64 文字を超える外部キー名は、MySQL 8.0 からサポートされなくなりました。 複数のソースを含むレプリケーション設定では、ソースまたはレプリカ MySQL サーバーの数に関係なく、複数の MySQL Server バージョンの
弊社で利用しているMySQLのバージョンをMySQL5.7からMySQL8にアップグレードを行いました。その際に Blue/Green Deploymentsを使って実施する際にに調べた事をまとめて紹介したいと思います。 Blue/Green Deploymentsとは 制限事項 公式情報 検証した方々の情報 実際に検証をしてみてわかったこと 検証を踏まえて、実施する際にチェックする箇所 まとめ Blue/Green Deploymentsとは 現状の本番環境(Blue)を別に新しい本番環境(Green)を構築した上で接続先を切り替えるなどして新しい本番環境をリリースする運用方法です。 利点として システムのダウンタイムを短くできる ロールバックが容易 が挙げられます。 Amazon RDS Blue/Green Deploymentsの仕組みとしては、本稼働環境(以下Blue環境)と本稼
こんにちは。ソフトウェアエンジニアの坂井 (@manabusakai) です。 カミナシでは RDB に Amazon Aurora MySQL 2(MySQL 5.7 互換)を使っています(以下 Aurora MySQL と略します)。 ある日、社内の Slack で「𠮷」などの文字列が登録できないのではないかという話が出ました。これを聞いて「あー」と思った方も多いでしょう。 MySQL で有名な UTF-8 の 4 バイト文字問題で、歴史的な理由から MySQL 5.7 以前では utf8 の文字セットは utf8mb4 ではなく utf8mb3 を指しています。 dev.mysql.com カミナシのアプリケーションは 4 バイトの文字列が入力された場合はシステムエラーを返す実装になっていますが、エラーの内容をユーザーにわかりやすく伝えることは難しいためユーザー体験としても良くない
昨日、とある方から電話があり、私が書いたアプリが動作しなくなった(エラー終了する)というのです。Linux(Ubuntu)上でMySQLサーバーが動作しており、Windows10パソコンからMySQLサーバーにアクセスするというシステムで、Windows10側のアプリはVB.NET 2019で書いています。 今日、電話で詳しく状況を確認すると、Windows10パソコン側でMySQL Workbenchを使ってMySQLにアクセスすると正常にデータベース(テーブル)にアクセスできるというので、ネットワークを含めハードウェアは正常に動作しており、データベースも正常に動作しているようです。 電話では、これ以上のことは分からないと判断し、詳しい状況確認のために、岡山市内まで車を走らせました。VisualStudioを使ってVB.NETアプリを起動してみると、Character set 'utf8
2021/4/20 にリリースされた MySQL 8.0.24 について私が気になったものについて。 まあ文字コードまわりだけなんだけど。 utf8 を utf8mb3 として出力する Client applications and test suite plugins now report utf8mb3 rather than utf8 when writing character set names. (Bug #32164079, Bug #32164125) Important Note: When a utf8mb3 collation was specified in a CREATE TABLE statement, SHOW CREATE TABLE, DEFAULT CHARSET, the values of system variables containing c
メジャーバージョンのアップグレード 商用環境への適用前に、いずれのアップグレードも徹底的にテストすること。 メジャーバージョンアップグレード中、必要に応じて RDS によって MySQL バイナリ mysql_upgrade が実行され、テーブルがアップグレードされます。 メジャーバージョンアップグレード中、RDS によって slow_log および general_log テーブルが空にされます。これらのログ情報を保持するには、メジャーバージョンアップグレードの前にログファイルの内容を保存する。 通常は約 10 分で完了するが、インスタンスタイプによる。 MySQL 5.7 から 8.0 へのアップグレードの事前チェック MySQL 8.0 には 5.7 との非互換性がいくつかある。 MySQL 5.7 から 8.0 へのアップグレードをスタートすると、RDS では、これらの非互換性を検
AWSからRDSのバージョンアップをしろという通知が来た。 MySQL5.7 のサポートが終わるから8系にしてね、更新しない場合は自動的に更新しちゃうよと。 今回はブルー/グリーンデプロイ方式でバージョンアップを行った。 (1)手順1 対象のDBを選択し、「ブルー/グリーンデプロイの作成 – 新規」から後は普通にやればOK。 ブルー ⇒ 既存のMySQL 5.7.38 グリーン ⇒ 新しいMySQL 8.0.34 が出来上がる。グリーンの方は read only として作られた。 所要時間30分程度。 (2)手順2 ステージング環境のWebアプリのDB接続先をグリーンの方に向けて動作確認 (3)手順3 OKなら「切り替え」を行うことで、グリーンがブルーになる。 アプリケーション側は何もする必要なし。 所要時間5分程度。 (4)手順4 本番環境で動作確認。 ※※ 注意!! ※※ ついでにRD
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 内容 RDS AuroraのMySQLのバージョンをAurora2(MySQL5.7) ⇒ Aurora3(MySQL8.0)にアップデートする際、先日のre:Invent 2022で発表された「RDSのBlue/Greenデプロイ」という新しい機能を使用してみました。 今回その手順と、詰まったポイントをまとめていきたいと思います。 添付画像の網掛けが多い点はご容赦ください。 目次 Blue/Greenデプロイの概要 手順 スナップショットを取得 Blue/Greenデプロイの作成 GreenのDBに変更を加える 変更を加えたgreen
こんにちは! スターフェスティバルでインフラエンジニアをやっております @koonagiです。 早いことにもう1月も終わりますね。 1月のうちにブログを書こうと思っていたら、あっという間に終盤になってしまっていて急いでこの記事を書いていますw さて、先月のre:Inventでリリースされた Amazon RDS Blue/Green Deployments について、最近検証したのでそのことについて書いていこうと思います。 Aurora v1(MySQL 5.6)が2月末でサポート終了となるため、Aurora v2(MySQL 5.7)へのバージョンアップの際にAmazon RDS Blue/Green Deploymentsを活用しようと考えており、事前準備として検証を進めました。 Amazon RDS Blue/Green Deploymentsとは 公式からの引用です。 ブルー/グリ
新しいバージョンのデータベースエンジンが Amazon RDS でサポートされている場合は、DB インスタンスをその新しいバージョンにアップグレードできます。MySQL データベースのアップグレードには、メジャーバージョンのアップグレードとマイナーバージョンのアップグレードの 2 種類があります。 メジャーバージョンのアップグレード メジャーバージョンのアップグレードには、既存のアプリケーションとの下位互換性のないデータベースの変更が含まれる場合があります。そのため、DB インスタンスのメジャーバージョンアップグレードは手動で実行する必要があります。メジャーバージョンアップグレードをスタートするには、DB インスタンスを変更します。メジャーバージョンのアップグレードを行う前に、「RDS for MySQL のメジャーバージョンのアップグレード」の手順を実行することをお勧めします。 マルチ
MySQLのテーブルで文字コードutf8とutf8mb4が混在するシステムをutf8mb4に統一する機会がありました。 そんな時に文字コードや照合順序を確認する方法、変換する方法です。 MySQL:5.7 データベースの文字コードと照合順序を確認する SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'データベース名'; テーブルの文字コードと照合順序を確認する SELECT TABLE_NAME, TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'データベース名'; カラムの文字コードと照合順序を確認する
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く