Skip to main content

6 posts tagged with "MySQL"

View All Tags

· 3 min read

サーバーを設定していると対話型になるところがあるけど、それを文章化するのも面倒だし、スクリーンショットを撮るのも面倒だし、何よりも自動化できないので、可能な限りコマンドだけで設定を完了しておきたい。

環境は Ubuntu 14.04 。
インストールするアプリの都合で今回はこのバージョンを使っている。

ホスト名​

ホスト名の変更と hosts の書き換え。

export HOSTNAME=example.jp
hostname $HOSTNAME
sed -i "s/^\(127\.0\.0\.1.\+localhost\)/\1 $HOSTNAME/" /etc/hosts

エディタ​

デフォルトエディタの設定を変更する。
エディタは nano よりも vim の方が好み。

sudo update-alternatives --set editor /usr/bin/vim.basic

対話形式でエディタを選択したい場合はこうする。

sudo update-alternatives --config editor

タイムゾーン​

sudo sh -c 'echo "Asia/Tokyo" > /etc/timezone'
sudo dpkg-reconfigure -f noninteractive tzdata

対話形式でタイムゾーンを選択したい場合はこうする。

sudo dpkg-reconfigure tzdata

NTP​

sudo cp /etc/ntp.conf /etc/ntp.conf.org
sudo sed -i "s/^\(server\) \(.*\)/\1 ntp.nict.jp/" /etc/ntp.conf

server 1.time.constant.com server 2.time.constant.com server 3.time.constant.com

上記が次のようになる。

server ntp.nict.jp server ntp.nict.jp server ntp.nict.jp

MySQL​

export MYSQLPW=INPUT_PASSWORD
echo "mysql-server mysql-server/root_password password $MYSQLPW" | sudo debconf-set-selections
echo "mysql-server mysql-server/root_password_again password $MYSQLPW" | sudo debconf-set-selections
sudo apt-get -y install mysql-server

sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.org
sudo sed -i "/\[mysqld\]/i default-character-set=utf8\n" /etc/mysql/my.cnf
sudo sed -i "/\[mysqldump\]/i character-set-server=utf8\n" /etc/mysql/my.cnf
sudo sed -i "/\[mysql\]/i default-character-set=utf8\n" /etc/mysql/my.cnf

debconf-set-selections を設定せずに mysql をインストールするとrootのパスワードを聞かれる。

Supervisor​

Supervisor用の設定ファイルもコマンドで作成。
Supervisorにかぎらず、ファイルを作成する場合に使える。
sudoにコマンドを渡したいときは sudo -sh -c "command" とするとパイプなども期待通りに使える。

sudo sh -c "cat <<EOF > /etc/supervisor/conf.d/xvfb.conf
[program:xvfb]
priority=1
user=MYAPP
command=Xvfb :1 -screen 0 800x600x24
autostart=true
autorestart=true
directory=/opt/visionect
stdout_logfile=/var/log/xvfb-stdout.log
stderr_logfile=/var/log/xvfb-stderr.log
EOF"

sudo supervisorctl reread
sudo supervisorctl add xvfb
sudo supervisorctl status

Supervisor用の設定ファイルを作成したら、読み込ませることを忘れずに。

· One min read

MySQLでカラムの時刻を9時間前に変更するSQL。

update events set created = (created - interval 9 hour);

createdは作成時刻を表すカラム名。

intervalとか、hourという表記とか、便利なもんだ。

· 6 min read

Dockerはデーモン関係の取り扱いが弱いというか、一癖あるというか、ハマる人が多いような気がしている。
なぜそんな気がしているかというと、調べても情報が少ないっ!
なぜ調べていたかというと、自分がはまっていたから。

環境

環境はUbuntu 12.04。
Ubuntu系ならだいたい似たような感じと想定。
CentOSはわからない。

Docker上でMySQLを動作させる注意点

いくつか注意点があるので順番に紹介していく。

  1. Upstartが動作しない。
  2. 自動起動の方法がわからない。
  3. 初期化処理が実行されない。

これだけ抑えればちょっと変わったプロセスでもSupervisorを使った自動起動ができるようになると思う。

· 2 min read

Ubuntu 11.04のMySQLのデータディレクトリを変更したらmysqlが起動しなくなった! 原因はAppArmorによるディレクトリアクセスの許可がなかったから。 いつの間にかAppArmorなんてツールが管理してくれるようになったのね。

環境

OS: Ubuntu 11.04 旧データディレクトリ: /var/lib/mysql 新データディレクトリ: /data_dir/mysql

データディレクトリ移動

権限などそのままコピー。
sudo service mysql stop
cp -Rp /var/lib/mysql /data_dir/mysql

設定変更

データディレクトリを変更。
cd /etc/mysql
diff -u my.cnf.org my.cnf
-datadir        = /var/lib/mysql
+datadir = /data_dir/mysql

ここで、MySQLがアクセス可能なディレクトリを追加。

cd /etc/apparmor.d
diff -u usr.sbin.mysqld.org usr.sbin.mysqld
--- usr.sbin.mysqld.org 2011-07-31 17:36:15.151583572 +0900
+++ usr.sbin.mysqld 2011-07-31 19:21:48.884921627 +0900
@@ -29,8 +29,8 @@
/usr/share/mysql/** r,
/var/log/mysql.log rw,
/var/log/mysql.err rw,
- /var/lib/mysql/ r,
- /var/lib/mysql/** rwk,
+ #/var/lib/mysql/ r,
+ #/var/lib/mysql/** rwk,
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid w,
@@ -38,6 +38,9 @@

/sys/devices/system/cpu/ r,

+ /data_dir/mysql/ r,
+ /data_dir/mysql/** rwk,
+
# Site-specific additions and overrides. See local/README for details.
#include <local/usr.sbin.mysqld>
}

MySQLのアクセス可能なディレクトリを追加したので、AppArmorを再起動。

sudo service apparmor restart

MySQL起動

MySQLを再起動して完了。
sudo service mysql start

· One min read

MySQLのダンプデータを流し込もうとしたらリレーションのエラーが発生。 mysqlコマンドを使えば問題ないのだが、プログラムからコネクションを利用して流し込みたいときはうまく動作しない。

そういうときはSQL実行前に、 SET FOREIGN_KEY_CHECKS = 0; を実行する。 これで外部キーに関することはチェックしないのでデータを流し込めるようになる。 流し込んだら、 SET FOREIGN_KEY_CHECKS = 1; を実行して元に戻しておく。

· 2 min read

最近、DBが重たいなぁ~と思ったら、ついにDBが壊れました!! コメントが出ない・・・。 が~ん😢

慌ててMySQLについて調べてみた。 まずはほんとにDBが壊れたのかチェック。

sudo mysqlcheck --check <DB_NAME> -u <USER_NAME> -p
コメントテーブルが壊れてる😢

壊れたからって諦めない。 続いて修復を試みる。

sudo mysqlcheck --repair <DB_NAME> -u <USER_NAME> -p
ん?なんか治ったっぽい? もう一度、DBのチェックを行ってみたら全てOKと表示。 あら?ほんとに治った?

ついでにDBの最適化なんぞをやってみる。

sudo mysqlcheck --optimize <DB_NAME> -u <USER_NAME> -p

なんと、ブログの表示速度が劇的に改善された! 何回かDBを移行してるけど、最適化したことなかったからなぁ。 2年半もDBを使い回してるとこうなるのか(笑)

DBの最適化の必要性を実感した一件でした。

それでも、なんか調子悪い気がするから、近々OSを更新するか。