Docker環境下でのMySQLレプリケーション設定
Master/Slave構成で、Slaveコンテナ実行時に自動的にレプリケーション設定をするシェルスクリプトは以下のようになる。
#!/bin/bash -e # (1) MasterとSlaveを環境変数で制御する if [ ! -z "$MYSQL_MASTER" ]; then echo "this container is master" return 0 fi echo "prepare as slave" # (2) SlaveからMasterへの疎通確認をする if [ -z "$MYSQL_MASTER_HOST" ]; then echo "mysql_master_host is not specified" 1>&2 return 1 fi while : do if mysql -h $MYSQL_MASTER_HOST -u root -p$MYSQL_ROOT_PASSWORD -e "quit" > /dev/null 2>&1 ; then echo "MySQL master is ready!" break else echo "MySQL master is not ready" fi sleep 3 done # (3) Masterにレプリケーション用のユーザーと権限の作成 IP=`hostname -i` IFS='.' set -- $IP SOURCE_IP="$1.$2.%.%" mysql -h $MYSQL_MASTER_HOST -u root -p$MYSQL_ROOT_PASSWORD -e "CREATE USER IF NOT EXISTS '$MYSQL_REPL_USER'@'$SOURCE_IP' IDENTIFIED BY '$MYSQL_REPL_PASSWORD';" mysql -h $MYSQL_MASTER_HOST -u root -p$MYSQL_ROOT_PASSWORD -e "GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_REPL_USER'@'$SOURCE_IP';" # (4) Masterのbinlogのポジションを取得 MASTER_STATUS_FILE=/tmp/master-status mysql -h $MYSQL_MASTER_HOST -u root -p$MYSQL_ROOT_PASSWORD -e "SHOW MASTER STATUS\G" > $MASTER_STATUS_FILE BINLOG_FILE=`cat $MASTER_STATUS_FILE | grep File | xargs | cut -d' ' -f2` BINLOG_POSITION=`cat $MASTER_STATUS_FILE | grep Position | xargs | cut -d' ' -f2` echo "BINLOG_FILE=$BINLOG_FILE" echo "BINLOG_POSITION=$BINLOG_POSITION" # (5) レプリケーションを開始する mysql -u root -p$MYSQL_ROOT_PASSWORD -e "CHANGE MASTER TO MASTER_HOST='$MYSQL_MASTER_HOST', MASTER_USER='$MYSQL_REPL_USER', MASTER_PASSWORD='$MYSQL_REPL_PASSWORD', MASTER_LOG_FILE='$BINLOG_FILE', MASTER_LOG_POS=$BINLOG_POSITION;" mysql -u root -p$MYSQL_ROOT_PASSWORD -e "START SLAVE;" echo "slave started"
DockerのentrykitのprehookなどでMySQLが起動する前に.shファイルを実行できるので、活用していくと色々と楽にできそう*1
「機械学習のエッセンス」を読んだ
機械学習のエッセンスを読みました。
別に仕事で機械学習をするわけじゃないんですけど、Twitterで自分が結構前からフォローしている@hamukazuさんがMLの本を書いたらしいので(会社の金で)買って、一応一通り読みました。
前提として、私自身はそれなりに数学とPythonプログラミングの知識がすでにあります。 なので、一応全体に目を通して、気合入れて読んだのは最終章である5章だけなんですけど、個人的には結城浩先生(@hyuki)の数学ガールやJavaの入門書シリーズに匹敵するような読みやすさで、それだけでも結構価値があったんじゃないかなぁと思います。
主な対象者でいうと、「ある程度プログラミングはできるけど、数学はさっぱりなエンジニア」や「逆に数学はできるけど、プログラミングはあまりできない人」になるんでしょうかね。
大学初年度くらいの数学は身についていて、現役のエンジニアの人などは多分いきなり本格的なPythonの機械学習の本を読んでも大丈夫だと思います。
これ読んで思ったんですけどPRMLってあるじゃないですか、あれってめっちゃ要求されてる水準高いと思うんですけど、実際に最前線の機械学習エンジニアはあの程度できて当然なんですかね?それともTAOCPみたいに難しすぎて現場にはそぐわない感じの本なのでしょうか?
以上。各位がんばりましょう。
mediumからはてなに移行してきました...
ノリで作ったMediumのパブリケーションからはてな村にお引越ししました。
というわけで、よろしくお願いします。