久しぶりに MySQL を手元の Mac で使おうとしたら Ctrl-r でコマンド履歴が検索できずに面食らった。 MySQL 5.6 では readline ではなく editline を使うから、Ctrl-r が効かなくなったようだ。Stack Overflow によると、次の行を ~/.editrc に追加することでコマンド履歴を Ctrl-r から使えるようになるらしい。 mysql:bind '^R' em-inc-search-prev 実際にこれで動くようになった。ふぅ。

同じ構造を持った空のテーブルを作ります mysql57> SHOW CREATE TABLE t1\G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `num` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `val` varchar(32) DEFAULT NULL, UNIQUE KEY `num` (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 1 row in set (0.00 sec) mysql57> CREATE TEMPORARY TABLE tt1 LIKE t1; Query OK, 0 rows affecte
はじめに ※Jenkinsが悪いわけじゃないです。 現在携わっているプロジェクトではテストの際に Test::mysqld を使用して並列にテストを回してました。 ただ、マスターデータのテストと機能系のテストが t/ にまとまっていて、マスターデータのテストだけをチェックしたいのに、時間がかかるな~ いう理由から マスターデータのテストと機能系のテストを分け、Jenkinでそれぞれプロジェクトを作成回しはじめました。 最初はそれぞれのテストが早くなって、万々歳やーって喜んでいましたが、時々テストが落ちる用になりました。 原因 ログを見ると InnoDB: Warning: io_setup() failed with EAGAIN. Will make 5 attempts before giving up. InnoDB: Warning: io_setup() attempt 1 fa
MySQL Beginners Talk に行って喋ってきました。 初心者向けMySQLの始め方 View more presentations from Masahiro Tomita 匿名ユーザーとか不要なユーザーの削除まわりの話は、手で削除するんじゃなくて mysql_secure_installation を実行すればいいと Twitter で教えてもらいました。手で消すより簡単でミスもないのでいいですね。 あれ、 mysql_install_db したあとにmysql_secure_installationするものだと思ってた。。。 #mysqlbt 2012-05-29 19:36:47 via Echofon Rabbit 私が発表で使っていたプレゼンツールは Rabbit です。 プレゼン中スライド上にツイートが流れていたと思いますが、これも Rabbit の機能です。詳し
(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
2007/ 01 02 03 04 05 06 07 08 09 10 2006/ 01 02 03 04 05 06 07 08 09 10 11 12 2005/ 01 02 03 04 05 06 07 08 09 10 11 12 2004/ 01 02 03 04 05 06 07 08 09 10 11 12 2003/ 01 02 03 04 05 06 07 08 09 10 11 12 2002/ 01 02 03 04 05 06 07 08 09 10 11 12 2001/ 01 02 03 04 05 06 07 08 09 10 11 12 2000/ 01 02 03 04 05 06 07 08 09 10 11 12 1999/ 01 02 03 04 05 06 07 08 09 10 11 12 1998/ 01 02 03 04 05 06 07 0
夜中に眠いのに master のディスク容量がいっぱいで、でも binlog 用のスペースがない slave たちはまだ明日起きてから対応するんでも間に合うとき。よくありますよね。 ほっといてエラーになるよりかはその場しのげる方がマシ 多少サービス止めるなり i/o 負荷が高くてもいいから何とかしたい 根本的には master 切り替えるしかない だが、そこまで元気がない そんなとき、いままで mysqlbinlog と格闘しながら pos のコピペに注意しつつやってたんですが、 show binlog events という便利コマンドがあることを今更知ったメモです。 基本的な方針 master から絶対に読み込みがないデータを消して、延命することにします。しかし innodb だったりするので単に delete しても容量は減りません。 そこで、えいやとアプリを止めて (or table
こんなんできたのね・・・。 ORDER BY created_at IS NULL ASC, created_at ASC たとえばこんなデータで試すと… CREATE TABLE unchicchi ( id INT(1), created_at DATETIME ); INSERT INTO unchicchi ( id, created_at ) VALUES ( 1, '2010-05-17 15:29:00' ), ( 2, '2011-05-17 15:29:00' ), ( 3, '2012-05-17 15:29:00' ), ( 4, NULL ), ( 5, NULL); これを created at 昇順で取得すると NULL が先にきてしまう。 SELECT * FROM unchicchi ORDER BY created_at ASC; +----+------
XtraBackupとは Percona社 が開発しているオープンソースのMySQLのバックアップツールです。InnoDB, XtraDBとMyISAMストレージエンジンをブロックすることなくバックアップをする事が出来ます。ライセンスはGPLv2で無料で使えます。 MySQLのバックアップ方法としてよく使われているmysqldumpというツールが有りますが、 大量のデータを保存しているデータベースからダンプしたデータをリストア(復旧)する時に非常に時間が掛かってしまうという欠点があります。 ここでは、mysqldumpとXtraBackupを使ってバックアップを取り、両者のバックアップとリストアのスピードの違いを比較してみます。 使用するサーバは以下の通りです サーバ さくらのクラウド プラン8 CPU仮想4コア メモリ24GB HDD100GB OS CentOS 5.7 64bit M
TIPSです。このようなテーブルがありまして、 CREATE TABLE `link` ( `id1` int(11) NOT NULL DEFAULT '0', `id2` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id1`,`id2`), KEY `ix1` (`id2`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;データは以下のような感じで、このときは2,900万レコードありました。 +---------+---------+ | id1 | id2 | +---------+---------+ | 5 | 69 | | 5 | 1022 | | 5 | 1487 | … | 1081 | 2021414 | | 1081 | 2087813 | | 1082 | 11 | | 1082 | 225
以前、MySQLの重さの原因はDNS逆引きだった という記事を書いたのですが、それを読んでmy.cnfにskip-name-resolveを設定したという後輩から「DBに接続できなくなった」という問い合わせを受けました。 話を聞いたところ、MySQLにローカル接続用のユーザを追加するとき、MySQL 権限テーブルに「localhost」と書いたとのこと。 こんな感じ grant all privileges on DB.* to userid@’localhost‘ identified by ‘hogehoge’; 記事にも書きましたが、skip-name-resolveを使うとホスト名の解決を行わなくなりますから当然、ローカル接続も接続元が「localhost」ではなく 127.0.0.1 として扱われます。 なので、MySQLをインストールしたての時など@127.0.0.1なユーザが
MySQLのバージョンアップ MySQL 4.0 までは、3.X から 4.0 に upgrade しても、なんの影響もなくそのまま古いデータ(/var/lib/mysql)を使えました。 ダンプ→リストア不要、「ALTER TABLE」も不要。 4.1 以上にupgradeするときは、日本語キャラクターセットを使っている場合、注意しなくてはならない点が複数存在します。 4.0→5.0 追加機能 詳細: http://lists.mysql.com/mysql-ja/262 http://www.klab.org/media/mysql/ - ストアドプロシージャ、ストアドファンクションを実装 - トリガーを実装 - ビューを実装 - サーバサイドカーソル機能を実装 - 情報スキーマを実装 - XA 分散・トランザクションの実装 - HEAP(MEMORY) テーブルのインデックスに、BT
MySQLレプリケーションの実装にあたってはバイナリログの存在が不可欠。 そしてスレーブ側マシンにおいてはリレーログが不可欠である。 レプリケーションの処理におけるバイナリログとリレーログの相関について、 今一度まとめてみた。簡単に書くと以下のようになる。 マスタ側の更新系のクエリが、マスタのバイナリログに記録される。 ↓ ↓ ↓ スレーブのI/OスレッドがマスタのBinlog Dumpスレッドに接続し、 マスタのBinlog Dumpスレッドはバイナリログの内容を送信する。 ↓ ↓ ↓ スレーブのI/Oスレッドは、受け取ったマスタのバイナリログをリレーログに保存。 ↓ ↓ ↓ スレーブのSQLスレッドがリレーログからクエリを読み取って実行。 リレーログの挙動について今ひとつ理解していなかったのだが、オフィシャルサイト に以下のように書いてある。 リレーログはバイナリログと同じ形式なので、
やぁ。可愛いアイコンでお馴染みの@nekokakだよ。 mysql-casualとか言ってるけどカジュアルな記事が@oinumeさんくらいしかないよね。 ドン引きだね'`,、('∀`) '`,、 ということでガクンと敷居を下げようって感じで超絶カジュアルな話をしてみようと思うんだ。 カジュアル運用していると、「あれなんかこのテーブルまじレコード数おおすぎね?」 とかあるあるですよね。 そこでカジュアルにcountして見るわけです。 InnoDBのテーブルになのにそれもmsaterに対して。 カジュアルですね。 mysql> select count(*) from accesslog; +----------+ | count(*) | +----------+ | 11676738 | +----------+ 1 row in set (1 min 36.99 sec)1分半くらいかか
これはMySQL Casual Advent Calendar 2011 - MySQL Casualの9日目の記事です。 こんばんは。#さとし です。 たまにしか使わない関数や構文ってド忘れすることありますよね。 「LOAD DATAってどう書くんだっけ?」「文字列結合の関数ってなんだったかな?」 あるあるです。 記憶があいまいであれば MySQL リファレンスマニュアル をGoogleカスタム検索するのがいいでしょう。残念ながらdev.mysql.comの検索機能はアレなので。たとえばGoogle Chromeを使っているなら、アドレスバーを右クリックして『検索エンジンの編集...』を選び、以下のように登録しておくといいですね。 名前MySQLキーワードm検索用URLhttp://www.google.co.jp/search?q=site%3Adev.mysql.com%2Fdoc%
MySQLのバイナリログのローテーションの最大値は、初期値は1GBです。 16.1.2.4. Binary Log Options and Variables Default 1073741824 最小は4096bytes、最大は1GB(初期値)とのことです。 変更したい場合、my.cnfのmax_binlog_sizeで変更します。 バイト単位とメガバイト単位で設定する方法は以下のとおりです。 バイト単位で指定する場合 200MBに変更する場合 vi /etc/my.cnf max_binlog_size = 209715200 つぎはメガバイト単位で設定する方法です。 メガバイト単位で指定する場合 200MBに変更する場合 vi /etc/my.cnf max_binlog_size = 200MMBでも指定できるので、便利です。 設定確認 設定を確認してみましょう。 #mysql -
予想以上の効果がでたので記事に残します。 DBの情報を元に統計を行うSQLとプログラムの性能改善で、複合INDEXを試してみました。 MySQLは、4.2です。 対象となったSQLは複数ありますが、そのうちほとんどは4つのテーブルをJOINしています。取得条件を変えながら情報を取得し、最後に目的別に合算するっていうことをやっています。4つのテーブルのうち3つはデータ数200万オーバー、1つは100万オーバー。 最初は、こんな状態 +----+-------------+-------+--------+----------------------------------------------+ | id | select_type | table | type | Extra | +----+-------------+-------+--------+-----------------
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く
{{#tags}}- {{label}}
{{/tags}}