Blog Archives

MySQLのバイナリーログからデータ更新過程を確認したい

CMSなどで同じ記事が何度も更新されたとして、DBにある最終形は別にして、記事が更新された過程を知りたいといことがまれにある。この過程をバイナリーログ(binlog)から復元する方法を RDS MySQL 固有の動きを中心にメモ。 環境は データベースは RDS 版 MySQL(5.6) クライアントは EC2 上の Amazon Linux バイナリーログの用途 バイナリーログはテーブルへの更新を連続的に記録するもので レプリケーション 差分バックアップ/リストア などで利用することが可能。 binlog の中を覗いてみる 次にメインの binlog を覗いてみる。 binlog を確認 MySQL に接続して show binary logs コマンドで確認する。 binlog をローカルに落とす binlog のファイル一覧を確認したところで、binlog ファイルをローカルに落として中身を確認する。 あとはファイル内のレプリケーション用SQLからお目当てのSQLを探し当てれば OK。 リカバリ目的などで生の

Tagged with: ,
Posted in database

MySQLのauto_incrementについてメモ

MySQL には Oracle/PostgreSQL の sequence にあたるものがないので、自動採番するときはカラムを auto_increment にする。 http://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html auto_increment の指定 初期値の指定 デフォルトでは 1 から採番される。 ALTER TABLE で AUTO_INCREMENT の初期値を指定する AUTO_INCREMENT カラムの最大値より小さい値を指定した時は無視されるので注意が必要。 初期値は CREATE TABLE 時に指定することもできる。 初期値、増加幅を指定 Oracle/PostgreSQL は create sequence test_seq start with 5 increment by 10;とすると、初期値が 5 で

Tagged with: ,
Posted in database

MySQLのLIKEが遅い

検索ボックスから入力すると WHERE column_name LIKE “%foo%” というような部分一致検索する機能があり、この処理が非常に遅い。 % で始まる LIKE はインデックスを使えないから。 データベースが MySQL 5.1(InnoDB) の場合に、これをはやくするアプローチを考えてみる MySQL の設定を見直す 設定がデフォルトのままだったら、チューニングする。 ベースとなる設定 http://blog.nomadscafe.jp/2012/10/mysql-mycnf-github.html SQL を見直す explainで実行計画を確認し LIKE 以外の箇所で改善点がないか見直す。 今回のケースでは、サブクエリーがフルスキャンしていたので、インデックスを追加して3000倍達成。 前方一致検索にする インデックスが使えるように、部分一致検索(LIKE “%foo%”)はやめて前方一致検索(LIKE “foo%”)にする 完全一致や前方一致で十分なのに、無意味に部分一致になっている箇所があれば完全/前方一致にする。 要件によってはどうしても部分一致が必要ということもあるので、ケースバイケース フルテキスト検索を利用 MySQL の Full-Text Search を利用する 残念なことに、この機能はストレージエンジン MyISAM に対して提供されてきた機能で、InnoDB

Tagged with:
Posted in database

MySQL:レプリケーションでエラーステートメントの実行を無視する

MySQL のステートメントベースレプリケーション(SBR)で、エラーの起きているステートメントの実行を飛ばすには、スレーブで以下の作業を行う AWS RDS ではストアドプロシージャ rds_skip_repl_error を呼ぶ 実行例 MASTER 側で実行すべき CREATE TABLE 文を SLAVE 側で実行し、そのあと MASTER でも実行してしまい、レプリケート時にエラーが発生したケースを考える。 (このようなケースは IF NOT EXISTS で CREATE TABLE するとか SLAVE は READ-ONLY にするとかで回避できるけど) CREATE TABLE の実行に失敗し、SLAVE_SQL_Running, Last_Error, Last_SQL_Error あたりからエラーが起きていることがわかる SQL_SLAVE_SKIP_COUNTER で問題のステートメントを 1 文だけスキップする。 レプリケーションエラーが起きていないことを確認 References

Tagged with: , , ,
Posted in database

FlywayでDBスキーマのマイグレーションをしてみた

Background 突然引き継ぐことになった案件では、フレームワークにデータベースマイグレートの仕組みがなく、 ORM も使っていなかったので、後付でデータベースマイグレーションを用意してあげる必要があった。 Java で書かれた Flyway を使うと、いくつかのルールを覚え、ベタの SQL を書くだけで、運用で発生する基本的なマイグレートを実現出来たので、使い方をメモ。 環境 Ubuntu 10.04 MySQL 5.1 Flyway 2.2.1 Java(JDK7) Flyway は Java のコードから呼び出せたり、 Ant/Maven/Gradle といったツールと連携出来たりと jvm 系エコシステムと親和性が高い。今回は、非 Java システムということと、僕自身 Java には疎いので、コマンドライン版の Flyway を利用。 Installation Install Java flyway は Java で書かれているので Java

Tagged with: , ,
Posted in database

[MySQL]ERROR 1418:MySQL’s deterministic function

MySQL で Error 1418 発生 社内環境で検証した MySQL のストアドファンクションをお客さんの環境に引っ越そうと CREATE FUNCTION  を実行すると次のエラーが発生した ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe

Tagged with: , , ,
Posted in database

[MySQL]ERROR 1206: The total number of locks exceeds the lock table size

INSERT 文でエラー発生 MySQL 5.0 で少し重めの INSERT 文を走らせていると、“ERROR 1206 (HY000): The total number of locks exceeds the lock table size” に出くわした。 MySQL のログには次のように出力されていた。 110929 12:41:38 InnoDB: WARNING: over 67 percent of the buffer pool is occupied by InnoDB: lock heaps or

Tagged with: , ,
Posted in database
Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 5 months ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 6 months ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 6 months ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 11 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 1 year ago