追記2
mysql のデータファイルを別パーティションにうつしたので追記。
例えば、/path/mysql に移すことにする。
# service mysql stop # mv /var/lib/mysql /path/mysql # vi /etc/mysql/my.cnf
- datadir = /var/lib/mysql + datadir = /path/mysql
# vi /etc/apparmor.d/local/usr.sbin.mysqld
+ /mnt/mysql/ r, + /mnt/mysql/** rwk,
# service apparmor restart
↑し忘れてもちゃんと動いたので、必要かは不明、いちおう後でやっといた
# service mysql start
なお、UNIX ソケットファイル socket = hogehoge を ramdisk とか早いディスクに移しても意味がないらしい。ファイルを実際に read/write するわけではないから、だそうな。
追記
mysql を 5.5 にして、チューニングしたので追記。
詳しくは、これだけはやっておきたいMySQL 5.5系の設定 - uehatsu's tech blog
character-set-server = utf8 skip-character-set-client-handshake default-storage-engine = InnoDB collation-server = utf8_general_ci innodb_file_format = Barracuda innodb_file_per_table = 1 innodb_use_sys_malloc = 0
先のページの通りだとエラーが出るので、default-storage-engine はIとDBをキャピタルに。(というか、5.5系ではもともと、InnoDB がデフォルトらしいので、不要っぽい)
また、innodb の独自ヒープを使えないよ、というエラーがなんか出て気持ち悪いので、innodb_use_sys_malloc=0 を追加した。
手順
- バックアップ。
# mysqldump -u USER -p --opt DBNAME --net_buffer_length=8000 | gzip > GZIPFILE
オプションの順番はテキトー
- DB削除。
上の手順で--opt
をつけていれば、drop table は関係ない。
どこまでやるかは、どれだけスッキリしたいかで変えれば良いと思う。
mysql の該当テーブルを消す。(drop table TBLNAME;)
データベースごと消すのもあり。(drop database DBNAME;)
mysql を完全に消すのもあり。(apt-get purge mysql-hogehoge、hogehoge は、色々あるやつ全部) - mysql 5.5 を入れる。
- 設定変更。
/etc/my.cnf へ追記する内容。character-set-server=utf8 skip-character-set-client-handshake default-storage-engine=innodb collation-server=utf8_general_ci innodb_file_format=Barracuda innodb_file_per_table=1
- mysql 設定反映と確認。
# service mysql restart # mysql -p > show variables like 'inno%';
- mysql を purge した場合、php5-mysql も消えてるかも知れんので再インストール。
# apt-get install php5-mysql # service apache2 restart
- リストア。
mysql の初期設定とか、DB 作ったりとか、dump した sql ファイルの取り込みは下の旧エントリを確認のこと。
これで、もと通りのはず。
でも、CPU の非力なマシンなので、未展開の領域にアクセスした時、応答が恐しく遅くなる。
あんまり酷かったら、このオプション (Barracuda) は外すかも…
追記、ここまで。
apache2 の設定メモ の続編.
mysql の設定とか.
設定
-
# mysql_secure_installation
で初期設定.基本,全部 Y で良い.root パスをインストール時からイチイチ変えるのがメンドイ時は,最初だけn.
-
全てのユーザー情報が削除されているため,root ログインのみ可能.
# mysql -u root -p
- ユーザの追加.
grant all privileges on databasename.* to username@localhost identified by 'password'; show grants for username@localhost; flush privileges;
- ユーザーの DB を作成.
$ mysql -u username -p > create database databasename;
- データ移行.
$ mysql -u username -p databasename < sqlfile
その他のtips
/etc/my.cnf の [mysqld] ディレクティブに
character-set-server = utf8 collation-server = utf8_general_ci
を追記すると、サーバー文字コードは変更可能
DB文字コードは、mysqlクライアント内で目的のDBに接続して、
alter database DBNAME character set utf8;
文字コードの調べ方は、
mysql クライアント内で
> status
または、
> show variables like "chara%";
1行が長すぎてエディットが難しいときは、
# mysqldump -u USERNAME -pPASSWD --opt --default-character-set=utf8 DBNAME --net_buffer_length=8000 | gzip > sql.gz
としてやれば、1行毎の文字数が 8,000 文字以下となるよう出力してくれる。
ダンプした sql ファイルの取り込みは、クライアントから
> source SQLFILE;
テーブルの文字コードを調べるには、show create table TBNAME; でテーブル作成コマンドを見る。
同じように、show create database DBNAME; でデータベース作成コマンドも見れる。
パスワード変更は,mysql 起動後に
> set password for 'USER'@'HOST'=password('PASS');
通常はUSER と HOST はシングルクォートで囲う必要はないけど,:などを入れる場合 (IPv6 アドレスで HOST を指定する場合など) は,囲えばコマンドが通る.
また,root は最初から localhost, 127.0.0.1, ::1 に対して設定されているので,1つずつ変更すること.