・・・という話を、いつもならこちらの日記に書いているのに、
うっかり、あちらの日記に書いてしまいました。
ということで、以下URL。 ご笑覧くださいませ。
たとえばこんなエラーログ。
140603 10:05:58 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000032' at position 61352894, relay log './mysql-relay.000787' position: 21485832
140603 10:05:58 [Note] Slave I/O thread: connected to master 'replicator@xxx.xxx.xxx.xxx:3306', replication started in log 'mysql-bin.000032' at position 61352894
140603 10:05:58 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236)
140603 10:05:58 [ERROR] Got fatal error 1236: 'Client requested master to start replication from impossible position' from master when reading data from binary log
140603 10:05:58 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.000032', position 61352894
START SLAVEしたタイミングでこんなんが出ることがあります。
…
今ふっと2年くらい前にInfobright調べてたことを思い出しましたが気にしない。
Infobrightが今どうなったのかは知りませんが、InfiniDBは去年くらい(4.0)から「商用版とオープンソース版のコードベースが統合され、機能制限がなくなった(同じ機能が使える)」と前々から聞いていたので、GPL版だと変にコア数の制限を受けたりするInfobright使うぐらいならInfiniDBかなと思って。
昔は www.calpont.com (Calpontって会社がInfiniDBを作ってた)
だったものの、今はInfiniDB社になったっぽく、URLは http://infinidb.co/ にリダイレクトされる。
ダウンロードページにいってプラットフォームを選ぶと、「Access denied. You must log in to view …
senna_log_levelでぐぐったけど、まさかの何も見つからなかったので。
const char *senna_log_level_type_names[] = { "NONE", "EMERG",
"ALERT",
"CRIT", "ERROR",
"WARNING",
"NOTICE", "INFO",
"DEBUG",
"DUMP", NullS };
TYPELIB senna_log_level_typelib=
{
array_elements(senna_log_level_type_names)-1, "",
senna_log_level_type_names, NULL
};
…
1000000です。
↓は"log-bin= bin"を設定した状態。
# ll[さらに読む]
total 537160
-rw-rw---- 1 mysql mysql 56 May 20 14:32 auto.cnf
-rw-rw---- 1 mysql mysql 139 May 20 15:42 bin.000001
-rw-rw---- 1 mysql mysql 13 May 20 15:42 bin.index
-rw-r----- 1 mysql root 11916 May 20 15:42 error.log
-rw-rw---- 1 mysql mysql 884 May 20 15:42 ib_buffer_pool
-rw-rw---- 1 mysql mysql 268435456 May 20 15:42 ib_logfile0
-rw-rw---- 1 mysql mysql 268435456 May 20 15:42 ib_logfile1
-rw-rw---- 1 mysql mysql 12582912 May 20 15:42 ibdata1
-rw-rw---- 1 mysql mysql 6 May 20 15:42 mysql.pid
drwx------ 2 mysql mysql 4096 May 20 14:32 mysql
drwx------ 2 mysql mysql 4096 May 20 14:32 performance_schema
-rw-rw---- 1 mysql mysql 322 May 20 15:42 slow.log
drwx------ 2 mysql mysql 4096 May 20 14:32 test
# mv -i bin.000001 bin.999999
# …
そのままなんですが。
インデックス張ってからロードしたとき。
mysql> CREATE TABLE t1 (num int unsigned, val varchar(32), upd datetime default current_timestamp);[さらに読む]
mysql> ALTER TABLE t1 ADD KEY (val, upd), ADD KEY (upd);
mysql> LOAD DATA INFILE '/data/tmp/md5.tsv' INTO TABLE t1(num, val);
$ ls -ls /data/tmp/mysql/d1/t1.ibd
1754804 -rw-rw---- 1 mysql mysql 1795162112 May 20 14:41 /data/tmp/mysql/d1/t1.ibd
mysql> SHOW TABLE STATUS\G
*************************** 1. row ***************************
Name: t1
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 9705549
Avg_row_length: 74
Data_length: 727711744
Max_data_length: 0
Index_length: 1027342336
Data_free: 6291456
Auto_increment: NULL
Create_time: 2014-05-20 14:38:32
…
InnoDBのオンラインALTER TABLEの時に使われるパラメーター。
セッション変数のsort_buffer_sizeのように使われて、これをあふれたぶんだけsort_merge_passes相当の処理が走るので重くなる。
http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_sort_buffer_size
最大値が6.7GBに見えたけど全くの空目で、最大値は64Mと小さめ。暗黙のデフォルトは1M。
実際どれくらい違うのか。ざっくりテスト。
$ perl -e 'use Digest::MD5 qw/md5_hex/; open($fh, ">/data/tmp/md5.tsv"); for ($n= 1; $n<= 10000000; $n++) {printf($fh "%d\t%s\n", $n, md5_hex($n));}'
$ cat /data/tmp/md5.sql
SELECT @@innodb_sort_buffer_size;
use d1 …[さらに読む]
innobackupexのオプションごとにどれくらいかメモ。
主にファイルサイズと処理時間を比べたいだけなので、MySQLは起動しておれどトラフィックはなし。tpcc-mysqlのWH=
100をロードしただけ。
$ du -sh /data/mysql
14G /data/mysql
データファイル意外と小さかった。。RESET MASTERしたのでバイナリーログは当然含まず。
tarボールストリーム圧縮なし
$ time innobackupex /data/mysql --stream=tar | ssh mysql@backup-server "cat - > /data/tmp/xtrabackup.tar"[さらに読む]
..
real 4m53.213s
user 4m13.456s
sys 0m37.721s
$ ls -lh xtrabackup*
-rw-rw-r-- 1 mysql mysql 8.5G May 19 16:35 xtrabackup.tar
$ mkdir xtrabackup
$ time tar ixf xtrabackup.tar -C xtrabackup
real 0m16.243s
user …
MariaDBで実装されるという噂だったROLE、まだだと思っていたらもうあったんですね。ということでさっくり試してみる。10.0.5から実装されたらしいけど、試したバージョンは10.0.11。
オリジナルのドキュメントはこちら。 https://mariadb.com/kb/en/roles-overview/
まずはROLEを作成してみる。mysqlスキーマに対してSELECTのみの権限を持つsys_selectロールを作成して、yoku0825ユーザーに割り当てる。
MariaDB [mysql]> CREATE ROLE sys_select;[さらに読む]
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> GRANT SELECT ON mysql.* TO sys_select;
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> GRANT sys_select TO yoku0825;
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> GRANT …
わたしはレプリケーション(と、バイナリーログ)フィルターが嫌いです。
フィルターが評価されるルール が理解されないまま運用されてカレントデータベースがNULLのままUPDATEを実行したりする人がいたりするので嫌なんですが、ストレージとかスレーブの性能とかネットワークの帯域とかで使わなければならないことも多々あります。
そんな時によく使う、 pt-table-checksum のメモ。
$ pt-table-checksum --socket /usr/mysql/5.6.17/data/mysql.sock --user root --password xxxx --tables d1.t1,d1.t2,d2.t1 --replicate test.pt-tcs --create-replicate-table[さらに読む]
TS ERRORS DIFFS ROWS …