はじめに 以前MySQLのマネージドサービスを探していたときに「PlanetScale」というサービスを知りました。どうやら単にMySQLを運用しているのではなく、可用性とスケーラビリティを実現したMySQL互換のNewSQLサービスだということを知りました。 そこで興味を持ったNewSQLについて、今回私の理解を整理してみました。間違っている箇所については指摘いただけると嬉しいです。 NewSQLとは NewSQLはRDB(SQL)に対して台頭したNoSQL(キーバリューストアやドキュメント型DBなど)の限界に対する解決策といて登場したと捉えています。そのため最初にNoSQLの限界について整理した方が、その意義が分かりやすいでしょう。 NoSQLの限界 NoSQLはRDB(SQL)に比較して、高い可用性とスケールアウトによる巨大データとアクセス数の増大に対応することを可能にました。シン

はじめにMySQLでibdata1のデータサイズが肥大化していた際の対処法。 今回、とある案件でサーバの調査をしていた際にibdata1のサイズがかなり大きくなっているのに気づきました。100GBを余裕で越すほどの。 これはInnoDBのデータ領域(テーブルスペース)です。 こうなると稼働したままデータサイズを小さくするのは難しく、リストアが必要となります。 事前準備 リストア作業を行う前にデータベースを利用するサービスを停止またはメンテ表示にしてトランザクションがmysqlへ来ないようにしておきましょう。 作業 1.mysqldumpの取得 サービスを停止したら対象となるデータベースのdumpを取得します。 だいたいこういう時はデータサイズが大きいので&をつけて実行しておくと便利です。

以前、MySQLの重さの原因はDNS逆引きだった という記事を書いたのですが、それを読んでmy.cnfにskip-name-resolveを設定したという後輩から「DBに接続できなくなった」という問い合わせを受けました。 話を聞いたところ、MySQLにローカル接続用のユーザを追加するとき、MySQL 権限テーブルに「localhost」と書いたとのこと。 こんな感じ grant all privileges onDB.* to userid@’localhost‘ identified by ‘hogehoge’; 記事にも書きましたが、skip-name-resolveを使うとホスト名の解決を行わなくなりますから当然、ローカル接続も接続元が「localhost」ではなく 127.0.0.1 として扱われます。 なので、MySQLをインストールしたての時など@127.0.0.1なユーザが

skip-name-resolve重要 - kotori::log を見て、実際のところどの程度性能に影響があるのか気になったのでベンチを取ってみた。 ベンチマークスクリプトはhttp://gist.github.com/594839で、connect -> disconnectを1000回繰り返すのにかかった時間を計測。 ■計測結果 環境の詳細は後述するとして、まずは結果から。手動で何回か実行して、結果のボリュームゾーンを感覚的に抽出。 環境 実行時間(秒) skip-name-resolve 1.73 〜 1.74 hosts 1.75 〜 1.76DNS 2.26 〜 2.29 /etc/my.cnfでskip-name-resolveを有効にした場合、確かに速くて、DNSで名前解決するよりも0.5秒ぐらい速くなる。1回あたり0.5msecをどう見るかはケースバイケースだが、DB接
Djangoを使っていて、たまにsyncdb(モデルをデータベースに更新させる作業)をすると、応答がなくなる時があります。MySQLは更新等のバイナリログを残していて、リストア(復旧)しやすいように設計されています。 バックアップ(スナップショット)をどこかの時点でとっておいて、そのあとの流れをバイナリログ等で補完するような運用が考えられます。 一方、更新が多いサービスは、このバイナリログを放置しておくと、データ容量が大きくなりすぎてしまいます。 今回は、この設定を変更して、適切なディスク容量を使えるようにしたいと思います。 応答がなくなるコマンド例(注:すぐデータベースのステータスを確認しましょう。) #python ./manage.py syncdb データベースの容量確認 その場合は利用しているデータベース(MySQL)のステータスを確認してみましょう。 データベースサーバに接続
はじめに 今回はMySQL 8.0について以下の内容を紹介します。 なぜ、バージョン5から8に一気に上がったのか Charsetとは何か Collationとは何か Youtubeでも解説しているので、ぜひ確認してみてください。 【YouTube動画】MySQL8.0MySQLの名前の由来MySQLは共同創設者のMichael Widenius (通称 Monty) さんの長女 Myにちなんで名付けられました。 ちなみに、MySQLをベースに、完全なGPLライセンスにしたMariaDBは、次女のMariaにちなんでいます。 [参考] Why is the Software Called MariaDB?MySQLがバージョンアップで5から8に上がった理由MySQL 6.0はストレージエンジンにFalconを搭載したものを作っていたそうです。 しかし、Falconではなく、InnoD

この記事はMySQL Advent Calendar 2019 11日目の記事です。mysqldumpがFLUSH TABLESでタイムアウトしたので調べたという記録です。 (SQLステートメントや出力結果は一部省略しています) 問題 とある日、スレーブが壊れましてmysqldumpを使ってマスターから復旧しようとしました。 しかし、以下のようにFLUSH TABLESがtimeoutしてしまい、exportできない事象が...MySQL5.7です。 #mysqldump -p --single-transaction --master-data=2 --default-character-set=utf8mb4 --routines --triggers --events --hex-blob --databasesdb > backup.dumpmysqldump: Cou
MySQLのバージョン インストールされたMySQLのバージョンは以下のようになります。 名前 バージョン ダウンロード元 my.cnfサンプル 以下のサンプルを参照して、my.cnfファイルを作成してください。 # このファイルはMySQL 5.6を基準として作られてあります。 # http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html を参照しました。 [mysqld] ##-------------------------------------------------------------------- #mysqldの基本設定 ##-------------------------------------------------------------------- # id は 1 から 2^

MySQLのレプリケーションにはフィルター機能が古くから存在しています。特定のデータベースのみやテーブルのみ、または特定のデータベースやテーブルを除外してレプリケーションさせることが可能です。今回はスレーブにおいて設定できるレプリケーションフィルターの注意点や、バージョンによる変更点を紹介します。 レプリケーションフィルターオプション レプリケーションフィルターを設定するには、以下のオプションをmy.cnfに記述する、またはMySQLを起動する際に引数として記述する必要があります。 replicate-do-db=dbname …レプリケーションするデータベースを指定 replicate-ignore-db=dbname …レプリケーションを除外するデータベースを指定 replicate-do-table=dbname.table …レプリケーションをするテーブルを指定 replicate

MySQL-5.5よりRESET SLAVE;の挙動が変わり、直後にCHANGE MASTER構文を 発行しないと場合によっては問題が発生するとMySQLのドキュメントに記載されていました。 さらに、RESET SLAVE ALL;というクエリもサポートされたようです。 どういう事なのでしょう? 調べてみました。 ドキュメントにさらっと何か書いてある InMySQL 5.6 (unlike the case inMySQL 5.1 andearlier), RESET SLAVE does not change any replication connection parameters such as master host, master port, master user, or master password, which are retained in memory. Thi

(2012.10.15追記)report-hostではなくslave-hostになってたと@ishikawa84gさんから指摘を受けたので修正。 これで、マスターでshow slave hostsコマンドを打つだけで、スレーブの一覧が表示される。 > show slave hosts +----+------+--+----+ | Server\_id | Host | Port | Master\_id | +----+------+--+----+ | 16800111 | nanikano-dbs01 | 3306 | 16800101 | | 16800112 | nanikano-dbs02 | 3306 | 16800101 | | 16800113 | nanikano-dbs03 | 3306 | 16800101 | +----+------+--+----+ repo
MySQLと名前解決MySQLにおいて名前解決は、コネクションの確立・認証のフェーズで利用されます。デフォルト(名前解決が有効)な場合のシーケンスはざっくりと以下のようになります。IPアドレスがMySQL内の名前解決キャッシュに載っているかどうかを確認する (載っていない場合)IPアドレスからホスト名に逆引きをかける(getnameinfo) 得られたホスト名を正引きし、IPアドレスを得る(getaddrinfo)IPアドレスとホスト名の両方を使って、接続元ホストの検証をする(第17回 MySQLのユーザー管理について[その1]の2ページ目を参照) 検証に成功した場合、これ以降の「接続元ホスト」はIPアドレスまたはホスト名の「検証に成功したどちらか一方」を利用する ユーザー名、パスワードなどの認証に進む 名前解決が無効(skip-name-resolveオプションが有効)な場合

MySQLのDB定義を更新する前に、念のためのmysqldump を行うことになり、テーブルロックが発生しないようダンプする方法について調査していました。 正確に理解しきれていない部分もあるのですが、調べた結果を簡単にまとめます。 –single-transactionの使用MySQLのストレージエンジンがInnoDBの場合、mysqldump 時に --single-transaction というオプションをつけることで、ロックを発生させずにダンプができるようです。 –single-transactionとは--single-transaction をつけて実行すると、ダンプ前に REPEATABLE READ というモードが有効になります。 –single-transaction This option sets the transaction isolation mode to

リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く